
Ghostty は HashiCorp 創業者 Mitchell Hashimoto による高速なターミナルエミュレータで、2024 年末の 1.0 リリース以降、macOS / Linux で iTerm2 や Terminal.app の代替候補として急速に普及しています。一方 tmux はターミナルマルチプレクサの定番で、画面分割・セッション永続化・detach/attach といった独自の価値を持ちます。
Ghostty 単体でもタブ・分割は可能ですが、「ターミナルを閉じてもセッションが死なない」「SSH 切断に強い」「同じセッションに別マシンから繋ぎ直せる」 という性質は tmux にしかありません。さらに Claude Code のような長時間実行する CLI エージェントを使う上で、この永続化は実用上ほぼ必須です。
この記事では Ghostty + tmux + Claude Code の三層構成を、ゼロから構築する手順をまとめます。
tmux と Ghostty の役割分担と組み合わせる理由
macOS での tmux インストールと最小限の操作
Session / Window / Pane の 3 概念と必須キーバインド
実用的な .tmux.conf カスタマイズパターン
TPM (Tmux Plugin Manager) と主要プラグインの導入
Ghostty 固有の連携設定 (true color / 拡張キーボード / 自動 attach)
Claude Code を tmux 配下で運用するベストプラクティス
Ghostty を導入済みで、tmux をこれから使い始める人
iTerm2 / Terminal.app から Ghostty に乗り換えたばかりで、セッション管理を強化したい人
Claude Code や長時間ジョブを扱うため、ターミナル永続化を必要としている開発者
macOS ユーザー (Linux でもほぼ同じ手順で動作)
macOS (Apple Silicon または Intel)
Homebrew インストール済み
Ghostty インストール済み (~/.config/ghostty/config が利用可能)
ターミナルでの基本操作に抵抗がない
tmux (terminal multiplexer) は 1 つのターミナルウィンドウの中に複数の独立した仮想ターミナルを持てるツールです。役割を整理すると以下の 3 層に分かれます。
| レイヤー | 役割 | 例 |
|---|---|---|
| ターミナルエミュレータ | 描画・ウィンドウ管理 | Ghostty / iTerm2 / Alacritty |
| マルチプレクサ | セッション・ペイン・永続化 | tmux / zellij / screen |
| シェル / CLI | コマンド実行 | zsh / fish / claude |
tmux が提供する価値は次の 3 点に集約されます。
画面分割: 1 ウィンドウ内に複数のシェルを並べられる
セッション永続化: ターミナルを閉じても・SSH が切れてもプロセスが死なない
detach / attach: 同じセッションに別マシンから繋ぎ直せる
Ghostty 自体にもタブ・ペイン分割機能はありますが、永続化と detach は tmux にしかありません。これが両方を組み合わせる最大の理由です。
macOS では Homebrew で即インストールできます。
brew install tmux
tmux -V # → tmux 3.6 などが表示されれば OK
バージョン確認まで通れば準備完了です。設定ファイルもプラグインも不要で、すぐに起動できます。
tmux # 起動
exit # 終了 (またはセッション内のシェルを全部閉じる)
tmux を扱う上で絶対に押さえるべきは Session / Window / Pane の階層構造です。
Session (作業プロジェクト単位)
├─ Window 1 ("editor" — タブみたいなもの)
│ ├─ Pane (左: nvim)
│ └─ Pane (右: shell)
├─ Window 2 ("logs")
│ └─ Pane (docker compose logs -f)
└─ Window 3 ("git")
各レイヤーの役割は以下の通り。
Session: プロジェクト 1 個 = セッション 1 個が基本。tmux ls で一覧表示
Window: ブラウザのタブ的存在。役割ごとに切り分ける (editor, logs, git, など)
Pane: ウィンドウを縦横に分割した個々のシェル
迷ったら 「Session = プロジェクト / Window = 役割 / Pane = 並列したいもの」 で整理すると良いです。
tmux の操作は prefix キー → コマンドキー の 2 段押しが基本。デフォルト prefix は Ctrl+b です。
| 操作 | コマンド | 新規セッション (名前付き) | tmux new -s work |
|---|---|---|---|
| セッション一覧 | tmux ls | 再接続 | tmux attach -t work |
| detach (裏に回す) | Ctrl+b → d | セッション切替 (中から) | Ctrl+b → s |
| 操作 | キー | 新規ウィンドウ | Ctrl+b → c |
|---|---|---|---|
| 次/前のウィンドウ | Ctrl+b → n / p | 番号で直接ジャンプ | Ctrl+b → 0〜9 |
| 名前変更 | Ctrl+b → , | ウィンドウ一覧から選択 | Ctrl+b → w |
| 操作 | キー |
|---|---|
| 縦分割 (上下) | Ctrl+b → " |
| ペイン最大化トグル | Ctrl+b → z |
| ペイン入替 | Ctrl+b → { / } |
| 操作 | キー | コピーモード開始 | Ctrl+b → [ |
|---|---|---|---|
| 終了 | q | 選択開始 (vi モード) | v (要設定) |
| コピー | y (要設定) または Enter | ペースト | Ctrl+b → ] |
Ctrl+b → ? で全キーバインド一覧が表示されます。迷ったらまずこれを確認。┌──────────────────┬──────────────────┐
│ │ docker logs -f │
│ editor (nvim) ├──────────────────┤
│ │ shell (test 用) │
└──────────────────┴──────────────────┘
左にエディタ、右上にログ tail、右下に検証用シェル。立ち上げる手順は以下のようになります。
tmux new -s myproject
cd ~/projects/myrepo
nvim .
# Ctrl+b % # 横分割 → 右側に shell
# Ctrl+b " # その shell を縦分割 → 上下に
# Ctrl+b ↑ # 右上に移動
docker compose logs -f api
# Ctrl+b ↓ # 右下に移動 → 自由にコマンド検証
長時間ジョブ (build, migration, AI エージェントの自動実行など) を流したら、ターミナルから一旦離れて他の作業に移れます。
# 中で Ctrl+b d を押す → detach (バックグラウンドに回る、プロセスは生き続ける)
tmux ls # 状態確認
tmux attach -t myproject # 戻る
リモート作業の必須テクニック。SSH が切れても作業が死にません。
ssh dev-server
tmux new -s deploy # 初回
# 作業を進める。ネットが切れても問題なし
# 再ログイン後:
tmux attach -t deploy
複数の作業を並行する時はセッションを分けるのが鉄則です。
tmux new -s pr-review # PR レビュー対応
tmux new -s research # 別機能の調査
tmux new -s bugfix # バグ調査
Ctrl+b s でセッション間をスイッチできます。
~/.tmux.conf を整備すると一気に快適になります。まず最小構成、慣れたら拡張 が原則です。
# 1. prefix を Ctrl-b → Ctrl-a に変更 (押しやすい位置)
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# 2. マウス操作を有効化 (クリック・スクロール・リサイズ)
set -g mouse on
# 3. 分割キーを直感的に (| と -)
unbind '"'
unbind %
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 4. ウィンドウ番号を 1 から始める
set -g base-index 1
setw -g pane-base-index 1
# 5. 設定リロードをショートカット化
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# 6. スクロールバックを増やす (長い出力を遡れる)
set -g history-limit 50000
# 7. ESC キーの遅延を削除 (Vim/Neovim 用)
set -sg escape-time 0
設定の反映は tmux 内なら Ctrl+a r、外からなら tmux source-file ~/.tmux.conf で行います。
矢印キーよりも hjkl を使ったほうが手の移動が少なく済みます。
# hjkl でペイン移動
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Shift+hjkl でペインリサイズ
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
選択 → y でシステムクリップボードにコピーされるようにしておくと便利です。
setw -g mode-keys vi
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-no-clear "pbcopy"
これで Ctrl+a [ でコピーモードに入り、v で選択開始、y でクリップボードに飛びます。
上部に置くと視線移動が少なくて良いです。
set -g status-position top
set -g status-style bg=black,fg=white
set -g status-left "[#S] "
set -g status-right "%Y-%m-%d %H:%M "
set -g status-interval 5
tmux のプラグインは TPM (Tmux Plugin Manager) で管理するのが標準です。
まずリポジトリを clone します。
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
次に ~/.tmux.conf の 末尾 に以下を追記します。
# プラグインリスト
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible' # 妥当なデフォルト集
set -g @plugin 'tmux-plugins/tmux-resurrect' # セッション保存/復元
set -g @plugin 'tmux-plugins/tmux-continuum' # resurrect の自動化
set -g @plugin 'christoomey/vim-tmux-navigator' # Vim とペイン移動を統合
set -g @plugin 'catppuccin/tmux' # 見た目テーマ
# tmux-continuum 自動復元
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'
# これは必ず最後に書く
run '~/.tmux/plugins/tpm/tpm'
設定後、Ctrl+a I (大文字) でプラグイン一括インストール。これで永続化と見た目が一気に整います。
| プラグイン | 効果 | tmux-sensible | 「皆これ入れときゃ良いよね」のデフォルト集。最初に入れる |
|---|---|---|---|
| tmux-resurrect | Ctrl+a Ctrl+s で保存 / Ctrl+a Ctrl+r で復元。マシン再起動を超えて生き残る | tmux-continuum | resurrect を 15 分ごとに自動実行 + 起動時に自動復元 |
| vim-tmux-navigator | Neovim 内のウィンドウと tmux ペインを Ctrl+h/j/k/l でシームレスに移動 | catppuccin/tmux | ステータスバーをモダンに。Ghostty の catppuccin テーマと揃えると統一感が出る |
設定をゼロから書くのが面倒なら gpakosz/.tmux (通称 Oh My Tmux!) という設定一式を使う手もあります。
cd ~ && git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .
カスタマイズは .tmux.conf.local だけ触れば本体は壊れない設計で、初心者の最短ルートとしては最適です。
Ghostty で tmux を使うと、デフォルトのままだと地味に不具合が出ます。以下の設定を .tmux.conf に追加しておくと安全です。
Ghostty は RGB フルカラー対応ですが、tmux 側で明示的に許可しないとテーマがくすみます。
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",xterm-256color:RGB"
set -ga terminal-overrides ",xterm-ghostty:RGB"
Ghostty は Ctrl+Shift+... 系の細かいキー入力を区別できる拡張プロトコルを話します。tmux に伝えないと文字化けして表示されます。
set -g extended-keys on
set -as terminal-features 'xterm*:extkeys'
tmux 内で画像を表示するツール (lazygit など一部) を使う場合に有効化します。
set -g allow-passthrough on
allow-passthrough を off にしたほうが安全です。任意のエスケープシーケンスが通ってしまうリスクがあります。~/.config/ghostty/config に以下を書くと、Ghostty を開いた瞬間に tmux セッションへ入れます。
command = /bin/zsh -l -c "tmux attach -t main || tmux new -s main"
これで「Ghostty 起動 = main セッション復帰」が成立。tmux-continuum と組み合わせれば、再起動後も全ペインが復元されます。
ここからが本題。tmux + Ghostty に Claude Code を載せる運用パターンです。
tmux new -s claude-myproject
cd ~/projects/myrepo
claude
これだけで以下が成立します。
ターミナル閉じても会話継続
/loop や background agent が detach 中も走り続ける
別マシンから tmux attach で同じ会話に再接続できる
┌──────────────────┬──────────────────┐
│ │ docker logs -f │
│ claude ├──────────────────┤
│ │ 検証用 shell │
└──────────────────┴──────────────────┘
左で claude にコードを書かせ、右で自分の手で挙動確認。Claude が書いたコードは自分の目で並行して検証する のが鉄則です。
Claude を複数走らせるなら、タスクごとに tmux session を切ります。
tmux new -s claude-pr-review
tmux new -s claude-bugfix
tmux new -s claude-research
git worktree add と組み合わせるとブランチが分離されて事故りません。
git worktree add ../myrepo-pr-review origin/feature/xyz
tmux new -s claude-pr-review -c ../myrepo-pr-review
terraform apply / git push --force / rm -rf のような不可逆操作は 必ず別ペインで自分の手で実行 します。AI エージェントに権限を持たせすぎないという原則に沿って、tmux の物理的な分離をもう 1 段のガードとして使うイメージです。
Ctrl+b を Ctrl+a か Ctrl+Space に変更しましょう。さらに OS レベルで Caps Lock を Ctrl にリマップすると劇的に楽になります。
tmux のスクロールバックは独立しています。Ctrl+a [ でコピーモードに入ってから遡るか、clear-history で明示的にクリアしてください。
true color 設定漏れです。セクション 8.1 の terminal-overrides を入れてください。
tmux のウィンドウを優先するのがおすすめです。Ghostty タブは「全く別の作業 (個人 dotfiles 編集など)」用に使い分けると衝突しません。
内側の prefix を Ctrl+a a のように 2 度押しに設定すれば共存できます。SSH 先で tmux を使う時に発生しがちな構成です。
tmux kill-server で全セッション破棄、tmux kill-session -t name で特定セッションだけ。困ったらリセットが早いです。
Ctrl+b は左手の小指を酷使する。Ctrl+a に慣れると後戻りできないwork ではなく claude-pr-494 のように何のための作業か分かる名前にするいきなり全部覚える必要はありません。段階的に拡張していくのが現実的です。
Day 1: brew install → tmux new → Ctrl+b % Ctrl+b " Ctrl+b 矢印 Ctrl+b d tmux attach。これだけで価値の 80% は取れる
Day 2-3: ~/.tmux.conf に prefix 変更・マウス・分割キーだけ書く
Week 1: TPM + tmux-resurrect + continuum で永続化を獲得する
Week 2: catppuccin / vim-tmux-navigator など見た目と統合系を整備
Week 3+: Ghostty command = で自動 attach。Claude Code を tmux 配下で運用するワークフロー確立
Ghostty / tmux / Claude Code は役割が違う 3 層 — エミュレータ・マルチプレクサ・CLI を組み合わせることで永続性と並列性を獲得
インストールは brew install tmux で即完了 — 設定ゼロでも基本機能は使える
覚えるべきは Session / Window / Pane の 3 概念とそれぞれのキーバインド — Ctrl+b ? でいつでも参照できる
.tmux.conf は最小構成から始める — prefix 変更・マウス・分割キー・base-index・history-limit だけで体感が劇的に変わる
TPM + resurrect + continuum で永続化を完全自動化 — マシン再起動を意識しなくてよくなる
Ghostty 連携には true color / extended-keys / passthrough の 3 設定が必須
Claude Code は tmux セッション内で起動 — 並列タスクは別セッション + git worktree で完全分離
慣れてくると tmux なしの開発に戻れなくなります。まずは Day 1 の「最小操作だけ覚える」から始めて、徐々に設定とプラグインを足していくのがおすすめです。