LabHub

ブログ

ターミナル & シェル ツール 2026 — Ghostty / Wezterm / Alacritty / Kitty / Warp / Fish 4 / Nushell / Zellij / Starship 徹底ガイド

한국어English日本語

プロローグ — ターミナルがふたたび面白くなった

10年間、ターミナルは「退屈な道具」だった。1990年代に固まったxtermモデルの上に、iTerm2(2008)・GNU screen(1987)・tmux(2007)がほぼすべてを整理してくれていた。その後の変化と言えば「少し綺麗なフォント」と「少し速い描画」くらい。

2024年から2026年にかけて、その風景がまるごと揺らいだ。

本稿では、2026年のターミナル・シェル・マルチプレクサ・CLIユーティリティの風景を エミュレータ → シェル → マルチプレクサ → プロンプト → ユーティリティ → dotfiles の順で一気にまとめる。最後にmacOS・Linux・Windows・デザイン重視・速度重視それぞれのシナリオで、誰がどれを選ぶべきかのマトリクスを置く。


1章 · 2026年のターミナル地図 — 4つのレイヤ

まず一枚の図から。「ターミナル」という一語の中には、実は4つの違うものが入っている。

[あなたのキーボード]
      |
      v
+----------------------+
|  ターミナル          |   <- ピクセルを描画するGUI
|  エミュレータ        |     Ghostty / Wezterm / Alacritty / Kitty
|  (Ghostty,...)       |     Warp / iTerm2 / Windows Terminal
+----------+-----------+
           |
           |  pty (仮想ターミナル)
           v
+----------------------+
|       シェル         |   <- コマンドを解釈する
|  (bash, zsh, fish,   |     bash / zsh / fish / nushell
|   nushell, ...)      |     elvish / xonsh / Oils sh
+----------+-----------+
           |
           |  fork / exec
           v
+----------------------+
|   マルチプレクサ     |   <- セッション・ウィンドウ・ペイン
|   (tmux, zellij,     |     tmux / zellij / screen / dvtm
|    screen, ...)      |
+----------+-----------+
           |
           v
+----------------------+
|  CLIユーティリティ   |   <- bat / eza / zoxide / fd / rg / fzf / atuin
|  + prompt            |   <- starship / p10k / oh-my-zsh / oh-my-posh
+----------------------+

この4レイヤを切り分けて見ないと、ツール選びがすぐに絡まる。「Warpが良い」という発言は、エミュレータ + シェル + マルチプレクサ + プロンプトの一部を束ねた製品が良いという意味であって、「tmuxより速い」という意味ではない。逆に「Ghostty + zsh + tmux + starship + atuin」は4レイヤを明確に分離したクラシックな構成だ。

覚えておくべき一行: エミュレータ=ピクセル、シェル=意味、マルチプレクサ=セッション、プロンプト=情報。


2章 · Ghostty — Mitchell Hashimotoの2年仕事、2024年12月GA

もっとも興味深い新参者から。

Ghosttyは、HashiCorp(Terraform・Vault・Consulの会社)の共同創業者Mitchell Hashimotoが、フルタイムを離れて2年かけて書いたターミナルだ。Zigで実装され、長いprivate betaを経て2024年12月に1.0をリリース。GA初週でGitHubスターが20,000を超えた。

主な特徴:

設定例(シンプルさが売り):

# ~/.config/ghostty/config
font-family = "JetBrains Mono"
font-size = 14
theme = "GruvboxDarkHard"
background-opacity = 0.95
window-padding-x = 12
window-padding-y = 12
macos-titlebar-style = "tabs"
keybind = cmd+t=new_tab
keybind = cmd+shift+enter=toggle_fullscreen

Ghosttyが話題になった理由は「また新しいターミナル」だからではない。「一人がフルタイム2年を投入すれば、これだけの品質のシステムソフトウェアが作れる」という証明だった。 xterm互換性・GPU描画・2プラットフォームのネイティブGUIを同時に満たしたターミナルは、それ以前には存在しなかった。

限界も明確だ。

一行で覚えるなら: Ghosttyは「ただ速くて綺麗なターミナル」。それが最大の長所。


3章 · Wezterm — Luaでスクリプト可能なRustターミナル

Wezterm(Wez Furlong作)は2020年から活発に開発が続いているRustベースのターミナル。一行要約: 「Luaコンフィグ + 内蔵マルチプレクサ + マルチOS」

特徴:

設定例:

-- ~/.wezterm.lua
local wezterm = require 'wezterm'
local config = wezterm.config_builder()

config.font = wezterm.font 'JetBrains Mono'
config.font_size = 14
config.color_scheme = 'GruvboxDark'
config.window_background_opacity = 0.95
config.hide_tab_bar_if_only_one_tab = true

-- キーバインド
config.keys = {
  { key = 't', mods = 'CMD',       action = wezterm.action.SpawnTab 'CurrentPaneDomain' },
  { key = 'd', mods = 'CMD',       action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },
  { key = 'D', mods = 'CMD|SHIFT', action = wezterm.action.SplitVertical   { domain = 'CurrentPaneDomain' } },
}

-- イベントフック
wezterm.on('update-right-status', function(window, pane)
  window:set_right_status(wezterm.strftime '%H:%M:%S')
end)

return config

Weztermを選ぶ理由は明快だ: すべての設定をコードで管理したく、ひとつの道具でマルチプレクサまで完結させたいとき。 Ghosttyのシンプルさよりも、Weztermの表現力を取る人々。


4章 · Alacritty — もっともシンプルなRustターミナル

Alacritty(2017–)はRustターミナルの始祖。哲学は一行: 「描画は速く、それ以外はやらない」。

設定例:

# ~/.config/alacritty/alacritty.toml
[font]
normal = { family = "JetBrains Mono", style = "Regular" }
size = 14

[colors.primary]
background = '#1d2021'
foreground = '#d4be98'

[window]
opacity = 0.95
padding = { x = 12, y = 12 }
decorations = "buttonless"

[keyboard]
bindings = [
  { key = "T", mods = "Command", action = "SpawnNewInstance" },
]

Alacrittyの魅力はシンプルさ。「ターミナルは文字を描くことだけに集中し、セッション管理はtmuxに任せろ」。この哲学が好きならAlacrittyが答え。2026年はGhosttyが同じシンプルさにSwiftUIネイティブGUIを乗せて強力な競合となったが、純粋なクロスプラットフォーム互換性ではAlacrittyが依然優位。


5章 · Kitty — GPU加速 + Python設定

Kitty(Kovid Goyal、2017–)はCとPythonを混ぜたターミナル。Alacrittyと同時期に登場したが、哲学は正反対: 「機能を盛り込もう」。

設定例:

# ~/.config/kitty/kitty.conf
font_family      JetBrains Mono
font_size        14.0
background_opacity 0.95
window_padding_width 12

# タブ
map cmd+t new_tab
map cmd+shift+enter toggle_fullscreen

# スプリット
enabled_layouts splits,stack
map cmd+d launch --location=vsplit
map cmd+shift+d launch --location=hsplit

Kittyは 「ひとつの道具で全部終わらせたいが、LuaやJSはイヤで、Pythonが好き」 という人向けの選択。科学計算・研究・MLの界隈でよく見る。


6章 · Warp — AIファーストの大博打

Warp(2020–)は、新興ターミナルの中でもっとも大胆な賭けをした製品。Y Combinator卒、シリーズBまで調達済み。スローガンは「ターミナルを30年ぶりに再設計する」。

差別化ポイント:

トレードオフ:

Warpを選ぶ人々:

避ける人々:

一行で覚えるなら: Warpは「エディタの進化がVS Codeなら、ターミナルの進化はうちだ」という賭けだ。


7章 · iTerm2 / Windows Terminal / Tabby / Hyper — 既存勢の現在地

iTerm2 — macOSのクラシック(2008–)

George NachmanのObjC作品。17年間macOSターミナルの標準であり続けた。

Windows Terminal — Microsoft公式(2019–)

Tabby(旧Terminus) — Electronベースのクロスプラットフォーム(2017–)

Hyper — JS/HTML/CSSのElectronターミナル(2016–)

一行: 2026年にmacOSで新たに始めるならGhosttyかWezterm。WindowsならWindows Terminalが正解。


8章 · Fish 4(2024) — Rust書き直し

シェルレイヤへ。最大の事件はFish 4だ。

Fish(Friendly Interactive Shell)は2005年からあるが、長らくC++で書かれていた。2024年公開のFish 4は、C++コードベースのほぼ全体をRustへ移行したメジャーリリース。PostgreSQLやCPythonなど大型OSSがRust移行を検討するときに引用される代表例だ。

Fishの魅力(Fish 1から続くもの):

Fish 4の中身:

設定例:

# ~/.config/fish/config.fish
set -gx EDITOR nvim
set -gx PATH $HOME/.cargo/bin $PATH

# abbreviation — 入力時に展開される
abbr -a gst git status
abbr -a gco git checkout
abbr -a k kubectl

# starshipプロンプト
starship init fish | source

# zoxide
zoxide init fish | source

# キーバインド
bind \cr 'atuin search'

Fish 4が示すもの:

  1. シェル自身をRustで書き直す流れの号砲。 Nushellは最初からRustだったが、「既存シェルをRustへ移した」最初の大型ケースがFish 4。
  2. C++→Rust移行のケーススタディ。 段階的なports、相互運用レイヤ、ビルドシステム刷新まで、パターンが公開されている。
  3. ユーザに大きな変化なし。 よく実行されたマイグレーションの定義 — ユーザが気づかずに使い続ける。

9章 · Nushell — 構造化データが流れるシェル

Nushell(2019–、Jonathan Turner・Yehuda Katz他)は、シェルのパラダイムを変えようという試み。

既存シェルの前提: 「パイプを流れるのはテキストだ」。bashでもzshでも、コマンド間を流れるのは改行で区切られた文字列。ls | grep foo | awk '{print $1}'のように。

Nushellの前提: 「パイプを流れるのは構造化されたテーブルだ」lsの出力は行と列を持つテーブルで、次のコマンドはそれを列名で参照できる。

比較:

# bash: テキストパース
ls -la | awk '{print $5, $9}' | sort -n
# nushell: 構造化データ
ls | select name size | sort-by size
# JSON・CSV・TOML・YAML・SQLiteすべて同じ書き方
open data.csv | where age > 30 | select name email
open package.json | get dependencies | columns

# HTTPも同じモデル
http get https://api.github.com/repos/nushell/nushell | get stargazers_count

# SQLライクな問い合わせも可能
ls | where modified > (date now) - 7day | sort-by modified

Nushellの魅力:

限界:

Nushellが最も活きる場面: データ処理・ops自動化・SREの日常業務。 「Pythonスクリプトには大げさで、jq/awkパイプラインでは複雑すぎるとき」。その空白に入る。


10章 · Elvish / Murex / xonsh / Oils sh — その他の新興シェル

Nushell以外にも、シェルを再考するプロジェクトはいくつかある。

Elvish

Murex

xonsh

Oils sh(旧Oil)

この4シェルはどれも5,000〜20,000スター級。Nushellが圧倒的1位だが、それぞれ異なる哲学を見せている。 ElvishはGoユーザ、MurexはPOSIX互換を捨てられない人、xonshはデータサイエンティスト、Oilsは「より良いbash」を求める人向け。


11章 · tmux vs Zellij — マルチプレクサ比較

セッション・ウィンドウ・ペインを管理するマルチプレクサ市場は、長らくtmux(2007–)の独占だった。GNU screen(1987–)は生きてはいるが事実上の保守モード、dvtmはミニマリスト向け。

2026年の挑戦者はZellij(2020–、Rust)。

tmux — 標準

設定例:

# ~/.tmux.conf
set -g prefix C-a
unbind C-b
bind C-a send-prefix

set -g mouse on
set -g history-limit 10000
set -g base-index 1
set -g renumber-windows on

# 分割
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# ペイン移動
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# ステータス
set -g status-style 'bg=#1d2021 fg=#d4be98'

Zellij — モダンな挑戦者

比較表:

項目tmuxZellij
成熟度非常に高い
学習曲線緩やか
デフォルトUXprefixキー発見しやすいヒント
設定形式tmux DSLKDL
プラグインTPMWASM
メモリ非常に軽い軽い
リモートSSH一級市民可能
どこにでも入っているはいいいえ

tmuxを選ぶ: リモートSSHで生活し、全サーバに入っている必要があり、キーバインドが頭に染み付いているシニア。

Zellijを選ぶ: ローカル作業がメインで、新たに始める人、「キーを覚えたくない」人。


12章 · Starship — 事実上すべてのシェルの標準プロンプト

プロンプトレイヤ。この市場はStarship(2019–、Matt Knox)が事実上統一した。

Starshipの強み:

インストール:

# インストール
curl -sS https://starship.rs/install.sh | sh

# シェルに登録(各シェルのrcに1行)
# bash:  eval "$(starship init bash)"
# zsh:   eval "$(starship init zsh)"
# fish:  starship init fish | source

設定例:

# ~/.config/starship.toml
add_newline = true

format = """
$username\
$hostname\
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$kubernetes\
$character"""

[character]
success_symbol = "[➜](bold green)"
error_symbol = "[➜](bold red)"

[directory]
truncation_length = 3
truncate_to_repo = true

[git_branch]
symbol = " "
format = "[$symbol$branch]($style) "

[kubernetes]
disabled = false
format = '[⛵ $context \($namespace\)](dimmed green) '

その他の選択肢:

一行で覚えるなら: 2026年に新規で始めるならStarshipが答え。zsh + oh-my-zsh + p10k は今も有効だが、新たに作る理由はない。


13章 · Rust CLIシリーズ — bat / eza / zoxide / fd / ripgrep / fzf / atuin

Unix標準ユーティリティをRustで書き直した一群。いずれもGitHubスター1万超。

bat — より良いcat

bat README.md
# シンタックスハイライト + git diff表示 + 自動pager

alias cat=batが定石。

eza(旧exa) — より良いls

eza -la --git --icons
eza -T --level=2  # ツリービュー

オリジナルのexaが保守停止したため、ezaがforkして引き継いだ。類似品にlsd

zoxide — より良いcd

# 最初は普通にcd
cd ~/work/yj-next-blog2

# 以降はどこからでも
z next-blog2     # フル名
z blog2          # 部分一致
zi               # fzfインタラクティブモード

よく行くディレクトリをスコアで学習し、名前の一部だけでジャンプできる。一度馴染むとcd ../../../fooに戻れない。

fd — より良いfind

fd README           # 名前にREADMEを含むファイル
fd -e mdx           # 拡張子mdx
fd -t f --changed-within 1d  # 1日以内に変更されたファイル

findの難解な構文(-name '*foo*' -type f)を、人間が書ける形に。

ripgrep(rg) — より良いgrep

rg "fn main"                # カレントディレクトリ全体を再帰検索
rg -t rust "TODO"           # Rustファイルのみ
rg -i -A 3 "error"          # 大文字小文字無視 + マッチ後3行

GitHubのコード検索エンジンの土台。.gitignoreを自動で尊重し、マルチスレッド+SIMDでgrepより一桁速い。

fzf — ファジーファインダ

# ファイル選択
vim "$(fzf)"

# Ctrl-Rでシェル履歴
# Ctrl-Tでカレントディレクトリのファイル
# Alt-Cでcd

# 任意のパイプに繋ぐ
ls | fzf | xargs cat

インストール後にシェル統合を有効化すると、Ctrl-R(履歴)、Ctrl-T(ファイル)、Alt-C(cd)が即座に書き換わる。1週間で離れられなくなる。

atuin — より良いシェル履歴

# インストール後
atuin init zsh | source
atuin import auto

# Ctrl-RがatuinのUIに切り替わる
# 終了コード・実行時間・ディレクトリ・セッション・ホストで検索
# オプション: 同期(セルフホスト可)

従来の.zsh_historyよりはるかに強力な検索。複数マシンで履歴を共有したいときはAtuinのクラウド(またはセルフホスト)に同期する。

まとめてインストール(Homebrew):

brew install bat eza zoxide fd ripgrep fzf atuin starship

zshに一括登録:

# ~/.zshrcの末尾に
eval "$(starship init zsh)"
eval "$(zoxide init zsh --cmd cd)"
eval "$(atuin init zsh)"
source <(fzf --zsh)
alias ls='eza --icons --git'
alias cat='bat --plain'
alias find='fd'
alias grep='rg'

一行で覚えるなら: この7本を全部入れるとシェルが別物になる。 最初の1週間は違和感、その後はGNU coreutilsの一部コマンドを忘れる。


14章 · 韓国・日本 — トスのdotfiles、メルカリのシェル

韓国 — トス・ネイバー・カカオの風景

トス(Viva Republica)のようなモダンスタートアップのシニア開発者のdotfilesリポジトリを覗くと、パターンが見える。

典型的なトス・シニアのmacOSセットアップ:

ネイバーのバックエンドチームのサーバ作業は別風景: Linux + bash + tmux + ripgrep + fzf。Starshipは時々。「サーバでは、どのマシンにもある道具しか使わない」が事実上のルール。

カカオはサイロごとの差が大きい。AIチームはzsh + Starship + Nushellを試し、保守的なバックエンドはbash + tmuxのまま。

韓国OSS: GitHubのkarpathyのスクリプトやgleitz/howdoiのようなグローバルなツールが韓国開発者のdotfilesに頻出。それ以外はグローバル動向とほぼ同じ。

日本 — メルカリ・LINE・サイバーエージェント

メルカリのSREチームが公開しているdotfilesは、ちょっとした模範解答になっている。

メルカリ流のmacOSセットアップ:

LINEヤフーは大規模インフラ特有の保守性: Linux + bash + tmux。SREの一部でNushellを実験中。

サイバーエージェントのAI Labはもっとも先鋭的: WarpでAIを積極活用、Nushellでデータ作業、Zellijも試行。

押さえておきたい日本OSS:

一行で覚えるなら: 韓国・日本のシニアdotfilesはグローバル動向の早期採用層。ただし日本は自国OSS(pet・peco・ghq)をより積極的に混ぜる。


15章 · 誰が何を選ぶべきか — シナリオ別マトリクス

最後の章。「どこで何を使うか」を決める助けになるマトリクス。

macOS — 新規ユーザ

項目推奨代替
エミュレータGhosttyWezterm
シェルzshfish 4
マルチプレクサtmuxZellij
プロンプトStarshipp10k
ユーティリティbat + eza + zoxide + fd + rg + fzf + atuin

macOS — AI/デザイン重視

項目推奨代替
エミュレータWarpGhostty
シェル(Warp内蔵)
プロンプト(Warp内蔵)Starship

Linuxデスクトップ

項目推奨代替
エミュレータGhosttyWezterm・Alacritty・Kitty
シェルzsh または fish 4bash
マルチプレクサtmuxZellij
プロンプトStarship

LinuxサーバSSH

項目推奨備考
シェルbashどこにでも入っている
マルチプレクサtmuxほぼどこにでも入っている
ユーティリティapt-getでripgrep・fd・batだけ入れすぎは運用負担

Windows

項目推奨代替
エミュレータWindows TerminalWezterm・Tabby
シェルPowerShell 7WSL + bash/zsh
プロンプトoh-my-poshStarship

速度優先

デザイン優先


エピローグ — ターミナルはもう一度、面白くなった

2014年に「ターミナル何使ってる?」と訊けば答えは2つだった — iTerm2かGNOME Terminal。シェルはbashかzsh。マルチプレクサはtmux。プロンプトはoh-my-zshのテーマのどれか。

2026年の同じ質問には、各レイヤごとに5つの答えが返ってくる。Ghostty・Wezterm・Alacritty・Kitty・Warp。zsh・fish 4・Nushell・bash・Elvish。tmux・Zellij。Starship・p10k・oh-my-posh。

その多様性を生んだのは3つの流れだ:

  1. Rust書き直し。 システムソフトウェアをRustで書き直す波が、シェル・ユーティリティ・マルチプレクサのすべてに到達した。
  2. 個人フルタイム作品の復活。 Mitchell HashimotoのGhosttyのように、「会社を離れて2年フルタイム」が可能な時代になった。
  3. AI統合。 Warpがもっとも野心的だが、Cursor・Claude Code・Clineといった道具もシェルとターミナルの境界を曖昧にしつつある。

この記事が、あなたの環境を一度見直すきっかけになれば。すべてを変える必要はない。エミュレータ一つ、プロンプト一つ、そしてripgrep・fzf・zoxide・atuinあたりを入れるだけで、日常のシェル作業は別次元になる。

14項目チェックリスト

  1. エミュレータをGhostty/Wezterm/Warpのいずれかに切り替える。
  2. シェルrcを整理し、Starshipを入れる。
  3. Powerlevel10kからStarshipへ移行(p10kが既に気に入っていれば任意)。
  4. ripgrepを入れ、grepを忘れる。
  5. fdを入れ、findを忘れる。
  6. fzfを入れてシェル統合を有効化(Ctrl-Rの意味が変わる)。
  7. zoxideを入れ、cdにalias。
  8. batを入れ、catにalias。
  9. ezaを入れ、lsにalias。
  10. atuinを入れる(必要ならsyncはセルフホスト)。
  11. tmuxまたはZellijでひとつだけ自分のフローを決める。
  12. dotfilesリポジトリを作り、chezmoiまたはgit bare repoで管理。
  13. フォントをNerd Font系に切り替える(Starshipのアイコンが出る)。
  14. WSLやコンテナにも同じ環境を入れる — どこでも同じ感触に。

アンチパターン10選

  1. 今からHyperを新規導入する — 遅い。他に選択肢がある。
  2. oh-my-zshを全プラグイン有効で入れる — シェル起動が遅くなる。
  3. tmux設定を1000行にする — 半年後に自分が読めない。
  4. p10kを新規導入する — Starshipへ。
  5. Nushellをサーバ自動化スクリプトに使う — 0.x由来の破壊的変更リスク。
  6. Warpだけ入れて他の選択肢を見ない — クラウド依存のコストが年々増し得る。
  7. zsh・bash・fishを並行してメインで使う — rcファイルが3本になる。ひとつに絞る。
  8. dotfilesなしで新マシンをセットアップ — 30分の仕事が3時間に。
  9. atuinを入れてsyncを検討しない — 履歴がクラウドへ送られる。
  10. Ghosttyがリリースされた直後に会社全体の標準として強制する — 1年待ち、自分のマシンで十分検証してから。

次回予告


参考 / References

コメント

まだコメントはありません。

ログインするとコメントできます