#100
posted on 2026.02.13 (Fri)

zshを使っているターミナルのプロンプトの表示内容をカスタマイズ。

CATEGORY

ログインシェルにzshを使用しているmacOSのターミナルのプロンプトが、初期状態では「ユーザー名@ホスト名 カレントディレクトリ %」で表示されて見づらいので、表示内容と色を変更する方法のメモ。

※ bashのプロンプト変更については前の記事を参照。

※ zshの公式マニュアル

 

macOS Tahoe 26.2
ターミナル バージョン2.15 (466)
zsh 5.9 (arm64-apple-darwin25.0) で確認。

 

 

プロンプト表示の変更の手順と予備知識

1. 変更の手順

zshのプロンプト表示の変更の手順。

  1. zshの設定ファイルである「.zshrc」ファイルをホームディレクトリに作成。(既存の場合は、そこに記述を追加する。)
  2. 「.zshrc」ファイルに、シェル変数「PROMPT」の値をカスタマイズして記述。
  3. ターミナルを再起動してプロンプト表示を確認。

※ ターミナルを再起動しなくても、「source」コマンドを使用すれば「.zshrc」ファイルに保存した内容を即実行・反映させることができる。

source ~/.zshrc

source : 引数で指定されたシェルスクリプトや設定ファイルを、現在のシェル環境で読み込み実行する。

 

2. zshの設定ファイル

zshの主なユーザー設定用のファイル。

  • 「.zprofile」 : ログインシェル起動時(ターミナル起動時)に一度だけ読み込まれる。重い処理やパス設定などの環境変数の設定を記述する。
  • 「.zshrc」 : 新しいターミナルウィンドウを開く度に読み込まれる。シェル変数、エイリアス、補完機能などの設定を記述する。

※ 「zshrc」は「zsh Run Commands」の略で、実行されるコマンド群ということ。

※ シェル変数やエイリアスなど、子シェルに引き継ぐ必要が無い設定は「.zshrc」ファイルに記述して一元管理する。

※ bashでは「.bash_profile」ファイルに「.bashrc」ファイルを読み込ませる記述が必要だったが、zshではログインシェル起動時でも「.zprofile」ファイルのあとに自動的に「.zshrc」ファイルが読み込まれるので、連携させるための記述が不要。

 

3. プロンプト用の変数

プロンプトの設定用の主な変数は以下。

  • PS1 : コマンドが読み込まれる前に表示されるプロンプト。
  • PS2 : シェルがコマンドを完了するためにさらに情報を必要とする場合に表示される二次的なプロンプト。
  • PS3 : 選択ループ内で使用される選択プロンプト。
  • PS4 : 実行トレースプロンプト。
  • RPS1 : PS1が左側に表示されるときに、ウィンドウの右端に表示されるプロンプト。(zsh独自の変数。「RPROMPT」でも同じ。)

※ 現在の変数の内容を確認したい場合は、「echo」コマンド(「echo $変数名」)で表示できる。

※ 公式マニュアルの変数の説明の項

 

[ 変数「PS1」について ]

  • 「PS1」は「Prompt String 1」の略。
  • 「PS1」はシェルの伝統的なプロンプト用の変数名で他のシェルとも互換性がある。
  • zshでプロンプト設定によく使用される変数「PROMPT」はzsh独自の名称規格、「prompt」はtcsh由来でzshに採用されている名称規格。
  • 「PROMPT」~「PROMPT4」のそれぞれと「PS1」~「PS4」は同じものとして値が同期される。
  • 「prompt」と「PS1」は同じものとして値が同期される。
  • 「PS1」、「PROMPT」、「prompt」のどれを使用しても同じだが、明示的にzshと分かるので「PROMPT」が使用される傾向がある。

 

 

「.zshrc」ファイルの作成方法

「.zshrc」ファイルをホームディレクトリに作成する方法。

 

(1) 「.zshrc」ファイルがホームディレクトリに存在するかを確認。

※ 自分の環境では、macOSのデフォルト設定だとホームディレクトリに「.zshrc」ファイルは存在していない。

※ 「.zshrc」ファイルが無い場合、「/etc/zshrc」ファイルに記述されているデフォルト用の設定が使用される。

#ファイルを検索
ls -a ~ | grep .zshrc

ls : list segmentsの略。指定したディレクトリ内にあるディレクトリとファイルの一覧を表示するコマンド。オプション「-a」は隠しファイルを含めたすべてのディレクトリとファイルを表示、オプション「-l」だと各ディレクトリとファイルについての詳細情報を表示。

| : パイプ。コマンドの標準出力を別のコマンドの標準入力として繋げる。

grep : テキストファイルから指定した文字列を含む行を検索して、一致した文字列を含んでいる行を表示するコマンド。検索文字列には正規表現も使える。

 

(2) 「.zshrc」ファイルが無い場合はホームディレクトリに作成。

ターミナル上で作成する場合は「touch」コマンドを使う。(Finderでファイルを新規作成しても同じ。)

#ホームディレクトリに移動
cd
#ファイルを生成
touch ~/.zshrc

cd : change directoryの略。指定したパスのディレクトリに移動。引数無しか、ホームディレクトリを意味する「~」(チルダ)を指定するとホームディレクトリに移動。

touch : 指定したディレクトリやファイルのタイムスタンプを変更するコマンド。指定したファイルが存在しない場合はファイルを新規作成する。

 

(3) テキストエディターで「.zshrc」ファイルを開く。

「.zshrc」ファイルの中身は、VimなどのCUIエディターを起動して編集しても、VSCodeなどのGUIエディターで直接編集してもどちらでも同じ。

※ 下記は、ターミナル上でVimで「.zshrc」ファイルを開くコマンド。(Vimの操作方法は前の記事を参照。)

#vimでファイルを開く
vim ~/.zshrc

vim : vimを起動するコマンド。引数を指定した場合、指定ファイルをvimで開く。

 

 

「.zshrc」ファイルにプロンプトの設定を記述

1. プロンプトの表示内容を指定する記述の方法

プロンプトのエスケープシーケンスを使用して変数「PROMPT」に設定を代入する。

「%」でエスケープされた文字列は、中身が該当する内容に展開されて表示される。

※ 公式ドキュメントのエスケープシーケンスの項

 

[ デフォルトのプロンプトの設定 ]

「/etc/zshrc」ファイルに記述されているプロンプトのデフォルト設定。

※ 「ユーザー名@ホスト名 カレントディレクトリを1階層 %」が表示される。

# Default prompt
PS1="%n@%m %1~ %# "

 

[ 任意のプロンプトの設定の記述例 ]

「コマンドの実行番号 日付 時:分:秒 カレントディレクトリを1階層 % 」でプロンプトを表示させる場合の記述。

※ 「PS1」、「PROMPT」、「prompt」のどの変数に設定しても同期されるので同じ。

※ 下記の1行を「.zshrc」ファイルに記述してターミナルを再起動するとプロンプトに反映される。

PROMPT="%h %D{%F %H:%M:%S} %1~ %# "

 

[ テスト表示の方法 ]

「print」コマンドを使用すると、「.zshrc」ファイルに記述する前にその場でテスト表示ができる。

print -P "%h %D{%F %H:%M:%S} %1~ %# "

print : 引数で指定した内容(文字列や変数の値)を標準出力に出力。出力の最後に改行を付ける。オプション「-P」で引数の文字列をプロンプトとして処理する。(%から始まる文字列のエスケープシーケンスを処理して展開する。)

 

主な情報出力のエスケープシーケンス

文字列 出力される内容
%n ユーザー名
%M 完全なホスト名(PCの名前)
%m 最初の「.」の前までのホスト名(「%」のあとに整数を指定するとホスト名の構成要素の表示数を指定可能)
%d フルパスのカレントディレクトリ(「/Users/ユーザー名/」から始まる階層表示) (「%/」でも同じ)
%~ フルパスのカレントディレクトリ(「~」ホームディレクトリから始まる階層表示)
%1~ カレントディレクトリの末尾1階層のみ(「%2~」なら末尾2階層)
%# root権限なら「#」、それ以外のユーザーなら「%」が出力される
%h 履歴でのコマンド実行番号(「%!」でも同じ)
%D 日付(yy-mm-dd)
%W 日付(mm-dd-yy)
%w 日付(曜日-dd)
%T 24時間表記の時刻(HH:MM)
%* 秒を含めた24時間表記の時刻(HH:MM:SS)
%@ AM/PM表記の時刻(HH:MM AM/PM) (「%t」でも同じ)
%D{文字列}

フォーマット指定の日付(以下を任意に組み合わせて「{}」内に記述)
「%Y」 : 西暦4桁(yyyy)

「%y」 : 西暦2桁(yy)
「%m」 : 月2桁(mm)

「%B」 : 環境言語での月名

「%b」 : 環境言語での月名(短縮形)

「%d」 : 日にち2桁(dd)

「%e」 : 日にちが1桁の場合に半角スペースを前に付与(dd)

「%H」 : 24時間表示の時2桁(HH)

「%I」 : 12時間表示の時2桁(HH)

「%M」 : 分2桁(MM)

「%S」 : 秒2桁(SS)

「%p」 : AM/PMの表記

「%A」 : 環境言語での曜日名

「%a」 : 環境言語での曜日名(短縮形)

「%u」 : 曜日の数字(月曜が「1」〜日曜が「7」)

「%w」 : 曜日の数字(日曜が「0」〜土曜が「6」)

「%F」 : ISO形式の日付(yyyy-mm-dd)

※ ホスト名は、GUIの「リンゴマーク」 > 「システム環境設定」 > 「一般」 > 「共有」 > 最下部の「ローカルホスト名」の「編集」で任意に変更できる。

※ 改行を入れたい場合は、変数に代入する値の中に直接改行を入れればそのまま反映される。
※ 改行に該当するエスケープシーケンス自体は無いが、「$”」(ANSI-Cクォーティング)で囲って「\n」(改行コード)を記述することでも改行が実行される。(「$’\n’」と記述する。)

 

2. プロンプトの表示内容に色などの装飾を指定する記述の方法

zshには、太文字、前景色、背景色などで文字を装飾するための独自の記法が用意されている。

※ bashのようにANSIエスケープシーケンスを使う必要は無い。

※ 公式ドキュメントの視覚効果のエスケープシーケンスの項

 

[ 装飾の記述方法 ]

プロンプトの表示内容の装飾は、開始のエスケープシーケンス「%アルファベット大文字」と、終了のエスケープシーケンス「%アルファベット小文字」で囲う。

※ 終了のエスケープシーケンスを記述しない場合、以降に入力した文字やコマンド出力を含めるすべてにそのまま装飾が反映される。

 

[ 文字装飾の記述例 ]

「カレントディレクトリ」の部分だけを太文字にする場合の記述。

※ 太文字にしたい部分を「%B」と「%b」で囲う。

PROMPT="%h %D{%F %H:%M:%S} %B%1~%b %# "

 

[ 色の設定方法 ]

色の指定は、開始のエスケープシーケンス「%F{色}」と、終了のエスケープシーケンス「%f」で囲う。

色の指定方法は以下のいずれか。

  • 色名で指定。(サポートされているのは「black, red, green, yellow, blue, magenta, cyan, white」の8色のみ。)
  • 「0」〜「255」までの10進数の整数で指定。
  • 「#000000」などRGBの16進数で指定。

※ 「xterm 256 color」と互換性のあるターミナルエミュレータの色番号「0」から「255」のカラーチャート。(Wikimedia)

 

[ ターミナルがサポートしている色の確認方法 ]

環境変数「COLORTERM」を確認するとターミナルがサポートしている色数を確認できる。

※ 「24bit」か「truecolor」を返した場合、「2^24 = 16777216色」をサポートしている。(コマンド「echoti colors」でTerminfoデータベースが返す値がこれより小さかったとしても、こちらが正しい。)

print $COLORTERM

 

[ 色装飾の記述例 ]

「カレントディレクトリ」の部分だけを赤の太文字にする場合の記述。

※ 赤にしたい部分を「%F{#ff0000}」と「%f」で囲う。(ここではRGB16進数で指定。)

PROMPT="%h %D{%F %H:%M:%S} %F{#ff0000}%B%1~%b%f %# "

 

主な装飾のエスケープシーケンス

文字列 出力される内容
%B %b 太文字
%U %u アンダーライン
%S %s 色の反転
%F{色} %f 文字色の指定
%K{色} %k 背景色の指定
%E 行末までクリア

 

 

3. メンテナンス性を上げるための記述の方法

メンテナンス性を上げるため、パーツごとにオリジナルの変数で分けて記述し、パラメーター展開「${変数名}」を使用してPROMPTに代入する。

※ 他の既存の変数名と重複しないようにオリジナル性のある変数名を使用する。

※ 「PROMPT」に代入するときは必ず「=”指定内容”」と記述する。(「””」によって中身が文字列ではなく展開されて出力される。)

AG2_Date='%D{%F %H:%M:%S}'
AG2_Dir='%F{#ff0000}%B%1~%b%f'
PROMPT="%h ${AG2_Date} ${AG2_Dir} %# "

 

 

この記事のURL

https://memo.ag2works.tokyo/post-6230/

Copyコピー
この記事のタイトル

zshを使っているターミナルのプロンプトの表示内容をカスタマイズ。 | memo メモ [AG2WORKS]

Copyコピー
この記事のリンクタグ

<a href="https://memo.ag2works.tokyo/post-6230/" target="_blank" rel="noopener">zshを使っているターミナルのプロンプトの表示内容をカスタマイズ。 | memo メモ [AG2WORKS]</a>

Copyコピー
※ フィールドをクリックでコピーするテキストの編集ができます。

この記事へのコメント

コメントの書き込みはまだありません。

  • コメント内のタグはエスケープ処理され、文字列として出力されます。
  • セキュリティーのため、投稿者のIPアドレスは取得されます。
  • 管理者が内容を不適切と判断したコメントは削除されます。
  • このフォームにはスパム対策として、Googleの提供するreCAPTCHAシステムが導入されています。
    (Google Privacy Policy and Terms of Service.)