Claude Codeを半年使い続けた結果、気づいたらターミナルの設定が全部Claude中心になっていた。Ghosttyのショートカット、tmuxのウィンドウ名、fishのラッパー関数。どれも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のように操作する設定テンプレートMacpopup一覧
| 操作 | ショートカット | マッピング | 用途 |
|---|---|---|---|
| nvim | Cmd+N | prefix + n | カレントディレクトリでnvimを起動 |
| シェル | Cmd+Enter | prefix + Enter | シェルをpopupで起動 |
| fzfファイル検索 | Cmd+F | prefix + f | ファイルをfzfで選択してnvimで開く |
| yazi | Cmd+E | prefix + e | ファイルマネージャ |
| lazygit | Cmd+G | prefix + g | Git操作 |
| proclean | Cmd+P | prefix + p | orphanプロセスの対話的kill |
| workmux dashboard | Cmd+S | prefix + C-a | workmuxダッシュボード |
| workmux管理 | Cmd+D | prefix + d | worktree作成/merge/削除 |
| cc-pick | - | prefix + c | MCP/プラグインの対話的切替 |
ワークフローはこう。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 が直接更新される。
完了通知
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-a、feature-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削除)を選ぶ管理画面が出る。作成から片付けまで同じキーで完結する。
エージェント状態の可視化
workmuxのclaude pluginを入れると、Claude Codeの状態がtmuxのウィンドウタブにアイコンで表示される。処理中・入力待ち・完了がひと目でわかるので、複数ウィンドウで並行開発しているときに便利。

セットアップは 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ツールをパステルで統一Maccc.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をスマホから操作できる。
準備としてやっていることはこれだけ:
- 開発中のリポジトリをHappy Coderで2つ開いておく。並行で作業したいケースが多いので
- devサーバーもLANからアクセスできる形で起動しておく(
--host 0.0.0.0など) - あとはベッドからスマホで指示を出すだけ
PCのtmuxセッションはそのまま生きているので、翌朝デスクに戻ればClaude Codeの作業結果がそのまま確認できる。ただし、Macがスリープすると処理が止まるので対策が必要。
寝落ちして起きたらPRが完成してたことがある。朝イチのdiffが一番怖い。
環境の永続化: セッション復元と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%キーボードのレイヤー設計も組み合わせている。
まとめ
半年かけて育てた環境は、「Claude Codeとの対話をいかにスムーズにするか」から始まり、最終的に「ターミナル = Claude Code」という地点にたどり着いた。
nvimもシェルもファイル選択もpopupで呼び出すだけ。以前は中心だったツールが、Claude Codeの周辺に追いやられていった。Ghosttyのショートカットでtmuxを操作し、cc.fishでモードを切り替え、workmuxでエージェント状態を可視化する。全部がClaude Codeを中心に回っている。
ベッドに移動してもHappy Coderで開発は途切れない。翌朝デスクに戻れば、tmuxセッションにClaude Codeの成果物が待っている。
この環境が正解かはわからない。でも、半年間の試行錯誤で「自分にとって最も摩擦の少ない形」にはなった。