
クラウド事業推進部の石倉です。
私も最近まで意識したことがなかったのですが、現在参画しているプロジェクトで他メンバーの方のターミナルプロンプトを見た時に「見やすいな」と思ったのがこのブログを書こうと思ったきっかけです。 少し前の私と同じように気にしたことなかった方の興味のきっかけになったらと思います。
私は普段はMacを使って開発していますがWindowsについても紹介します。 各設定値について説明するわけではなく私が設定している例を紹介する内容です。
初期のターミナルプロンプト(Mac)

カスタマイズしたターミナルプロンプト(Mac)

Mac環境のターミナルプロンプト
Macは標準のターミナルと、Oh My Zshというフレームワークを利用しています。
Oh My Zshはインストールも簡単で、インストールした後は好きなテーマを読み込むだけでターミナルプロンプトを変更することができます。
## .zshrcファイル # If you come from bash you might have to change your $PATH. # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH # Path to your Oh My Zsh installation. export ZSH="$HOME/.oh-my-zsh" # Set name of the theme to load --- if set to "random", it will # load a random theme each time Oh My Zsh is loaded, in which case, # to know which specific one was loaded, run: echo $RANDOM_THEME # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes ZSH_THEME="robbyrussell" ⭐️好きなテーマに変更する ... ...
テーマはたくさんあるので気に入ったものを選んで設定してみてください。
私はこれ!とドンピシャなテーマがなかったので複数のテーマからいいとこ取りした自分のテーマを作り使っています。テーマは.oh-my-zsh/themes/配下にあるのでそこに自分で新しくテーマを作成して上記.zshrcファイルで読み込みます。
以下はデフォルトのrobbyrussellテーマを元にapple, simpleテーマの設定を組み合わせています。
function toon {
echo -n ""
}
PROMPT="%{$fg[magenta]%}$(toon)%{$reset_color%} %{$fg[cyan]%}%~%{$reset_color%}"
PROMPT+=' $(git_prompt_info)%{$reset_color%}'
RPROMPT=[%T]
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[red]%}("
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg_bold[red]%}) "
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN=" %{$fg[green]%}✔"
表示は最初にお見せしたカスタマイズしたターミナルプロンプトのようになります。
commitされてない変更がある場合は以下のようにブランチ名の横の表示が変わります。

例えばVSCodeで開けばこれらのどのブランチにいるかやgitステータスの状態については分かりますが、ターミナルからも視覚的に分かるのは良いなと感じています。
Windows環境のターミナルプロンプト
WindowsはGit Bashを利用しています。 Git BashはWindows用のGitをインストールする際についてきます。
インストールして立ち上げてみると既にいい感じなターミナルプロンプトになっています。

/etc/profile.d/git-prompt.shで上記の表示の設定がされているので見てみます。
if test -f /etc/profile.d/git-sdk.sh
then
TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
TITLEPREFIX=$MSYSTEM
fi
if test -f ~/.config/git/git-prompt.sh
then
. ~/.config/git/git-prompt.sh
else
PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[32m\]' # change to green
PS1="$PS1"'\u@\h ' # user@host<space>
PS1="$PS1"'\[\033[35m\]' # change to purple
PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
PS1="$PS1"'\w' # current working directory
if test -z "$WINELOADERNOEXEC"
then
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[36m\]' # change color to cyan
PS1="$PS1"'`__git_ps1`' # bash function
fi
fi
echo $COMPLETION_PATH
PS1="$PS1"'\[\033[0m\]' # change color
PS1="$PS1"'\n' # new line
PS1="$PS1"'$ ' # prompt: always $
fi
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
# Evaluate all user-specific Bash completion scripts (if any)
if test -z "$WINELOADERNOEXEC"
then
for c in "$HOME"/bash_completion.d/*.bash
do
# Handle absence of any scripts (or the folder) gracefully
test ! -f "$c" ||
. "$c"
done
fi
~/.config/git/git-prompt.shがあればそっちを読み込むような設定になっているのでそのファイルを用意してカスタマイズします。
以下のようにカスタマイズしてみました。
## ~/.config/git/git-prompt.shファイル
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
PS1='\[\033[0m\][\A] \[\033[35m\]\u \[\033[36m\]\w'
if test -z "$WINELOADERNOEXEC"
then
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[31m\]`__git_ps1`'
fi
fi
PS1="$PS1"' \[\033[0m\]$ '
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
# Evaluate all user-specific Bash completion scripts (if any)
if test -z "$WINELOADERNOEXEC"
then
for c in "$HOME"/bash_completion.d/*.bash
do
# Handle absence of any scripts (or the folder) gracefully
test ! -f "$c" ||
. "$c"
done
fi

こちらもaddされてない変更やcommitされてない変更がある場合はブランチ名の横の表示が変わり状態が分かります。便利!

最後に
ターミナルプロンプト、カスタマイズしてみる?
参考
Controlling the Prompt (Bash Reference Manual)
git/contrib/completion/git-prompt.sh at master · git/git · GitHub