メインコンテンツへスキップ
kt-tech.blog

【設定・環境構築】tmux + Ghostty + Claude Code で作る最強のターミナル開発環境

設定・環境構築19分で読めます

この記事でわかること

  • Ghostty 単体では得られない「セッション永続化」のために tmux を重ねる理由
  • Session / Window / Pane の 3 概念と、最小限覚えるキーバインド
  • 体感が変わる .tmux.conf のミニマム設定と、TPM での永続化
  • Ghostty で tmux を使うときに必要な 3 つの設定(true color / 拡張キー / passthrough)
  • Claude Code を tmux 配下で回すときのペイン構成と、危険操作を分ける考え方

macOS(Linux でもほぼ同じ手順)、Homebrew、Ghostty インストール済み。ターミナルの基本操作ができれば十分です。

ポイント

この記事の概要

tmux と Ghostty を組み合わせて、Claude Code をはじめとする CLI ツールを快適に動かすターミナル開発環境を構築する完全ガイドです。インストールから .tmux.conf カスタマイズ、TPM プラグイン、Ghostty 固有の連携設定、Claude Code 運用ワークフローまで段階的に解説します。

はじめに

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 の三層構成を、ゼロから構築する手順をまとめます。


1. tmux とは何か

tmux (terminal multiplexer) は 1 つのターミナルウィンドウの中に複数の独立した仮想ターミナルを持てるツールです。役割を整理すると以下の 3 層に分かれます。

レイヤー 役割
ターミナルエミュレータ 描画・ウィンドウ管理 Ghostty / iTerm2 / Alacritty
マルチプレクサ セッション・ペイン・永続化 tmux / zellij / screen
シェル / CLI コマンド実行 zsh / fish / claude

tmux が提供する価値は次の 3 点に集約されます。

  1. 画面分割: 1 ウィンドウ内に複数のシェルを並べられる
  2. セッション永続化: ターミナルを閉じても・SSH が切れてもプロセスが死なない
  3. detach / attach: 同じセッションに別マシンから繋ぎ直せる

Ghostty 自体にもタブ・ペイン分割機能はありますが、永続化と detach は tmux にしかありません。これが両方を組み合わせる最大の理由です。

2. インストール

macOS では Homebrew で即インストールできます。

Bash
brew install tmux
tmux -V    # → tmux 3.6 などが表示されれば OK

バージョン確認まで通れば準備完了です。設定ファイルもプラグインも不要で、すぐに起動できます。

Bash
tmux       # 起動
exit       # 終了 (またはセッション内のシェルを全部閉じる)

3. 必須の 3 概念: Session / Window / Pane

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 = 並列したいもの」 で整理すると良いです。

4. 最低限覚える操作

tmux の操作は prefix キー → コマンドキー の 2 段押しが基本。デフォルト prefix は Ctrl+b です。

4.1 セッション操作

操作 コマンド
新規セッション (名前付き) tmux new -s work
セッション一覧 tmux ls
再接続 tmux attach -t work
detach (裏に回す) Ctrl+bd
セッション切替 (中から) Ctrl+bs

4.2 ウィンドウ操作 (タブ的)

操作 キー
新規ウィンドウ Ctrl+bc
次/前のウィンドウ Ctrl+bn / p
番号で直接ジャンプ Ctrl+b09
名前変更 Ctrl+b,
ウィンドウ一覧から選択 Ctrl+bw

4.3 ペイン操作 (分割)

操作 キー
縦分割 (上下) Ctrl+b"
ペイン最大化トグル Ctrl+bz
ペイン入替 Ctrl+b{ / }

4.4 コピーモード (スクロール・コピー)

操作 キー
コピーモード開始 Ctrl+b[
終了 q
選択開始 (vi モード) v (要設定)
コピー y (要設定) または Enter
ペースト Ctrl+b]
注意
Ctrl+b? で全キーバインド一覧が表示されます。迷ったらまずこれを確認。

5. 実践的なワークフロー

5.1 開発の定番 3 ペイン構成

┌──────────────────┬──────────────────┐
│                  │  docker logs -f  │
│   editor (nvim)  ├──────────────────┤
│                  │  shell (test 用) │
└──────────────────┴──────────────────┘

左にエディタ、右上にログ tail、右下に検証用シェル。立ち上げる手順は以下のようになります。

Bash
tmux new -s myproject
cd ~/projects/myrepo
nvim .
# Ctrl+b %    # 横分割 → 右側に shell
# Ctrl+b "    # その shell を縦分割 → 上下に
# Ctrl+b ↑   # 右上に移動
docker compose logs -f api
# Ctrl+b ↓   # 右下に移動 → 自由にコマンド検証

5.2 detach して放置するパターン

長時間ジョブ (build, migration, AI エージェントの自動実行など) を流したら、ターミナルから一旦離れて他の作業に移れます。

Bash
# 中で Ctrl+b d を押す → detach (バックグラウンドに回る、プロセスは生き続ける)
tmux ls                # 状態確認
tmux attach -t myproject  # 戻る

5.3 SSH 先での tmux

リモート作業の必須テクニック。SSH が切れても作業が死にません。

Bash
ssh dev-server
tmux new -s deploy    # 初回
# 作業を進める。ネットが切れても問題なし
# 再ログイン後:
tmux attach -t deploy

5.4 タスクごとにセッションを切る

複数の作業を並行する時はセッションを分けるのが鉄則です。

Bash
tmux new -s pr-review    # PR レビュー対応
tmux new -s research     # 別機能の調査
tmux new -s bugfix       # バグ調査

Ctrl+b s でセッション間をスイッチできます。

6. .tmux.conf カスタマイズ入門

~/.tmux.conf を整備すると一気に快適になります。まず最小構成、慣れたら拡張 が原則です。

6.1 ミニマム版 (これだけで体感が変わる)

JavaScript
# 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 で行います。

6.2 Vim ライクなペイン移動

矢印キーよりも hjkl を使ったほうが手の移動が少なく済みます。

JavaScript
# 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

6.3 コピーモードを vi 式に + macOS クリップボード連携

選択 → y でシステムクリップボードにコピーされるようにしておくと便利です。

JavaScript
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 でクリップボードに飛びます。

6.4 ステータスバー (最小カスタム)

上部に置くと視線移動が少なくて良いです。

JavaScript
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

7. プラグイン: TPM で導入する

tmux のプラグインは TPM (Tmux Plugin Manager) で管理するのが標準です。

7.1 TPM インストール

まずリポジトリを clone します。

Bash
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

次に ~/.tmux.conf末尾 に以下を追記します。

JavaScript
# プラグインリスト
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 (大文字) でプラグイン一括インストール。これで永続化と見た目が一気に整います。

7.2 重要プラグインの効能

プラグイン 効果
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 テーマと揃えると統一感が出る

7.3 「Oh My Tmux!」という選択肢

設定をゼロから書くのが面倒なら gpakosz/.tmux (通称 Oh My Tmux!) という設定一式を使う手もあります。

Bash
cd ~ && git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

カスタマイズは .tmux.conf.local だけ触れば本体は壊れない設計で、初心者の最短ルートとしては最適です。

8. Ghostty との連携で押さえる 3 点

Ghostty で tmux を使うと、デフォルトのままだと地味に不具合が出ます。以下の設定を .tmux.conf に追加しておくと安全です。

8.1 True Color (24bit カラー)

Ghostty は RGB フルカラー対応ですが、tmux 側で明示的に許可しないとテーマがくすみます。

JavaScript
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",xterm-256color:RGB"
set -ga terminal-overrides ",xterm-ghostty:RGB"

8.2 拡張キーボードプロトコル (CSI-u / kitty keyboard)

Ghostty は Ctrl+Shift+... 系の細かいキー入力を区別できる拡張プロトコルを話します。tmux に伝えないと文字化けして表示されます。

JavaScript
set -g extended-keys on
set -as terminal-features 'xterm*:extkeys'

8.3 画像パススルー (sixel / kitty graphics)

tmux 内で画像を表示するツール (lazygit など一部) を使う場合に有効化します。

JavaScript
set -g allow-passthrough on
重要
信頼できない SSH 先では allow-passthrough を off にしたほうが安全です。任意のエスケープシーケンスが通ってしまうリスクがあります。

8.4 Ghostty 起動時に tmux を自動 attach

~/.config/ghostty/config に以下を書くと、Ghostty を開いた瞬間に tmux セッションへ入れます。

JavaScript
command = /bin/zsh -l -c "tmux attach -t main || tmux new -s main"

これで「Ghostty 起動 = main セッション復帰」が成立。tmux-continuum と組み合わせれば、再起動後も全ペインが復元されます。

9. Claude Code との組み合わせ

ここからが本題。tmux + Ghostty に Claude Code を載せる運用パターンです。

9.1 基本パターン

Bash
tmux new -s claude-myproject
cd ~/projects/myrepo
claude

これだけで以下が成立します。

  • ターミナル閉じても会話継続
  • /loop や background agent が detach 中も走り続ける
  • 別マシンから tmux attach で同じ会話に再接続できる

9.2 推奨ペイン構成

┌──────────────────┬──────────────────┐
│                  │  docker logs -f  │
│   claude         ├──────────────────┤
│                  │  検証用 shell    │
└──────────────────┴──────────────────┘

左で claude にコードを書かせ、右で自分の手で挙動確認。Claude が書いたコードは自分の目で並行して検証する のが鉄則です。

9.3 並列タスクは別セッションで

Claude を複数走らせるなら、タスクごとに tmux session を切ります。

Bash
tmux new -s claude-pr-review
tmux new -s claude-bugfix
tmux new -s claude-research

git worktree add と組み合わせるとブランチが分離されて事故りません。

Bash
git worktree add ../myrepo-pr-review origin/feature/xyz
tmux new -s claude-pr-review -c ../myrepo-pr-review

9.4 危険操作は claude のペインの外で

terraform apply / git push --force / rm -rf のような不可逆操作は 必ず別ペインで自分の手で実行 します。AI エージェントに権限を持たせすぎないという原則に沿って、tmux の物理的な分離をもう 1 段のガードとして使うイメージです。

10. つまずきポイント FAQ

Q. prefix を押すのが面倒

Ctrl+bCtrl+aCtrl+Space に変更しましょう。さらに OS レベルで Caps Lock を Ctrl にリマップすると劇的に楽になります。

Q. macOS の Cmd+K で画面クリアしたら tmux のスクロールバックも消えた

tmux のスクロールバックは独立しています。Ctrl+a [ でコピーモードに入ってから遡るか、clear-history で明示的にクリアしてください。

Q. ペインの中の Vim が色化けする

true color 設定漏れです。セクション 8.1 の terminal-overrides を入れてください。

Q. Ghostty のタブと tmux のウィンドウ、どっちを使えば?

tmux のウィンドウを優先するのがおすすめです。Ghostty タブは「全く別の作業 (個人 dotfiles 編集など)」用に使い分けると衝突しません。

Q. tmux ネスト (tmux の中で tmux) したい

内側の prefix を Ctrl+a a のように 2 度押しに設定すれば共存できます。SSH 先で tmux を使う時に発生しがちな構成です。

Q. なんか変な状態になった

tmux kill-server で全セッション破棄、tmux kill-session -t name で特定セッションだけ。困ったらリセットが早いです。

Tips / ベストプラクティス

Tips

実運用で効くポイント

  • prefix キーは早めに変更する: デフォルトの Ctrl+b は左手の小指を酷使する。Ctrl+a に慣れると後戻りできない
  • resurrect + continuum は最初から入れる: マシン再起動・OS アップデートで失う作業時間が一気に減る
  • セッション名は具体的に: work ではなく claude-pr-494 のように何のための作業か分かる名前にする
  • mouse on は罪悪感を持たずに使う: 「キーボード派でないとダメ」は古い思想。マウスでペイン選択・スクロールするのは普通に効率的
  • 「Ghostty タブ = 完全別作業 / tmux Window = 同じプロジェクトの役割分け」で住み分け: 階層がぶつからず混乱しない
  • 危険コマンドは AI ペインの外: AI と物理的にペインを分けることで、意図しない実行を視覚的に防げる

学習ロードマップ

いきなり全部覚える必要はありません。段階的に拡張していくのが現実的です。

  1. Day 1: brew installtmux newCtrl+b % Ctrl+b " Ctrl+b 矢印 Ctrl+b d tmux attach。これだけで価値の 80% は取れる
  2. Day 2-3: ~/.tmux.conf に prefix 変更・マウス・分割キーだけ書く
  3. Week 1: TPM + tmux-resurrect + continuum で永続化を獲得する
  4. Week 2: catppuccin / vim-tmux-navigator など見た目と統合系を整備
  5. Week 3+: Ghostty command = で自動 attach。Claude Code を tmux 配下で運用するワークフロー確立

参考リンク

公式・一次情報

設定・カスタマイズ

プラグイン

Ghostty 連携

まとめ

  • 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 の「最小操作だけ覚える」から始めて、徐々に設定とプラグインを足していくのがおすすめです。

更新履歴

  1. 表が崩れていたのを修正。4 つの表でヘッダーは 2 列なのに各行に 4 セル入っており、表示が崩れていたのを 1 行 1 項目に展開。.tmux.conf などのコードブロックの言語指定を javascript から bash / ini / text に修正し、ファイルパスをキャプションに追加。「この記事でわかること」「対象読者」「前提条件」を概要プロパティへ移動。
  2. 記事内リンクの修正