AIエージェントコーディングのためのターミナル環境
Ghostty、Yazi、Fish、LazyGitで複数のAIエージェントを並列実行する軽量ターミナルスタックを紹介します。
AIコーディングのボトルネックは、もはやエージェント自体ではありません。Claude Code、Aider、Codex CLIといったツールは十分に優秀です。本当の制約は、複数のエージェントを並列に操作し、出力を監視し、方向がずれた時に修正し、成果物をマージする人間の能力にあります。
私はこの問題に対して、ターミナルファーストのセットアップを使っています。軽量でコンポーザブルな4つのツール:ターミナルにGhostty、ファイルナビゲーションにYazi、シェルにFish、Git操作にLazyGit。それぞれの役割を説明します。
なぜターミナルなのか
AIコーディングエージェントはCLIネイティブです。ファイルを読み、コマンドを実行し、ターミナルに出力します。3つのエージェントを同時に動かすなら - 1つは機能開発、1つはバグ修正、1つはテスト作成 - 3つのシェルセッションを並べて表示する必要があります。
IDEでも可能ですが、コストが伴います。VS Codeで複数の統合ターミナル、拡張機能、言語サーバー、エディタ本体を動かすと、簡単に2〜4GBのRAMを消費します。そのメモリはAIエージェントが使えるはずのリソースです。すべてのコンテキストトークン、APIコール、ファイル読み取りが同じシステムリソースを奪い合います。
軽量なターミナルセットアップはこの構図を逆転させます。私が使うツールを全て合わせても、Electronベースのエディタ1つ分よりはるかに少ないリソースしか消費しないため、実際に仕事をするエージェントにリソースを集中できます。
Ghostty - 基盤
Ghosttyは、macOSではMetal、LinuxではOpenGLを使用するGPUアクセラレーテッドターミナルエミュレータです。Zigで書かれており、プレーンテキストのレンダリングベンチマークではiTerm2やKittyの約4倍高速で、高負荷時でもおよそ60fpsを維持します。
エージェントワークフローで最も重要な機能は、ネイティブの分割とタブです。tmuxは不要です。Ghosttyがアプリケーションレベルでペイン分割を処理するため、レンダリングはスムーズで、フォントスケーリングも正確で、設定の手間もありません。新しい分割を開き、エージェントを起動すれば、すぐに実行できます。
私の通常のレイアウトは4ペインです:
- 左上: フィーチャーブランチで作業するClaude Code
- 右上: 別のタスクを処理する2つ目のエージェント
- 左下: ファイル変更を監視するYazi
- 右下: レビューとコミットを行うLazyGit
LLMが長いレスポンスをストリーミングする際、高速な出力に追いつけないターミナルがあります。GhosttyのGPUレンダリングはフレームドロップやラグなくこれを処理でき、複数のストリームを同時に監視する場合に特に重要です。
Yazi - エージェント作業中のナビゲーション
3つのエージェントがコードベース全体でファイルを変更している時、何が変わっているかを素早く確認する手段が必要です。Yaziは完全非同期I/Oを備えたRust製のターミナルファイルマネージャーです。すべての操作がノンブロッキングなので、大きなディレクトリをナビゲートしている最中にバックグラウンドでファイルプレビューが読み込まれても止まることがありません。
私は1つのペインにYaziを開いておき、以下の用途で使っています:
- 変更の監視 - エージェントがリアルタイムでファイルを作成・修正する様子を確認
- ファイルプレビュー - エディタを開かずに、シンタックスハイライト付きのコード、画像、PDFまでインラインで確認
- 一括リネーム - エージェントが生成したファイルの命名規則を調整する時に
- ディレクトリ間の高速移動 - ブックマークと検索機能を活用
プラグインシステム(Luaベース)でワークフローに合わせたカスタマイズが可能です。Git状態表示やディレクトリジャンプ用のプラグインをいくつか使っていますが、デフォルト設定だけでも十分実用的です。
Fish Shell - 認知負荷の軽減
4つのターミナルペインを切り替えながら作業すると、認知負荷が急速に蓄積します。ペインをちらっと見て、何をしていたか思い出し、状況を把握し、コマンドを入力して、次に移る必要があります。
Fishは、設定不要ですぐに機能する特徴でこの摩擦を軽減します:
- オートサジェスト: Fishが履歴に基づいてコマンドの続きをグレーのテキストで提案します。右矢印キーで確定。プラグインは不要です。
- シンタックスハイライト: 有効なコマンドは一つの色、無効なコマンドは別の色で表示されます。Enterを押す前にタイポを発見できます。
- タブ補完: Fishがmanページを解析して自動的に補完リストを生成します。コマンドを入力してタブを押せば、状況に応じたオプションが表示されます。
zshとの決定的な違いはゼロコンフィギュレーションです。oh-my-zshのインストールも、.zshrcの管理も、プラグインマネージャーの更新も不要です。Fishはインストール直後から動作します。エージェントの管理に集中している時に、シェルの設定をデバッグしたい人はいないでしょう。
LazyGit - ワークツリーベースの並列開発
ここでこのセットアップが並列エージェント作業で真価を発揮します。LazyGitはGit用のターミナルUIで、ワークツリーサポートがマルチエージェント開発を現実的にします。
パターンはシンプルです:各エージェントが別々のGitワークツリーで作業します。ワークツリーは、異なるブランチを異なるディレクトリにチェックアウトしたリポジトリのリンクされたコピーです。エージェントAは./feature-auth/でfeat/authブランチを、エージェントBは./fix-perf/でfix/performanceブランチを作業します。互いのファイルに触れないため、並列作業中にマージコンフリクトが発生しません。
LazyGitはこのワークフロー管理を視覚的かつ高速にします:
- ワークツリー作成 - キー1つ(
w)で作成 - ワークツリー間の切り替え - 各エージェントの作業結果をレビュー
- インタラクティブリベース - マージ前にエージェントのコミット履歴を整理
- ビジュアルdiff - ブランチ間の変更を並べて比較
- 元に戻す/やり直し - reflog統合により、エージェントが予期しない結果を出した場合
zで巻き戻し
視覚的なGitツールなしで複数のワークツリーを管理するには、cdコマンドとgit log出力をディレクトリごとに切り替える必要があります。LazyGitはこれを1つのナビゲーション可能なインターフェースに集約します。
すべてをまとめると
典型的なセッションはこのように進みます:Ghosttyを開き、4つのペインに分割します。LazyGitで2つのワークツリーを作成 - 1つは機能開発用、1つはバグ修正用。左上のペインで機能ワークツリーを指すClaude Codeを起動し、右上のペインでバグ修正ワークツリーを指す2つ目のエージェントを起動します。左下はYaziで、両方のワークツリーディレクトリを参照し、変更をリアルタイムでプレビューします。右下はLazyGitで、diffをレビューし、変更をステージングし、最終的に両方のブランチをマージします。
重要なのは、これらのツールがどれもリソースを奪い合わないことです。Ghostty、Yazi、Fish、LazyGitはすべてコンパイルされたネイティブプログラムです。Electronランタイムも、JVMも、バックグラウンドでメモリを消費するPythonインタプリタもありません。実際のコンピューティングが行われるAIエージェントにシステムリソースが残されます。
おわりに
最高のAIエージェントコーディング環境は、どのAIモデルを使うかではなく、人間のレイヤーで決まります。複数のエージェントを実行し、出力を監視し、方向がずれた時に修正し、成果物をきれいにマージする能力が、実際の生産性を決定します。
このスタックは自分の意見が反映されていますが、ミニマルです。レンダリングはGhostty、ファイルはYazi、シェルはFish、GitはLazyGit。それぞれ高速で、軽量で、コンポーザブルです。AIコーディングエージェントを使っていて、まだ並列ターミナルワークフローを試していないなら、この中から1つを選んで、ワークフローがどう変わるか確かめてみてください。
ニュースレターに登録
最新のプロジェクト、記事、AIとWeb開発の実験に関する情報をお届けします。