ターミナル環境を3年ぶりに全部入れ替えた話|Ghostty・Fish・Zellij・AI補完の今

「それって何のツール?」と連続で聞かれて気づいたら説明が面倒なほど積み上がってた。2週間かけて整理したCLI環境の設定と判断基準、正直に書きます。

先日、3年ぶりに自分のターミナル環境を根こそぎ見直した。きっかけは些細なことで、新しいチームメンバーのセットアップを手伝っていたら「それって何のツールですか?」と連続で質問されたこと。気づいたら説明するのが面倒になるくらい色々なツールを積み重ねていて、「あ、整理する良い機会だな」と思ったんですよね。

結果的に2週間かけて入れ替え・設定変更をして、今の環境に落ち着いた。正直まだ微調整中のところもあるんだけど、チームに共有したら何人かに「自分も試したい」と言われたので、せっかくだから記事にまとめておく。

以前のターミナルCLIツール2026年完全ガイドでも基本的な比較をしていたけど、今回は「実際の設定ファイルと運用上の判断」寄りで書く。

2026年のターミナルエコシステム、今どこにいるのか

2026年に入って、ターミナル周りのエコシステムがまた大きく動いた。特に変化が大きかったのは次の3点。

  1. GhosttyがStable v1.1系に到達。パフォーマンスが安定して、macOS・Linuxどちらでも実用的になった。
  2. AI補完の文脈理解が格段に向上。2024〜2025年頃の「なんとなく候補が出る」フェーズから、カレントディレクトリやgit状態を見て的確な提案をするレベルに来た。
  3. Zellijがマルチプレクサのデファクトに近づいた。tmuxユーザーの乗り換えが急増している。

僕の環境の変遷を先に言っておくと、3年前は iTerm2 + zsh + tmux + starship だった。今は Ghostty + Fish shell + Zellij + Atuin + carapace + fig (now Amazon Q CLI) になっている。全部変わってる。

各ツールの役割とバージョン感を整理するとこうなる。

ツール役割2026年時点の版以前使っていたもの
Ghosttyターミナルエミュレータv1.1.xiTerm2
Fish shellシェル4.0.xzsh
Zellijマルチプレクサ0.42.xtmux
Atuinシェル履歴管理18.xfzf + history
carapace補完エンジン1.xbuilt-in + zsh-completions
Amazon Q CLIAI補完latestなし
Starshipプロンプト1.22.xpowerlevel10k

一気に全部変えるのはリスクがあるので、個人PCで1ヶ月試してから仕事環境に持ち込んだ。

Ghostty + Fish + Zellij の組み合わせ、実際どうか

Ghosttyの設定

Ghosttyは設定がシンプルなのが好きだ。~/.config/ghostty/config に書くだけで、余計なGUIメニューを探し回る必要がない。

# ~/.config/ghostty/config

font-family = "UDEV Gothic 35NFLG"
font-size = 15
theme = catppuccin-mocha

# パフォーマンス設定
vsync = true
renderer-thread = true

# macOSのネイティブタブを使う
macos-titlebar-style = native
window-decoration = true

# クリップボード設定
clipboard-read = allow
clipboard-write = allow

# Zellijとの統合(シェル自動起動)
command = /opt/homebrew/bin/fish

iTerm2と比べて起動が体感で速い。実際に計測してみると:

xychart-beta
  title "ターミナル起動時間比較 (ms)"
  x-axis ["iTerm2", "Alacritty", "Ghostty v1.1", "Warp"]
  y-axis "起動時間 (ms)" 0 --> 600
  bar [480, 90, 75, 350]

GhosttyはAlacrittyと同等かそれ以下の速度で、かつGPUレンダリングが綺麗。Alacrittyは速いけどマルチプレクサ必須・設定が難解という印象があって、その弱点をGhosttyが補っている感じがある。Warpはリッチだけど起動が遅くて、「ちょっとコマンド打つだけ」みたいな用途で重さを感じる。個人的には「速さと見た目の両取り」ができたのが一番の決め手だった。

Fish shellに移った理由

zshを5年以上使っていて不満はなかった。でも移った理由は単純で「設定なしでまともに動く」から。zshは .zshrc にあれこれ書かないと快適にならない。Fish shellは素の状態でシンタックスハイライトとオートサジェストが動く。これが地味に快適で、「設定を育てる」より「最初から動く」方が今の自分には合っていた。

# ~/.config/fish/config.fish

# パスの設定
fish_add_path /opt/homebrew/bin
fish_add_path $HOME/.cargo/bin
fish_add_path $HOME/go/bin

# エイリアス
alias ll="eza --long --all --git --icons"
alias cat="bat --style=auto"
alias find="fd"
alias grep="rg"
alias top="btm"
alias cd="z"  # zoxide

# AWS CLIのプロファイル切り替え
function aws-profile
    set -gx AWS_PROFILE $argv[1]
    echo "Switched to AWS profile: $argv[1]"
end

# Starshipの初期化
starship init fish | source

# Atuin
atuin init fish | source

# zoxide
zoxide init fish | source

POSIX非互換という批判は確かにあって、シェルスクリプトをFishで書くのは正直やめた方がいいとは思う。スクリプトはbashかzshで書いて、インタラクティブシェルはFishという分離が自分の中では定着している。これが割り切れない人には向かないかもしれない。

Zellijはtmuxより設定が楽

tmuxを8年くらい使っていて、.tmux.conf が200行超えていた。Zellijに移ったらそれが消えた。設定がKDL(KDL Document Language)で書けて、デフォルトのUIがよくできている。

// ~/.config/zellij/config.kdl

default_layout "compact"
default_shell "fish"
pane_frames false

keybinds {
    normal {
        // Ctrl+a をリーダーキーに(tmux互換)
        bind "Ctrl a" { SwitchToMode "Tmux"; }
    }
    tmux {
        bind "[" { SwitchToMode "Scroll"; }
        bind "d" { Detach; }
        bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
        bind "c" { NewTab; SwitchToMode "Normal"; }
        bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
        bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
    }
}

themes {
    catppuccin-mocha {
        fg "#cdd6f4"
        bg "#1e1e2e"
        black "#45475a"
        red "#f38ba8"
        green "#a6e3a1"
        yellow "#f9e2af"
        blue "#89b4fa"
        magenta "#cba4f7"
        cyan "#89dceb"
        white "#bac2de"
        orange "#fab387"
    }
}

theme "catppuccin-mocha"

tmuxから移行するにあたって困ったのは、tmux + tpm(プラグインマネージャー)に慣れすぎていて「プラグインないと不安」という感覚があったこと。Zellijはプラグインシステムがあるけど、ぶっちゃけデフォルトで十分すぎるんですよね。1ヶ月使ったらtmuxに戻りたいとは思わなくなった。200行の設定ファイルが消えた開放感の方が大きかった。

AIツール統合、Amazon Q CLIとAtuin

ここが2026年のCLI環境で一番変化が大きいところ。2年前と比べると「AIが補完してくれる」という感覚が別物になっている。

Amazon Q CLIのシェル補完

AWS環境を日常的に使っているので、Amazon Q CLIのシェル統合はかなり刺さる。AWS CLIコマンドの補完が文脈を読んでくれる。

# インストール
brew install amazon-q

# Fishへの統合
q integrations install shell-integrations

実際に動かすとこんな感じ。

# Tabキーで補完を呼び出す
$ aws s3 ls s3://my-buc[TAB]

# Q CLIが実際のバケット一覧を取得してサジェスト
> s3://my-bucket-prod/
> s3://my-bucket-staging/
> s3://my-bucket-dev/

インフラ系のコマンドを叩く頻度が高いと、これは地味に便利すぎる。以前は aws s3 ls でバケット一覧を確認してからコマンドを組み立てていたのが、一発で完結する。「こんな補完が欲しかった」というやつが普通にできるようになっていて、正直驚いた。

AtuinでシェルヒストリーをRust製DBに

flowchart LR
    A[コマンド実行] --> B[Atuin SQLite DB]
    B --> C[暗号化同期]
    C --> D[Atuin Cloud / 自己ホスト]
    D --> E[別マシンで検索]
    style B fill:#a6e3a1,color:#000
    style D fill:#89b4fa,color:#000

Atuinは「ctrl+r でinteractiveに履歴検索できる」ツールとして知られているけど、本当の強みは機械ごと・ディレクトリごとのコンテキストを持った履歴管理にある。

# ~/.config/atuin/config.toml

[behavior]
filter_mode = "directory"  # カレントディレクトリの履歴を優先
filter_mode_shell_up_arrow = "directory"
search_mode = "fuzzy"

[sync]
auto_sync = true
sync_frequency = "5m"

[stats]
common_prefix = ["sudo", "git"]
common_subcommands = ["git", "cargo", "kubectl", "aws"]

filter_mode = "directory" にしておくと、特定のプロジェクトディレクトリで履歴を呼び出すと、そのプロジェクトで打ったコマンドが優先的に出てくる。意外とこれが一番使う機能で、「あのコマンドなんだったっけ」という時間が体感で半減した気がする。

carapaceでユニバーサル補完エンジン

Fish shellの補完は優秀だけど、全コマンドに対応しているわけじゃない。carapaceは複数シェル対応の補完エンジンで、2026年の1.x系からかなり安定してきた。

# Fish shellへの統合
carapace _carapace | source

補完が効くようになるコマンド数がえげつなくて、kubectldockerterraformgh(GitHub CLI)あたりが全部カバーされている。正直まだ検証中だけど、kubectl の補完が文脈を読んでくれるようになったのはマジで助かった。以前は kubectl get pods -n の後にネームスペース名を毎回手打ちしていたのが、タブ一発で出てくる。

modern CLI tools、使い続けているもの・やめたもの

「Rustで書かれたモダンCLIツール」みたいなの、2020〜2022年頃に大量に出てきたんですよね。全部試したわけじゃないけど、3ヶ月定着したものだけ残した結果がこれ。

ツール代替対象使い続けてる?理由
ezals✅ 使ってるgitステータス表示が便利
batcat✅ 使ってるシンタックスハイライトが快適
fdfind✅ 使ってる直感的な検索、.gitignore自動除外
rg (ripgrep)grep✅ 使ってる速さが段違い
zoxidecd✅ 使ってるz proj で一発移動
bottom (btm)top/htop✅ 使ってるグラフ表示が見やすい
deltagit diff✅ 使ってるdiff表示が格段に読みやすい
hyperfinetime△ 時々使うベンチマーク時だけ
sdsed❌ やめたsedに慣れすぎて覚えられなかった
procsps❌ やめたpsで事足りる
tokeicloc△ 時々使うコード行数確認時だけ

sd(sedの置き換え)は3回くらいインストールして3回アンインストールした。sedの正規表現を書く筋肉がついてしまっていて、sdの構文を覚え直す気になれない。これはもう個人的な敗北だと思っている。好みは分かれると思う。

git delta は本当に良くて、設定は ~/.gitconfig に追記するだけ。

# ~/.gitconfig
[core]
    pager = delta

[delta]
    navigate = true
    light = false
    side-by-side = true
    line-numbers = true
    syntax-theme = Catppuccin-mocha

[interactive]
    diffFilter = delta --color-only

[merge]
    conflictstyle = diff3

[diff]
    colorMoved = default

これを設定してから git diff を見るのが苦じゃなくなった。地味だけどコードレビューの質が上がった気がする。差分が読みやすくなると、見落としが減る。

dotfiles管理とチームへの展開

ここまでの設定を個人で管理するだけでなく、チームに共有する際の話もしておきたい。

dotfilesをGitHubで管理して、インストールスクリプトを書いている。構成はこんな感じ。

flowchart TD
    A[dotfiles repo on GitHub] --> B[install.sh]
    B --> C[Homebrew Bundleで一括インストール]
    B --> D[stowでシンボリックリンク作成]
    D --> E[~/.config/ghostty/]
    D --> F[~/.config/fish/]
    D --> G[~/.config/zellij/]
    D --> H[~/.config/atuin/]
    D --> I[~/.gitconfig]
    C --> J[ツール群: eza, bat, fd, rg...]
    style A fill:#cba4f7,color:#000
    style B fill:#f9e2af,color:#000

Brewfile でツールを一元管理する。

# Brewfile

# ターミナル
cask "ghostty"

# シェル
brew "fish"

# マルチプレクサ
brew "zellij"

# modern CLI tools
brew "eza"
brew "bat"
brew "fd"
brew "ripgrep"
brew "zoxide"
brew "atuin"
brew "carapace"
brew "bottom"
brew "delta"
brew "starship"
brew "gh"

# その他
brew "direnv"
brew "jq"
brew "yq"
brew "httpie"
brew "mitmproxy"
# 一括インストール
brew bundle --file=Brewfile

チームメンバーがMacを新調したとき、このリポジトリをcloneして ./install.sh を叩けば30分以内に同じ環境が立ち上がる。以前は環境構築に半日かかることもあったのを考えると、これは劇的な改善だった。一度整備すると「あのツール名なんだっけ」問題もなくなるし、採用直後のオンボーディングがかなり楽になる。

dotfiles管理に興味を持った方は、モノレポ運用ガイドのリポジトリ管理の考え方も参考になると思う。スクリプトの整理の仕方は共通する部分がある。

あと、チームで環境を統一するときに大事なのは「強制しない」こと。Fishに移行したくない人もいるし、tmuxからZellijに移りたくない人もいる。「こういう選択肢があって自分はこれにした理由はこれ」という説明ができれば十分で、各自が判断すればいい。エンジニア向けコミュニケーションツール比較の記事でも触れたけど、ツールの強制は生産性を下げることがある。

皆さんはターミナル環境、どんな構成にしてます?最近変えたツールとか、「これは乗り換えてよかった」みたいなのがあれば教えてほしい。

まとめ

2026年時点のターミナルCLI環境を丸ごと見直してわかったことをまとめる。

要点

  1. Ghosttyは実用段階に入った。起動速度・GPUレンダリング・設定のシンプルさが揃っていて、iTerm2からの乗り換えに十分な完成度になっている。

  2. Fish shell + carapaceの組み合わせは設定コストが低い。「zshのプラグイン管理が面倒」と感じている人には試してみる価値あり。ただしPOSIX非互換は割り切りが必要。

  3. AtuinはシェルヒストリーのUXを根本から変える。ディレクトリコンテキストを持った履歴管理は、一度使うと戻れない。

  4. modern CLI toolsは「3ヶ月定着したら本物」で選別する。全部入れると消化不良になる。eza・bat・fd・rg・zoxide・deltaあたりが僕のコアセット。

  5. dotfiles + Brewfileのセットは新規セットアップ時間を劇的に短縮する。チームへの普及にも有効で、一度整備すると長期的なROIが高い。

次のアクション

  • まず bateza だけ入れてみる(低リスクで効果が出やすい)
  • Atuinをインストールして1週間、ctrl+r を意識的に使う
  • dotfilesリポジトリを作って現在の設定を管理し始める
  • Ghosttyを個人PCで試してから、1ヶ月後に仕事環境に移行するかを判断する

環境整備は終わりがないので、「全部変える」より「気になったものを1個ずつ試す」が長続きのコツだと思っている。

U

Untanbaby

ソフトウェアエンジニア|AWS / クラウドアーキテクチャ / DevOps

10年以上のIT実務経験をもとに、現場で使える技術情報を発信しています。 記事の誤りや改善点があればお問い合わせからお気軽にご連絡ください。

関連記事