この記事でわかること
- Ubuntu 24.04 にzshとtmuxをインストールする方法
- デフォルトシェルをbashからzshに切り替える手順
- Oh My Zshでzshを使いやすくカスタマイズする方法
- tmuxの基本操作とセッション管理の考え方
- zsh + tmuxを組み合わせた快適な開発環境の構築方法
はじめに
自作PCにUbuntu 24.04をインストールし、開発環境をゼロから構築しています。
OSを入れて最初に触れるのがターミナルとシェルです。Ubuntuのデフォルトシェルであるbashは十分に実用的ですが、日常的にターミナルで作業をするなら、zshとtmuxを導入することで操作性が大きく変わります。
この記事では、bashからzsh + tmuxに乗り換える手順を、インストールから設定・カスタマイズまで一通り記録します。
前提・環境
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04.4 LTS (Noble Numbat) |
| CPU | Intel Core Ultra 7 265K |
| メモリ | 32GB |
| アーキテクチャ | x86_64 |
| 現在のシェル | bash(Ubuntuデフォルト) |
本記事は自作PCにUbuntuをクリーンインストールした直後の、デフォルト状態からの構築手順を記録しています。WSLやDocker環境でも基本的な手順は同じですが、一部の設定が異なる場合があります。
bashとzshの比較
| 機能 | bash | zsh |
|---|---|---|
| コマンド補完 | 基本的な補完 | 高度なタブ補完(候補の一覧表示・選択) |
| スペル修正 | なし | 自動修正の提案 |
| プラグイン管理 | 手動設定 | Oh My Zshなどのフレームワークで簡単管理 |
| テーマ | 手動設定 | 100以上のテーマを簡単に切り替え可能 |
| 履歴共有 | ターミナル間で非共有 | 複数ターミナル間でリアルタイム共有 |
| globbing | 基本的 | 拡張globbing(**/*.py などの再帰検索) |
zsh + tmux
tmuxは「ターミナルマルチプレクサ」と呼ばれるツールです。1つのターミナルウィンドウの中に複数のペインやウィンドウを作成し、SSH切断後もセッションを維持できます。
zshで「シェルそのもの」を強化し、tmuxで「ターミナルの使い方」を強化する。この2つを組み合わせることで、開発効率が大きく向上します。
事前準備
zshのプラグイン導入やOh My Zshのインストールに curl と git が必要です。Ubuntu 24.04にはデフォルトで入っていない場合があるため、先にインストールしておきます。
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git
zshのインストールとセットアップ
zshをインストールする
sudo apt install -y zsh
インストールされたことを確認します。
zsh --version
以下のように表示されれば成功です。
zsh 5.9 (x86_64-ubuntu-linux-gnu)
デフォルトシェルをzshに変更する
chshコマンドでログインシェルをzshに切り替えます。
chsh -s $(which zsh)
chshの反映にはログアウト→ログインが必要です。変更後、一度ログアウトしてから再度ログインしてください。
再ログイン後、シェルが切り替わったことを確認します。
echo $SHELL
# /usr/bin/zsh
zsh初回起動時の設定メニューについて
初回起動時に「New zsh user」向けの設定メニューが表示される場合があります。
-
(0)— 空の.zshrcを作成する(おすすめ:後でOh My Zshが上書きします) -
(1)— 対話形式で基本設定を行う -
(2)— 推奨設定の.zshrcを自動生成する -
(q)— 何もせずに終了する
ここでは (0) を選択 してください。このあとOh My Zshをインストールすると.zshrcが自動生成されるため、手動で設定する必要はありません。
Oh My Zshをインストールする
Oh My Zshは、zshの設定を簡単に管理できるフレームワークです。テーマやプラグインをコマンド1つで導入できます。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
インストールが完了すると、プロンプトの見た目が変わります。これがOh My Zshのデフォルトテーマ(robbyrussell)です。
テーマを変更する
Oh My Zshには100以上のテーマが同梱されています。テーマを変更するには、~/.zshrc の ZSH_THEME を編集します。
おすすめのテーマをいくつか紹介します。
| テーマ名 | 特徴 |
|---|---|
robbyrussell |
デフォルト。シンプルで軽量 |
agnoster |
Gitブランチ表示が見やすい。Powerlineフォント必要 |
dst |
ディレクトリパスがフル表示される |
bira |
ユーザー名・ホスト名・パスが2行表示 |
ここでは agnoster を設定してみます。
ZSH_THEME="agnoster"
変更を反映します。
source ~/.zshrc
agnoster テーマを正しく表示するには、Powerline対応フォントが必要です。以下のコマンドでインストールできます。
sudo apt install -y fonts-powerline
インストール後、ターミナルエミュレータ(GNOME Terminalなど)の設定画面でフォントを「◯◯ for Powerline」や「Nerd Font」系に変更してください。
プラグインを追加する
Oh My Zshの真価はプラグインにあります。以下の3つは特におすすめです。
| プラグイン名 | 機能 |
|---|---|
zsh-autosuggestions |
コマンド履歴から候補をグレー表示で提案してくれる |
zsh-syntax-highlighting |
コマンドの構文をリアルタイムで色分けしてくれる |
git |
Gitのエイリアスを多数追加(Oh My Zshに同梱済み) |
まず、外部プラグインをインストールします。
# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
次に、~/.zshrc のプラグイン設定を編集します。
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
)
変更を反映します。
source ~/.zshrc
これで以下の機能が有効になります。
-
autosuggestions: コマンドを打ち始めると、過去の履歴から候補がグレー表示で表示されます。
→(右矢印キー)を押すと候補がそのまま入力されます。 - syntax-highlighting: 正しいコマンドは緑色、存在しないコマンドは赤色でリアルタイムに色分けされます。Enterを押す前にタイプミスに気づけるので非常に便利です。
tmuxのインストールとセットアップ
zshの設定が完了したところで、次はtmuxを導入します。
tmuxをインストールする
sudo apt install -y tmux
バージョンを確認します。
tmux -V
以下のように表示されます。
tmux 3.4
バージョン表記はリポジトリの状態によって tmux 3.4 や tmux next-3.4 のように表示される場合があります。3.4系であれば本記事の内容はそのまま適用できます。
tmuxの基本概念を理解する
tmuxを使いこなすには、セッション・ウィンドウ・ペイン の3つの概念を理解する必要があります。
| 概念 | 説明 | イメージ |
|---|---|---|
| セッション | tmuxの最上位単位。プロジェクトごとに作ると便利 | 「作業デスク」全体 |
| ウィンドウ | セッション内のタブ。画面全体を使う | ブラウザの「タブ」 |
| ペイン | ウィンドウ内の分割領域 | 画面を左右・上下に分割したそれぞれ |
tmuxの基本操作
tmuxの操作は、プレフィックスキー(デフォルトは Ctrl+b)に続けてコマンドキーを押す方式です。
この記事では、後ほどプレフィックスキーを Ctrl+a にカスタマイズします。カスタマイズ前の説明では Ctrl+b、カスタマイズ後の説明では Ctrl+a を使用しますので、ご自身の設定に合わせて読み替えてください。
セッション操作
# 新しいセッションを開始(名前付き)
tmux new-session -s myproject
# セッションからデタッチ(tmux内で)
# Ctrl+b → d
# セッション一覧を表示
tmux ls
# セッションに再接続(アタッチ)
tmux attach -t myproject
# セッションを終了
tmux kill-session -t myproject
デタッチとアタッチ がtmuxの最大の特徴です。デタッチすると、tmux内で実行中のプロセスはバックグラウンドで動き続けます。SSH接続が切れてしまった場合でも、再接続して tmux attach するだけで作業を再開できます。
ウィンドウ操作
すべての操作はtmux内で行います。Ctrl+b のあとに以下のキーを押します。
| キー | 操作 |
|---|---|
c |
新しいウィンドウを作成 |
n |
次のウィンドウに移動 |
p |
前のウィンドウに移動 |
0〜9
|
番号指定でウィンドウに移動 |
, |
現在のウィンドウの名前を変更 |
& |
現在のウィンドウを閉じる |
ペイン操作
| キー | 操作 |
|---|---|
% |
画面を左右に分割 |
" |
画面を上下に分割 |
矢印キー |
ペイン間を移動 |
x |
現在のペインを閉じる |
z |
現在のペインを最大化 / 元に戻す(ズームトグル) |
Ctrl+矢印 |
ペインのサイズを調整 |
実践:よくある開発レイアウトを作ってみる
実際に、開発でよく使うレイアウトを作ってみましょう。
# 「dev」という名前のセッションを作成
tmux new-session -s dev
tmuxに入ったら、以下の操作で3ペイン構成を作ります。
1. Ctrl+b → % 左右に分割
2. Ctrl+b → " 右側をさらに上下に分割
3. Ctrl+b → ← 左ペインに移動
これで以下のようなレイアウトになります。
+------------------+-----------+
| | Terminal |
| Editor +-----------+
| (main work) | Log/Watch |
+------------------+-----------+
左ペインでコードを書き、右上でコマンドを実行し、右下でログを監視する。このような使い方ができます。
tmuxの設定をカスタマイズする
デフォルトのtmux設定をもっと使いやすくカスタマイズします。
~/.tmux.conf に以下を記述します。
# -----------------------------------
# プレフィックスキーの変更
# -----------------------------------
# Ctrl+b → Ctrl+a に変更(片手で押しやすい)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# -----------------------------------
# ペイン分割のキーバインド変更
# -----------------------------------
# | で左右分割、- で上下分割(直感的に覚えやすい)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# -----------------------------------
# ペイン移動をVim風に
# -----------------------------------
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# -----------------------------------
# マウス操作を有効化
# -----------------------------------
set -g mouse on
# -----------------------------------
# ウィンドウ・ペイン番号を1始まりに
# -----------------------------------
set -g base-index 1
setw -g pane-base-index 1
# -----------------------------------
# 256色・True Color対応
# -----------------------------------
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# -----------------------------------
# ステータスバーの外観
# -----------------------------------
set -g status-position top
set -g status-style "bg=#1e1e2e,fg=#cdd6f4"
setw -g window-status-current-style "bg=#89b4fa,fg=#1e1e2e,bold"
# -----------------------------------
# ペインの境界線
# -----------------------------------
set -g pane-border-style "fg=#45475a"
set -g pane-active-border-style "fg=#89b4fa"
# -----------------------------------
# その他の便利設定
# -----------------------------------
# Escキーの遅延を解消(Vimユーザー向け)
set -sg escape-time 0
# スクロールバッファを増やす
set -g history-limit 10000
# 設定ファイルの再読み込みショートカット
bind r source-file ~/.tmux.conf \; display "Config Reloaded!"
# デフォルトシェルをzshに
set -g default-shell /usr/bin/zsh
設定ファイルをtmux内で反映するには、以下を実行します。
tmux source-file ~/.tmux.conf
上記の設定を入れた後は、Ctrl+a → r で手軽に再読み込みできます。
プレフィックスキーを Ctrl+a に変更した場合、以降のすべてのtmux操作のプレフィックスが Ctrl+a になります。記事前半で紹介した Ctrl+b の操作は、すべて Ctrl+a に読み替えてください。
カスタマイズ後のキーバインドをまとめます。
| 操作 | カスタマイズ前 | カスタマイズ後 |
|---|---|---|
| プレフィックス | Ctrl+b |
Ctrl+a |
| 左右分割 | Ctrl+b → % |
Ctrl+a → | |
| 上下分割 | Ctrl+b → " |
Ctrl+a → - |
| ペイン移動 | Ctrl+b → 矢印 |
Ctrl+a → h/j/k/l |
| 設定再読み込み | — | Ctrl+a → r |
実際にzsh + tmuxを組み合わせる
これまでの設定でzshとtmuxはそれぞれ単独で動作する状態です。ここからは、2つを連携させてさらに快適にします。
ターミナル起動時にtmuxを自動で起動する
毎回 tmux コマンドを打つのは面倒です。~/.zshrc の末尾に以下を追加すると、ターミナルを開くだけでtmuxが起動します。
# tmuxの自動起動
if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then
tmux attach-session -t default || tmux new-session -s default
fi
このスクリプトは以下のように動作します。
-
tmuxコマンドが存在することを確認する - 現在すでにtmux内でないことを確認する(二重起動防止)
-
defaultという名前のセッションがあればアタッチ、なければ新規作成する
tmux自動起動の注意点
以下のケースでは、tmux自動起動が意図しない挙動を引き起こす場合があります。
- VS Code統合ターミナル: VS Codeのターミナルでtmuxが起動すると、一部の拡張機能と競合する場合があります
- scp / rsync: リモートでtmuxが自動起動すると、ファイル転送が失敗する場合があります
このような問題が起きた場合は、条件分岐で除外してください。
# 改良版:特定の環境では自動起動しない
if command -v tmux &> /dev/null && [ -z "$TMUX" ] && [ -z "$VSCODE_RESOLVING_ENVIRONMENT" ]; then
tmux attach-session -t default || tmux new-session -s default
fi
開発プロジェクト用のtmuxセッションをスクリプト化する
よく使うレイアウトは、シェルスクリプトにしておくと一発で再現できます。
#!/usr/bin/env bash
# ※ bashを指定しているのは、シェルスクリプトの移植性を考慮しているためです。
# zsh以外の環境でも動作するようにしています。
SESSION="dev"
# 既存セッションがあればアタッチ
tmux has-session -t $SESSION 2>/dev/null
if [ $? -eq 0 ]; then
tmux attach -t $SESSION
exit 0
fi
# 新しいセッションを作成
tmux new-session -d -s $SESSION -n editor
# ウィンドウ1: エディタ + ターミナル
tmux split-window -h -t $SESSION:1
tmux split-window -v -t $SESSION:1.2
tmux send-keys -t $SESSION:1.1 'nvim .' C-m
# ウィンドウ2: Git操作
tmux new-window -t $SESSION -n git
tmux send-keys -t $SESSION:2 'git status' C-m
# ウィンドウ3: サーバー / ログ監視
tmux new-window -t $SESSION -n server
# ウィンドウ1にフォーカスを戻す
tmux select-window -t $SESSION:1
tmux select-pane -t $SESSION:1.1
# セッションにアタッチ
tmux attach -t $SESSION
実行権限を付与して使用します。
mkdir -p ~/bin
chmod +x ~/bin/dev-session.sh
~/bin/dev-session.sh
ハマりポイント
1. Powerlineフォントが表示されない
agnoster テーマなどを使用した際にプロンプトが文字化けする場合は、ターミナルエミュレータ側のフォント設定を確認してください。
# Powerlineフォントのインストール
sudo apt install -y fonts-powerline
# フォントキャッシュの更新
fc-cache -fv
インストールだけでは反映されません。ターミナルエミュレータ(GNOME Terminalなど)の 設定 → プロファイル → フォント から、「◯◯ for Powerline」や「Nerd Font」系のフォントに変更してください。
2. tmux内で色がおかしい
tmux内でVimやlsの色表示がおかしい場合は、~/.tmux.conf に以下が設定されているか確認してください。
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
3. tmux内でコピー&ペーストができない
マウスモードが有効な場合、通常のドラッグ選択ではtmuxがコピーをインターセプトします。Shift キーを押しながら選択すると、ターミナルのネイティブなコピー機能が使えます。
tmuxのコピーモードを使う場合は、以下の手順で操作します。
| 手順 | キー操作 | 説明 |
|---|---|---|
| 1 | Ctrl+a → [ |
コピーモードに入る |
| 2 | Space |
選択開始 |
| 3 |
矢印キー で範囲選択 |
選択範囲を広げる |
| 4 | Enter |
コピー(バッファに格納) |
| 5 | Ctrl+a → ] |
ペースト |
設定ファイルの全体像
個別に設定を追加してきましたので、最終的なファイルの全体像をまとめて掲載します。
~/.zshrc(最終版・クリックで展開)
# Oh My Zsh の設定
export ZSH="$HOME/.oh-my-zsh"
# テーマ
ZSH_THEME="agnoster"
# プラグイン
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
)
source $ZSH/oh-my-zsh.sh
# --- ユーザー設定 ---
# エイリアス(お好みで追加)
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# tmuxの自動起動
if command -v tmux &> /dev/null && [ -z "$TMUX" ] && [ -z "$VSCODE_RESOLVING_ENVIRONMENT" ]; then
tmux attach-session -t default || tmux new-session -s default
fi
~/.tmux.conf(最終版・クリックで展開)
# プレフィックスキー: Ctrl+a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# ペイン分割: | で左右、- で上下
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# ペイン移動: Vim風
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# マウス操作
set -g mouse on
# 番号を1始まりに
set -g base-index 1
setw -g pane-base-index 1
# 色設定
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# ステータスバー
set -g status-position top
set -g status-style "bg=#1e1e2e,fg=#cdd6f4"
setw -g window-status-current-style "bg=#89b4fa,fg=#1e1e2e,bold"
# ペイン境界線
set -g pane-border-style "fg=#45475a"
set -g pane-active-border-style "fg=#89b4fa"
# その他
set -sg escape-time 0
set -g history-limit 10000
bind r source-file ~/.tmux.conf \; display "Config Reloaded!"
set -g default-shell /usr/bin/zsh
まとめ
-
zsh をインストールし、
chshでデフォルトシェルに設定しました - Oh My Zsh でテーマ(agnoster)とプラグイン(autosuggestions, syntax-highlighting)を導入しました
- tmux をインストールし、セッション / ウィンドウ / ペインの基本操作を覚えました
- ~/.tmux.conf でプレフィックスキーやペイン分割のキーバインド、見た目をカスタマイズしました
- zshとtmuxを組み合わせて、ターミナル起動時に自動でtmuxセッションに入る設定を行いました
bashからの移行は思ったよりハードルが低いです。まずはzshをインストールして数日使ってみて、慣れてきたらtmuxを導入するという順番でもよいでしょう。
万が一zshが合わなかった場合は、chsh -s /bin/bash でいつでもbashに戻せます。