この記事ははてなエンジニア Advent Calendar 2020の6日目の記事です。
qiita.com
5日目は id:mizdra さんによるpolyfill を深堀りするでした。フロントエンド周りは弱い自分としてもこの記事を読むだけでpolyfillの概要から今後どうすると良いかなど知れてとてもありがたい記事でした。
さて今日は視点変えてツールの話を書きます。毎日使っているツールこそ、提供されている便利な機能を把握しておきたい。Macで使ってるターミナルアプリ「iTerm2」について書きます。
iterm2.com
まずはみんながひょっとしたら知らない基本操作についていくつか紹介し、後半はTriggersという機能の使い方をいくつか紹介します。
(記事執筆時点ではver.3.4を使っています)
tl;dr
- 公式ドキュメントにいろいろ書いてあるので読みましょう。
- iTerm2使ってるならTriggerをいろいろ設定しましょう。
iTerm2で知ってるとちょっと便利な基本操作
検索は正規表現にも対応してます
- Command+Fとかでターミナル内検索ができるのはご存知の方多そうですが、そのときに表示される下矢印をクリックすると検索オプションを選べます。大文字小文字を区別するかどうか、正規表現で検索するかどうかなどが選べます。
![f:id:stefafafan:20201205182544p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205182544.png)
![f:id:stefafafan:20201205182640p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205182640.png)
iTerm2に貼り付けしたものはPaste Historyとして履歴を一覧してみたり絞り込みして選択できる
- iTerm2に何度もコピペしてるうちに「3つ前、4つ前に貼り付けしたものを再び参照したいな」となった場合はCommand+Shift+Hで履歴一覧がでます。ここからさらに文字を入力して絞り込むことも可能です。
![f:id:stefafafan:20201205183443p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205183443.png)
![f:id:stefafafan:20201205183519p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205183519.png)
Toolbeltで実行履歴やペースト履歴を表示・選択
- Command+Shift+BでToolbeltの表示をトグルできます。
- Toolbeltメニューからここに何を表示するか項目をいろいろ選択できるので、先ほど言ってたPaste Historyだったり、Command Historyだったりを右側に常時表示しておいてそこからどれか選んで実行するみたいなこともできます
![f:id:stefafafan:20201205183556p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205183556.png)
Copy Modeに入ってキーボードのみでiTerm2上の文章をコピーする
- 出力結果などをコピーしたいとなった場合にマウスで選択してコピーもできますが、Copy Modeに入ってキーボード操作で選択してコピーもできます。
- Cmd+Shift+Cでコピーモードに入り、hjkl (もしくは矢印キー)で移動し、vで選択開始、yでコピーできます。
![f:id:stefafafan:20201205183937p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205183937.png)
Save Markで目印をつけて、キーボードショートカットでその目印をつけた場所へ1発で戻る
- 例えばコマンドの出力が大量にあって、そのコマンドを実行したところまで戻りたいケースなどは、マウスでたくさんスクロールしたりCtrl+Fで検索して戻るのがちょっと面倒なことがあるかもしれません。
- あらかじめ戻りたい場所が決まっている場合は、 Command+Shift+M でSave Markしましょう。チェックポイントをつけるイメージです。マークがついた行は青い印がつきます。
- ちなみにShell Integrationをインストール済の場合はcommand promptごとに自動でマークされます。
![f:id:stefafafan:20201205184959p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205184959.png)
- あとでそのMarkに戻りたい場合は Command+Shift+J で Jump To Mark できます。一瞬でその部分へ飛ぶ上に行がハイライトされてわかりやすいです。もしくはMarkが複数ある場合は Command+Shift+矢印で上下に移動できます。
![f:id:stefafafan:20201205185037p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205185037.png)
Timestamp表示トグル
- Command+Shift+Eでタイムスタンプの表示をトグルできます。何時にどのコマンドを実行したのか、画面の横の方を見るだけでわかって便利です。
![f:id:stefafafan:20201205185235p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205185235.png)
さっきまで画面に表示されていたものを見たい場合はInstant Replayモードで時間を巻き戻す
- Instant Replayモードを使うと時間を巻き戻せます。
- Command+Option+Bでモードに入るのでここで矢印キーで左右押していくと秒単位で画面に表示されていたものが再び表示されます。
- 何時何分何秒に何が起きていたかこれであとで見返せるので便利です。
- 試してみるとターミナルを縮めたとかも記録されていてすごい。
![f:id:stefafafan:20201205190401p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205190401.png)
- デフォルトではこの機能のために4MB割り当てられています、もっと増やしたい場合は設定で増やせます。
iTerm2で設定できる様々なTrigger紹介
ここから先はTriggers機能を使ってできることをいくつか紹介します。Preferences→Profiles→Advanced→Triggersで設定できます。
ここに紹介しているもの以外にもあります。使い方は工夫しましょう。
![f:id:stefafafan:20201205190636p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205190636.png)
特定の文字列が表示されたらハイライトする Highlight Text
- ターミナルの出力のうち目立たせたい文字列があるならハイライトさせちゃいましょう。
- 自分は production という文字列が登場したら赤くハイライトさせたり、Compilation failedという文字列の場合は紫色にハイライトさせたりしてみてます。
- 今回たまたま文字列をハイライトさせてますが、Macの通知を発火させるなども可能です。
![f:id:stefafafan:20201205191352p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205191352.png)
![f:id:stefafafan:20201205191309p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205191309.png)
Passwordを求められたときにiTerm2内臓のパスワードマネージャーを起動させる
- iTerm2にはPassword Managerがあり、ここにsudoしたときやsshしたときなどに聞かれるパスワードを入れておくことができます。
- Window→Password Managerで開いてあらかじめパスワードを設定しておきましょう (キーチェーンに記録されます)。
![f:id:stefafafan:20201205191908p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205191908.png)
- 次にTriggerの設定でRegular Expressionのところに Password: を設定して、Actionに Open Password Manager、Instantもチェック入れておきましょう。
- またパスワードが複数ある場合はデフォルトを設定できます。Parametersの欄に一番頻繁に聞かれるやつを設定しておこう。
![f:id:stefafafan:20201205192043p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205192043.png)
- これでPassword:というプロンプトが来るたびに自動的にパスワードマネージャーが開く。デフォルトのやつでOKならそのままEnter押せばOKだし、他のパスワード選びたかったら選択してEnterでOK。
- ※ パスワードを使うとき、キーチェーンのロック解除を求められることがあるがTouch IDつきMacBook Proを使ってる場合はTouch IDで解除可能
![f:id:stefafafan:20201205192155p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205192155.png)
コンパイルエラーや実行結果のエラーをCaptured Outputでキャプチャし、Toolbeltの欄に一覧を出力する
- 使う言語に細かい差はありそうですが、実装中にコンパイルエラーが複数出力されたり、テストケースが複数失敗したりすることが日頃ある。
- このとき出力の量が多いとそれぞれの出力の最初の行がどこなのかを見つけるためにスクロールしつつ目でgrepするなりする必要があり、試行錯誤中だとこれが地味に面倒だったりする。
- Captured OutputのTrigger使うとこれがちょっとマシにできる。
- 自分の場合はPerlで最近開発をしていたので、Perlのテスト出力結果のうち「not ok 数字 - ...」出てる行から先を見つけたい。この場合はRegular Expressionのところに「not ok [0-9+]」と入れて、ActionはCapture Outputに設定する
![f:id:stefafafan:20201205193000p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205193000.png)
- あとはToolbeltのCaptured Outputを表示した状態でPerlの失敗するテストを実行するとリアルタイムに右側にこの行とこの行とこの行がマッチしたというのが一覧で表示される。それぞれクリックするとその行へとジャンプしてくれるので非常に便利。
![f:id:stefafafan:20201205193121p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205193121.png)
![f:id:stefafafan:20201205193303p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205193303.png)
ssh先に応じて背景の色とか壁紙を切り替える
サーバ上で作業していてうっかり本番環境だった……なんてことは避けたいですよね。プロファイルを切り替えてあきらかに本番環境というのがわかるようになると良いかもしれません。これはやり方がいくつかあるようです。
- iTerm2のプロファイルを切り替えるエスケープシークエンスをssh時に実行してくれるスクリプトを自前で用意して実行する方法
- iTerm2のShell Integrationをssh先含めあちこちの環境にあらかじめ導入した上でAutomatic Profile Switchingを設定する方法
- 現在のusernameやhostnameを取得するiTerm2のTriggerを設定した上でAutomatic Profile Switchingを設定する方法
1番はこれだけのためにスクリプト増やすことになるし2番はあきらかに面倒そう、ということでここでは3番のやり方を紹介します。以下のサイトを参考にしました。
iterm2.com
blog.n-z.jp
- まずTriggerを開いてRegular Expressionに「^(\w+)@([\w\-]+):.*\$」を設定する。これは stefafafan@some-host:/~ みたいな文字列のうちの stefafafan の部分と some-host の部分をキャプチャするための正規表現です
- Actionとしては Report User & Host、Parametersとしては \1@\2 を設定し、Instantにもチェックを入れます。
![f:id:stefafafan:20201205194740p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205194740.png)
- 次にProfileを増やします。Duplicate Profileから増やすのが簡単です。ここからAdvancedに移動し、下の方のAutomatic Profile Switchingを選びます。ここに例えばですが、 stefafafan@some-host という項目を追加すれば、stefafafanとしてsome-hostにsshしたらこのProfileに自動的にスイッチされるようになります
![f:id:stefafafan:20201205194929p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205194929.png)
- あとはお好みに応じてこのProfileのBackground Imageを変更するなりすれば完成
![f:id:stefafafan:20201205195749p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/s/stefafafan/20201205/20201205195749.png)
終わり
- 自分で記事書いておきながら調べたら思いの外色々と便利そうな機能があったので満足した。使いこなしていきましょう。
- 明日は
id:shallow1729 さんです。よろしくお願いします!