ShellSageがiTermを愛する理由
本文の状態
日本語全文を表示中
詳細モードで約6分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
Answer.AI
AnswerAIのNate Cooper氏が開発したShellSageは、tmuxとiTerm2を連携させ、ターミナル上のコマンド履歴をAIに提供し、コンテキストを活用する便利なツールである。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
これは、AnswerAI から最近登場した最もクールな技術ツールの一つである Nate Cooper 氏の ShellSage を便利に利用するための簡単なノートです。
Nate が指摘している通り、ShellSage はその魔法を tmux に依存しています。tmux はターミナルマルチプレクサ(terminal multiplexer)です。伝統的には、ターミナルエミュレータ(macOS 上の Terminal.app など)と 1 つ以上のシェル(bash など)の間に位置します。この「間に入る」構造こそが、入力されるコマンドとその出力を監視し、その文脈を AI に利用可能にする仕組みです。
iTerm2 と tmux コントロールモード
しかし、マルチプレクシング自体に興味がない場合、どうでしょうか?具体的には、tmux ペイン間の切り替えに使う tmux のキーボードコマンドを学ぶことや、複数のペインを 1 つのターミナルウィンドウに配置する tmux のビジュアルインターフェースを使用することに興味がないかもしれません。
tmux への主な関心が ShellSage を有効化することだけであるなら、iTerm2 で利用可能な機能である「tmux コントロールモード」を検討してみる価値があります。これを使えば、ターミナルはデフォルトで統合されたシェルセージ(ShellSage)を備えて起動します。以下のようにです。
簡潔に説明すると、tmux コントロールモードが何を行うか、そして ShellSage のためにそれを設定するいくつかの方法についてご紹介します。
iTerm2.app は、OS に標準搭載されている Terminal.app や Warp などと同様、macOS のターミナルエミュレータの一つに過ぎません。しかし iTerm2 では、tmux -CC を実行して制御モードを有効化すると、カスタムのテキスト UI を描画する代わりに、tmux が制御信号を直接 iTerm2 に送信し、iTerm2 がネイティブの UI コントロールを使用して tmux のペインを描画します。その結果、テキストフッターで示された tmux ペインではなく、ウィンドウ内に別々のタブとして表示されます。キーボードショートカット(次へは C-b n など)でペインを切り替える代わりに、マウスまたは通常のショートカット(C-})でタブを切り替えることができます。同様に、タブ内ではネイティブのスクロールバーを使用してスクロールできます。
つまり、tmux の制御モードを使用している間、tmux はその機能を提供しつつ、インターフェースをほとんど変更しません。それで何になるのでしょうか?要するに、iTerm2 の制御モードを通じて tmux を使用すれば、ターミナルインターフェースを変更したり新しいコマンドを覚えたりすることなく、ShellSage の恩恵を受けることができます。
これを手間なく実現するための鍵は、tmux を介さずにシェルを起動するかのように、直接 tmux へ起動する iTerm2 プロファイルを設定することです。
これを実現する方法を二つ紹介します。
ローカルマシンへの接続の場合
まず、ローカルマシンに tmux がインストールされていることを確認し、tmux 実行ファイルのパスをメモしてください。ここでは tmux のパスを /opt/homebrew/bin/tmux と仮定します。
第二に、デフォルトで開きたいシェルのパスを見つけます。それがシステム標準のシェル(macOS では /bin/zsh)でない場合、tmux 自体が起動する際のシェルを指定する行を ~/.tmux.conf に追加してください。例えば、以下の行は homebrew が提供する新しいバージョンの bash を tmux で使用するように設定します:
set-option -g default-shell /opt/homebrew/bin/bash
第三に、iTerm2 の「設定」→「プロファイル」へ移動し、新しいプロファイルを作成します。「一般」セクション内の「コマンド」サブセクションで、「コマンド」ドロップダウンの値を以下のように設定してください:
/opt/homebrew/bin/tmux -CC new-session -A -s main

ローカル tmux 用の iTerm プロファイル設定
このプロファイルを起動すると、bash を直接起動する代わりに、tmux が制御モードで起動し、「main」という名前の tmux セッションを作成または接続するように指示されます。そして、前述の .tmux.conf の最初の設定により、その結果として bash シェルが起動します。
リモートホストへの接続の場合
リモートホストの場合もセットアップは同様です。
唯一の違いは、リモートホストの名前を box と仮定すると、以下のようなコマンドを使用する必要がある点です:
/usr/bin/ssh -t box 'tmux -CC new-session -A -s main'

リモート tmux 用の iTerm プロファイル設定
このコマンドを使用すると、プロファイルが起動され、ホストに SSH で接続されると同時に同じ tmux コマンドが渡され、「main」と名付けられた tmux セッションへの再接続または作成が行われます。
その他の利便性と詳細
これらのプロファイルのいずれかをデフォルトとして設定できます。これにより、iTerm を起動する際に自動的に起動されるようになります。この方法であれば、ワークフローに他の変更を加えることなく、慣れ親しんだターミナル UX 内で ShellSage をデフォルトで利用できるようになります。あるいは、これらのプロファイルを直接簡単に起動できるようにキーボードショートカットを割り当てることもできます。
最後に、整理を保つために、iTerm2 の設定 > 一般 > tmux に移動し、「接続後に tmux クライアントセッションを自動的に隠す」というラベルのチェックボックスが有効になっていることを確認してください。これを無効にすると、tmux は制御モードのバックチャネルを表示するためだけに別のウィンドウも開いてしまいます。これはデバッグや接続操作のための別キーボードインターフェースを提供する場合に便利ですが、必要ないため、デフォルトで表示したくないでしょう。
コントロールモードは完璧ではありません。主な問題は、他のターミナルエミュレータ(申し訳ありませんが、Windows!)では広くサポートされていないことです。しかし、人々が引き続き質問しているので、状況が変わるかもしれません。良いニュースは、このモードに縛られないということです。別のクライアントから通常の tmux を使用して、同じセッションにいつでも再接続できます。同時に接続することも可能です。
ただし、iTerm を使用することに満足しているなら、コントロールモードは素晴らしいものです。これは、細かな調整が必要な作業(マルチプレクシング、複数の平面、セッションへのアタッチ、カスタムキーボードコマンドなど)を、透明で摩擦のないものに変えます。この点では ShellSage と同じであり、両者がよく相性合うのは驚くべきことではありません。
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み