ターミナルの主役はClaude Code中心になった! Claude Codeファーストなターミナル構築

開発

Claude Codeを半年使い続けた結果、気づいたらターミナルの設定が全部Claude中心になっていた。Ghosttyのショートカット、tmuxのウィンドウ名、fishのラッパー関数。どれもClaude Codeありきの設定。半年かけて育てた環境の全容を書いていく。

Ghostty + tmux + Claude Codeの開発画面

ターミナル = Claude Code

半年使い込んで気づいたのは、ターミナルの主従が逆転していたこと。

以前の自分はこうだった。nvimやIDEでコードを書く。シェルで補助的にコマンドを叩く。tmuxでそれらを管理する。エディタが「メインの作業場」で、ターミナルは「その周辺」だった。

今は違う。Claude Codeが常にターミナルの中央にいて、nvimもシェルもファイル選択も「一時的に呼び出すツール」になった。lazygitをtmux popupで呼び出していたのと同じパターンが、あらゆるツールに広がった結果。

エディタを開きっぱなしにすることがなくなった。必要なときにpopupで呼び出して、編集が終わったら閉じる。Claude Codeのペインに戻る。この繰り返し。

IdeaVim歴8年のエンジニアが辿り着いた.ideavimrc完全設定ガイド【2026年版】開発

IDEのvim設定にこだわっていた時期もあるけど、今ではIDEを開く頻度自体が激減した。

自分はGhostty + tmuxで組んでいるけど、最近はcmuxのようにAIエージェント前提で設計されたターミナルも出てきている。垂直タブにgitブランチ表示、エージェント通知リング、組み込みブラウザなど、従来tmuxで頑張っていた部分が最初から入っている。

全てをpopupに: nvim、シェル、ファイル選択

lazygitやfzfをtmux popupで呼び出すパターンは以前から使っていたけど、これをnvimとシェルにも拡張した。

Ghostty × tmux CmdキーだけでtmuxをChromeのように操作する設定テンプレートMac

popup一覧

操作ショートカットマッピング用途
nvimCmd+Nprefix + nカレントディレクトリでnvimを起動
シェルCmd+Enterprefix + Enterシェルをpopupで起動
fzfファイル検索Cmd+Fprefix + fファイルをfzfで選択してnvimで開く
yaziCmd+Eprefix + eファイルマネージャ
lazygitCmd+Gprefix + gGit操作
procleanCmd+Pprefix + porphanプロセスの対話的kill
workmux dashboardCmd+Sprefix + C-aworkmuxダッシュボード
workmux管理Cmd+Dprefix + dworktree作成/merge/削除
cc-pick-prefix + cMCP/プラグインの対話的切替

ワークフローはこう。Claude Codeが動いている最中に Cmd+N を押すと、カレントディレクトリでnvimがpopupとして開く。設定ファイルを直接確認したり、Claude Codeに任せるほどでもない軽微な編集をする。終わったらもう一度 Cmd+N を押せば、元のClaude Codeペインに戻る。

Cmd+Enter のシェルpopupも同じ。npm run dev の出力をちょっと確認したい、git log を見たい、そんなときにClaude Codeのペインを離れずに済む。

最初は「nvimだけpopupにすればいいか」くらいだったのに、気づいたら全部popupになってた。常時表示してるのはClaude Codeだけ。

筆者

cc-pick: MCP/プラグイン管理

プロジェクトごとにMCPサーバーとプラグインを切り替えたいとき、.mcp.json を手で編集するのは面倒。cc-pickを使えば、~/.config/claude/mcp-presets/ に置いたプリセットからチェックボックスで選ぶだけで .mcp.json が更新される。プラグインのプロジェクト単位オーバーライドも同じ画面で管理できる。

prefix + c で tmux popup として起動。gitリポジトリのルートで実行されるので、プロジェクトの .mcp.json が直接更新される。

gunubin/cc-pick TypeScript

完了通知

Claude Codeの処理完了をmacOS通知で受け取る設定も組み合わせると、ターミナルを見ていなくても状況がわかる。

Claude Code × tmux もう完了通知を見逃さない通知設定開発

workmux: 並行開発とエージェント可視化

Git worktreeで並行開発

workmuxはGit worktreeとtmuxを統合するツール。wm add feature-x で新しいworktreeとtmuxウィンドウが同時に作られる。

Claude Codeで複数の機能を並行開発するとき、ブランチの切り替えではなく、ウィンドウの切り替えで済むのがいいんだよね。コンテキストが混ざらないのが気に入っている。

ブランチ名を考えるのも面倒なので、fishの wma コマンドで自動生成している。feature-2026-02-23-afeature-2026-02-23-b のように日付+連番で命名されるので、wma を叩くだけでworktreeが作れる。

wma           # → workmux add feature-2026-02-23-a
wma           # → workmux add feature-2026-02-23-b(同日2回目)
wma -- -p "バグ修正して"  # プロンプト付きで起動

Cmd+D を押すと、今いる場所に応じてpopupの中身が変わる。通常のディレクトリなら新規worktree作成画面。workmuxウィンドウやgit worktree内なら、merge(mainへマージ)またはremove(worktree削除)を選ぶ管理画面が出る。作成から片付けまで同じキーで完結する。

raine/workmux git worktrees + tmux windows for zero-friction parallel dev Rust 800

エージェント状態の可視化

workmuxのclaude pluginを入れると、Claude Codeの状態がtmuxのウィンドウタブにアイコンで表示される。処理中・入力待ち・完了がひと目でわかるので、複数ウィンドウで並行開発しているときに便利。

tmuxのウィンドウタブ。アクティブウィンドウがハイライトされ、dotfilesウィンドウにチェックマークが表示されている

セットアップは workmux setup を実行するだけ。Claude Codeを検出して、Hooks設定を自動でインストールしてくれる。

以前は自前のシェルスクリプトとHooksで同じことをやっていたけど、workmuxに移行してからはメンテナンス不要になった。

実はworkmuxを見つける前に自作しようとしてた。tmuxとgit worktreeを連携するスクリプトを書き始めたところで検索したら、もう存在してた。先に調べような。

筆者

見た目: Catppuccin + シェーダー

Ghostty、tmux、Starship、Neovim、bat、yazi、eza、fzfの8ツールをCatppuccin Mochaで統一している。見た目の統一だけでなく、ペイン境界やステータスバーが同じ色調になることで視線移動が楽になるんだよね。シェーダーで火花やカーソル軌跡を飛ばす遊びも含めて、別記事にまとめた。

Catppuccinで作る「かわいい」ターミナル環境|7つのCLIツールをパステルで統一Mac

cc.fish: Claude Codeのランチャー

Claude Codeの起動は cc コマンドに統一している。fishのカスタム関数で、モードやモデルを引数で切り替えられるようにした。

cc              # 通常起動
cc team         # Agent Teams有効
cc fast         # 段階的推論オフ(高速化)
cc long         # Bashタイムアウト30分
cc opus         # Opusモデル指定
cc sonnet       # Sonnetモデル指定
cc c            # 直前セッション継続
cc pr 123       # PR連動セッション
cc task         # タスクリスト連携(リポジトリ名から自動ID生成)
Claude Codeが地味に快適になる細かいTips集開発

ベッドでの開発: Happy Coder

スマホだけでアプリ開発する方法|家族の横でこっそりOTAデプロイ開発

デスクを離れても開発は続く。Happy CoderでClaude Codeをスマホから操作できる。

準備としてやっていることはこれだけ:

  1. 開発中のリポジトリをHappy Coderで2つ開いておく。並行で作業したいケースが多いので
  2. devサーバーもLANからアクセスできる形で起動しておく(--host 0.0.0.0 など)
  3. あとはベッドからスマホで指示を出すだけ

PCのtmuxセッションはそのまま生きているので、翌朝デスクに戻ればClaude Codeの作業結果がそのまま確認できる。ただし、Macがスリープすると処理が止まるので対策が必要。

寝落ちして起きたらPRが完成してたことがある。朝イチのdiffが一番怖い。

筆者
Claude CodeでMacがスリープして困る?4つの解決策を比較してみた開発

環境の永続化: セッション復元とdotfiles

セッション自動復元

tmux-resurrectとtmux-continuumの組み合わせで、PCを再起動してもセッションが復元される。Claude Codeで複数プロジェクトを並行してるときに、セッションが消えるのは致命的なので、本当に助かっている。

# tmux.conf
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
tmux-plugins/tmux-resurrect Persists tmux environment across system restarts. Shell 12,475 tmux-plugins/tmux-continuum Continuous saving of tmux environment. Automatic restore when tmux is started. Automatic tmux start when computer is turned on. Shell 3,819

dotfiles管理: GNU Stow

ここまでの設定は全てdotfilesリポジトリで管理している。GNU Stowでシンボリックリンクを作成して、Makefileで自動化。

dotfiles/
├── ghostty/.config/ghostty/config
├── tmux/.config/tmux/tmux.conf
├── fish/.config/fish/config.fish
├── claude/.config/claude/scripts/
│   └── deny-check.py
└── git/.config/git/config

make install で全設定がシンボリックリンク経由で適用される。新しいMacでも環境の再現が一瞬で終わるのでおすすめ。入力環境としては40%キーボードのレイヤー設計も組み合わせている。

40%キーボードのQMK設定を1年かけて最適化した話|レイヤーを減らす設計哲学ワーク環境

まとめ

半年かけて育てた環境は、「Claude Codeとの対話をいかにスムーズにするか」から始まり、最終的に「ターミナル = Claude Code」という地点にたどり着いた。

nvimもシェルもファイル選択もpopupで呼び出すだけ。以前は中心だったツールが、Claude Codeの周辺に追いやられていった。Ghosttyのショートカットでtmuxを操作し、cc.fishでモードを切り替え、workmuxでエージェント状態を可視化する。全部がClaude Codeを中心に回っている。

ベッドに移動してもHappy Coderで開発は途切れない。翌朝デスクに戻れば、tmuxセッションにClaude Codeの成果物が待っている。

この環境が正解かはわからない。でも、半年間の試行錯誤で「自分にとって最も摩擦の少ない形」にはなった。

Thanks for reading!
Claude CodeGhosttytmuxfishターミナル