PS1変数完全ガイド:Linuxプロンプトを自由自在にカスタマイズ【初心者向け】

Linux

Linuxのターミナルを開くと、「user@hostname:~$」のような文字列が表示されますよね?

「この表示、もっとカッコよくできないかな?」と思ったことはありませんか?

実は、このプロンプトと呼ばれる表示は、PS1変数を使って自由にカスタマイズできるんです。今回は、このLinuxシェルのカスタマイズに欠かせない技術について、初心者の方でも分かりやすく解説していきますよ!


スポンサーリンク
  1. PS1変数とは?基本を理解しよう
    1. プロンプトって何?
    2. なぜカスタマイズする?
  2. 現在のPS1を確認する
    1. PS1の内容を表示
    2. デフォルトのプロンプト
  3. エスケープシーケンス一覧
    1. ユーザーとホスト情報
    2. ディレクトリ情報
    3. 時刻情報
    4. シェル情報
    5. 改行と特殊文字
  4. シンプルなカスタマイズ例
    1. 例1:ユーザー名とディレクトリのみ
    2. 例2:時刻を表示
    3. 例3:改行を入れる
    4. 例4:矢印を使う
  5. カラフルなプロンプトを作る
    1. ANSIカラーコードの基本
    2. 色コード一覧
    3. 色付きプロンプトの例
  6. 高度なプロンプトの例
    1. Gitブランチを表示
    2. Python仮想環境を表示
    3. 終了ステータスを表示
    4. 複数行プロンプト
  7. 設定を永続化する
    1. .bashrcに設定を保存
    2. .bash_profileとの違い
    3. システム全体への適用
  8. PS2、PS3、PS4変数
    1. PS2(継続プロンプト)
    2. PS3(selectプロンプト)
    3. PS4(デバッグプロンプト)
  9. 便利なプロンプトのテンプレート集
    1. ミニマル
    2. スタンダード
    3. 時刻表示
    4. 開発者向け(Git対応)
    5. パワーライン風
    6. ツーライン
  10. トラブルシューティング
    1. 問題1:プロンプトが表示されない
    2. 問題2:カーソル位置がずれる
    3. 問題3:設定が反映されない
    4. 問題4:rootで色が出ない
  11. Oh My BashやPowerlevel10kの紹介
    1. Oh My Bash
    2. Starship
    3. カスタム vs フレームワーク
  12. セキュリティとパフォーマンスの考慮
    1. パスワードを含めない
    2. 重い処理を避ける
    3. ネットワーク通信をしない
  13. よくある質問
  14. まとめ:プロンプトで快適なターミナルライフを

PS1変数とは?基本を理解しよう

PS1は「Prompt String 1」の略で、シェルのプロンプトをどう表示するかを決める環境変数です。

プロンプトって何?

プロンプトは、コマンドを入力する前に表示される文字列のことです。

典型的な表示:

user@ubuntu:~$

これが、あなたに「コマンドを入力してください」と促している(プロンプトしている)んですね。

なぜカスタマイズする?

視認性の向上:

現在のディレクトリやホスト名が分かりやすくなります。

作業効率アップ:

Git のブランチ名や仮想環境の情報を表示できますよ。

個性の表現:

自分だけのオリジナルなターミナルにできます。


現在のPS1を確認する

まずは、今の設定を見てみましょう。

PS1の内容を表示

echo $PS1

出力例:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

一見複雑ですが、これからこの意味を理解していきます。

デフォルトのプロンプト

Ubuntu/Debian:

user@hostname:~/directory$

RHEL/CentOS/Fedora:

[user@hostname directory]$

macOS:

hostname:directory user$

ディストリビューションによって、デフォルトが違うんですね。


エスケープシーケンス一覧

PS1では、特殊な記号を使って動的な情報を表示できます。

ユーザーとホスト情報

エスケープ説明
\uユーザー名user
\hホスト名(短縮版)ubuntu
\Hホスト名(完全版)ubuntu.example.com

ディレクトリ情報

エスケープ説明
\wフルパス/home/user/documents
\Wカレントディレクトリ名のみdocuments
~ホームディレクトリ表示~/documents

時刻情報

エスケープ説明
\t24時間形式(HH:MM:SS)14:30:45
\T12時間形式(HH:MM:SS)02:30:45
\A24時間形式(HH:MM)14:30
\@12時間形式(AM/PM付き)02:30 PM
\d日付(曜日 月 日)Mon Jan 15

シェル情報

エスケープ説明
\$rootなら#、それ以外は$$ または #
\#コマンド番号42
\!履歴番号156
\sシェル名bash
\vBashバージョン5.1

改行と特殊文字

エスケープ説明
\n改行
\\バックスラッシュ
\[非表示文字の開始(カラーコードなど)
\]非表示文字の終了

シンプルなカスタマイズ例

基本的なカスタマイズから始めてみましょう。

例1:ユーザー名とディレクトリのみ

PS1="\u:\W\$ "

結果:

user:documents$

シンプルで見やすいですね。

例2:時刻を表示

PS1="[\t] \u@\h:\w\$ "

結果:

[14:30:45] user@ubuntu:~/documents$

現在時刻が分かって便利です。

例3:改行を入れる

PS1="\u@\h:\w\n\$ "

結果:

user@ubuntu:~/documents
$

プロンプトが長くなりがちなときは、改行するとスッキリしますよ。

例4:矢印を使う

PS1="\u@\h:\w → "

結果:

user@ubuntu:~/documents →

視覚的に分かりやすくなります。


カラフルなプロンプトを作る

色を付けると、さらに見やすくなります。

ANSIカラーコードの基本

色を付けるには、ANSIエスケープシーケンスを使います。

基本形式:

\[\033[色コードm\]テキスト\[\033[00m\]
  • \[\]:表示幅を計算しないための囲み
  • \033[:エスケープシーケンスの開始
  • 色コード:色を指定
  • m:終端文字
  • \033[00m:色をリセット

色コード一覧

前景色(文字色):

コード明るい色のコード
3090
3191
3292
3393
3494
35マゼンタ95
36シアン96
3797

背景色:

前景色コード + 10(例:40=黒背景、41=赤背景)

スタイル:

コード効果
0リセット
1太字
4下線
7反転

色付きプロンプトの例

例1:ユーザー名を緑、ディレクトリを青に

PS1="\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\$ "

結果(色付き):

user@ubuntu:~/documents$
└緑色┘  └青色┘

例2:rootユーザーは赤で警告

if [ $UID -eq 0 ]; then
    PS1="\[\033[91m\]\u@\h\[\033[00m\]:\w\# "
else
    PS1="\[\033[32m\]\u@\h\[\033[00m\]:\w\$ "
fi

rootでログインすると、ユーザー名が赤く表示されて分かりやすいですね。

例3:時刻とディレクトリを色分け

PS1="\[\033[36m\][\t]\[\033[00m\] \[\033[32m\]\u\[\033[00m\]@\[\033[33m\]\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\$ "

結果(色付き):

[14:30:45] user@ubuntu:~/documents$
 └シアン┘ └緑┘ └黄色┘  └青色┘

高度なプロンプトの例

さらに実用的なカスタマイズを見ていきましょう。

Gitブランチを表示

現在のGitブランチ名をプロンプトに表示できます。

# 関数を定義
git_branch() {
    git branch 2>/dev/null | grep '^*' | sed 's/* //'
}

# PS1に組み込む
PS1="\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\[\033[33m\]\$(git_branch)\[\033[00m\]\$ "

結果:

user@ubuntu:~/project main$
                      └Gitブランチ名

開発作業がとても便利になりますよ。

Python仮想環境を表示

Python開発でvenvを使っている場合:

PS1="${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV)) }\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\$ "

結果:

(myenv) user@ubuntu:~/project$
└仮想環境名

終了ステータスを表示

直前のコマンドが成功したか失敗したかを表示:

PS1='$(if [ $? -eq 0 ]; then echo "\[\033[32m\]✓"; else echo "\[\033[31m\]✗"; fi)\[\033[00m\] \u@\h:\w\$ '

結果:

✓ user@ubuntu:~/documents$  # 成功
✗ user@ubuntu:~/documents$  # 失敗

複数行プロンプト

情報量が多い場合は、複数行に分けると見やすくなります。

PS1="\[\033[36m\]┌─[\[\033[32m\]\u\[\033[36m\]@\[\033[33m\]\h\[\033[36m\]]─[\[\033[34m\]\w\[\033[36m\]]\n└─\[\033[00m\]\$ "

結果:

┌─[user@ubuntu]─[~/documents]
└─$

見た目もカッコいいですね。


設定を永続化する

一時的な変更は、シェルを終了すると消えてしまいます。

.bashrcに設定を保存

ホームディレクトリの.bashrcを編集:

nano ~/.bashrc

ファイルの末尾に追加:

# カスタムPS1設定
PS1="\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\$ "

設定を反映:

source ~/.bashrc

これで、新しいシェルを開いても設定が保持されます。

.bash_profileとの違い

.bashrc:

  • 対話型シェルを起動するたびに実行
  • 新しいターミナルウィンドウを開くたびに読み込まれる

.bash_profile:

  • ログインシェルのみで実行
  • SSH接続時やログイン時に読み込まれる

通常は.bashrcに書けばOKですよ。

システム全体への適用

すべてのユーザーに適用したい場合:

sudo nano /etc/bash.bashrc

ただし、システム全体の設定を変更する際は注意が必要です。


PS2、PS3、PS4変数

PS1以外にも、いくつかのプロンプト変数があります。

PS2(継続プロンプト)

複数行のコマンドを入力するときに表示されます。

デフォルト:

echo $PS2
>

カスタマイズ例:

PS2="... "

結果:

$ echo "これは
... 複数行の
... コマンドです"

PS3(selectプロンプト)

select文で選択肢を表示するときに使われます。

PS3="選択してください: "
select option in "オプション1" "オプション2" "終了"; do
    case $option in
        "終了") break;;
        *) echo "選択: $option";;
    esac
done

結果:

1) オプション1
2) オプション2
3) 終了
選択してください:

PS4(デバッグプロンプト)

シェルスクリプトをデバッグモード(set -x)で実行するときに表示されます。

デフォルト:

echo $PS4
+

カスタマイズ例:

PS4='+ [$LINENO] '

行番号が表示されて、デバッグがしやすくなりますよ。


便利なプロンプトのテンプレート集

すぐに使えるプロンプト設定を紹介します。

ミニマル

PS1="\W \$ "

結果:

documents $

スタンダード

PS1="\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\$ "

時刻表示

PS1="\[\033[36m\][\A]\[\033[00m\] \[\033[32m\]\u\[\033[00m\]@\[\033[33m\]\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\$ "

開発者向け(Git対応)

git_branch() {
    git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
PS1="\[\033[32m\]\u\[\033[00m\]@\[\033[33m\]\h\[\033[00m\]:\[\033[34m\]\w\[\033[00m\]\[\033[35m\]\$(git_branch)\[\033[00m\]\$ "

パワーライン風

PS1="\[\033[38;5;27m\]⮀\[\033[48;5;27m\]\[\033[38;5;255m\] \u \[\033[48;5;240m\]\[\033[38;5;27m\]⮀\[\033[38;5;255m\] \w \[\033[00m\]\[\033[38;5;240m\]⮀\[\033[00m\] "

ツーライン

PS1="\[\033[36m\]╭─\[\033[32m\]\u\[\033[36m\]@\[\033[33m\]\h\[\033[00m\] \[\033[34m\]\w\[\033[00m\]\n\[\033[36m\]╰─\[\033[00m\]\$ "

トラブルシューティング

よくある問題と解決方法です。

問題1:プロンプトが表示されない

症状:

PS1を変更したら、何も表示されなくなった。

原因:

文法エラーか、エスケープシーケンスの間違い。

解決策:

# デフォルトに戻す
PS1="\u@\h:\w\$ "

# または
unset PS1
source ~/.bashrc

問題2:カーソル位置がずれる

症状:

長いコマンドを入力すると、カーソルが変な位置に移動する。

原因:

カラーコードを\[\]で囲んでいない。

悪い例:

PS1="\033[32m\u\033[00m\$ "  # \[と\]がない

良い例:

PS1="\[\033[32m\]\u\[\033[00m\]\$ "  # 正しく囲む

問題3:設定が反映されない

症状:

.bashrcを編集したのに、変更が反映されない。

原因:

sourceコマンドを実行していないか、別のファイルが優先されている。

解決策:

# 設定を再読み込み
source ~/.bashrc

# または新しいシェルを起動
bash

# .bash_profileもチェック
cat ~/.bash_profile | grep PS1

問題4:rootで色が出ない

症状:

rootユーザーに切り替えると、カラーが消える。

原因:

rootの.bashrcが別設定になっている。

解決策:

# rootの.bashrcを編集
sudo nano /root/.bashrc

# または
sudo su
nano ~/.bashrc

Oh My BashやPowerlevel10kの紹介

手軽に高機能なプロンプトを使いたい場合は、専用ツールもあります。

Oh My Bash

インストール:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"

特徴:

  • 豊富なテーマ
  • プラグイン機能
  • 簡単に切り替え可能

Starship

インストール(Rust製):

curl -sS https://starship.rs/install.sh | sh

.bashrcに追加:

eval "$(starship init bash)"

特徴:

  • 超高速
  • クロスシェル対応(Bash、Zsh、Fishなど)
  • Git、Python、Node.jsなど多数の言語に対応

カスタム vs フレームワーク

項目自分で設定フレームワーク
自由度完全に自由テーマ内で調整
学習コスト高い低い
動作速度高速やや遅い
メンテナンス自己責任コミュニティ

用途に応じて選びましょう。


セキュリティとパフォーマンスの考慮

プロンプトのカスタマイズで注意すべき点です。

パスワードを含めない

絶対にやってはいけないこと:

PS1="[password:secret123] \u@\h\$ "  # ダメ!

プロンプトは画面共有や録画で見えてしまいます。

重い処理を避ける

悪い例:

PS1="\$(find / -name '*.log' | wc -l) \u@\h\$ "  # 毎回全ディスクを検索

プロンプトは頻繁に表示されるので、重い処理は避けましょう。

ネットワーク通信をしない

悪い例:

PS1="\$(curl -s api.example.com/status) \u@\h\$ "  # 毎回APIを叩く

ネットワークが遅いと、コマンド入力ごとに待たされます。


よくある質問

Q: PS1の変更が一時的にしか反映されない

A: ターミナルを閉じると消えるのは正常です。永続化するには、~/.bashrcに書き込んでsource ~/.bashrcを実行してください。

Q: Zshでも同じように設定できる?

A: Zshでは変数名が少し異なります(PROMPTRPROMPT)。基本的な考え方は同じですが、エスケープシーケンスも一部違いますよ。

Q: プロンプトが長すぎて邪魔

A: \W(ディレクトリ名のみ)を使ったり、改行\nを入れたりすると良いでしょう。またはPS1="\$ "のようにシンプルにするのも手です。

Q: 絵文字は使える?

A: はい、UTF-8対応のターミナルなら使えます。PS1="🚀 \u@\h:\w\$ "のような設定も可能ですよ。

Q: WindowsのWSLでも使える?

A: はい、WSLのBashでも全く同じように使えます。WindowsターミナルやVS Codeの統合ターミナルでも動作します。


まとめ:プロンプトで快適なターミナルライフを

PS1変数について、重要なポイントをおさらいします。

今日学んだこと:

  • PS1はシェルプロンプトの表示をカスタマイズする環境変数
  • \u\h\wなどのエスケープシーケンスで動的情報を表示
  • ANSIカラーコードで色付けができる
  • .bashrcに書いて永続化する
  • PS2、PS3、PS4も用途に応じて使い分ける
  • Gitブランチや仮想環境などの情報も表示可能
  • Oh My BashやStarshipなどのフレームワークもある
  • パフォーマンスとセキュリティに注意

プロンプトのカスタマイズは、ターミナルを使う上での最も基本的かつ楽しいカスタマイズです。

最初はシンプルな色付けから始めて、徐々に自分の作業スタイルに合わせて改良していくと良いでしょう。Gitを使う開発者ならブランチ名の表示、複数のサーバーを管理するならホスト名の強調など、用途に応じた最適なプロンプトを見つけてくださいね。

自分だけのカスタムプロンプトで、快適なターミナルライフを楽しみましょう!


関連記事:

  • Bashの環境変数完全ガイド
  • シェルスクリプトの基礎
  • Linuxターミナルの効率的な使い方

コメント

タイトルとURLをコピーしました