Linuxのターミナルを開くと、「user@hostname:~$」のような文字列が表示されますよね?
「この表示、もっとカッコよくできないかな?」と思ったことはありませんか?
実は、このプロンプトと呼ばれる表示は、PS1変数を使って自由にカスタマイズできるんです。今回は、このLinuxシェルのカスタマイズに欠かせない技術について、初心者の方でも分かりやすく解説していきますよ!
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 |
時刻情報
| エスケープ | 説明 | 例 |
|---|---|---|
\t | 24時間形式(HH:MM:SS) | 14:30:45 |
\T | 12時間形式(HH:MM:SS) | 02:30:45 |
\A | 24時間形式(HH:MM) | 14:30 |
\@ | 12時間形式(AM/PM付き) | 02:30 PM |
\d | 日付(曜日 月 日) | Mon Jan 15 |
シェル情報
| エスケープ | 説明 | 例 |
|---|---|---|
\$ | rootなら#、それ以外は$ | $ または # |
\# | コマンド番号 | 42 |
\! | 履歴番号 | 156 |
\s | シェル名 | bash |
\v | Bashバージョン | 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:色をリセット
色コード一覧
前景色(文字色):
| コード | 色 | 明るい色のコード |
|---|---|---|
| 30 | 黒 | 90 |
| 31 | 赤 | 91 |
| 32 | 緑 | 92 |
| 33 | 黄 | 93 |
| 34 | 青 | 94 |
| 35 | マゼンタ | 95 |
| 36 | シアン | 96 |
| 37 | 白 | 97 |
背景色:
前景色コード + 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では変数名が少し異なります(PROMPTやRPROMPT)。基本的な考え方は同じですが、エスケープシーケンスも一部違いますよ。
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ターミナルの効率的な使い方


コメント