macOSの標準ターミナルであるzsh
の初期セットアップを備忘録として記載しておく。
設定後のイメージ
【Git管理外フォルダ】
【Git管理フォルダ】(下記はリモート差分3コミット分あり)
前提
この設定は以下の環境で設定した。
- Apple M3 Pro
- Sonoma 14.2.1
- zsh 5.9 (x86_64-apple-darwin23.0)
結論
Homebrew、zsh-completions、zsh-git-promptをインストールする。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install zsh-completions
brew install zsh-git-prompt
~/.zshrc
を編集する。
zstyle ":completion:*:commands" rehash 1
if (( $+commands[arch] )); then
alias x64='exec arch -arch x86_64 "$SHELL"'
alias a64='exec arch -arch arm64e "$SHELL"'
fi
if type brew &>/dev/null; then
FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
autoload -Uz compinit && compinit
source $(brew --prefix)/opt/zsh-git-prompt/zshrc.sh
fi
alias python="python3"
alias pip="pip3"
git_prompt() {
PROMPT="%F{040}%n%f%F{009}[$(arch)]%f ➜ %F{033}%~%f"
if [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = true ]; then
PROMPT="$PROMPT $(git_super_status)"
fi
PROMPT="$PROMPT"$'\n'"%# "
}
precmd() {
git_prompt
}
各手順の解説
Homebrewのインストール
Homebrewとは、macOS用のパッケージマネージャーである。開発に使用するパッケージなどはこれを使用してインストールすることが多いためとりあえず入れておく。
ちなみにLinuxでも使用できるらしい。 (使ったことはない...)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
zsh-completionsのインストール
zsh上でコード補完を強化する。
brew install zsh-completions
~/.zshrc
に次の内容を追加する
if type brew &>/dev/null; then
FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
autoload -Uz compinit && compinit
fi
zsh-git-promptのインストール
ターミナル上に現在のディレクトリのgitの状態を表示する方法は色々あるが、比較的簡単に状態を表示できるzsh-git-prompt
をインストールする。
brew install zsh-git-prompt
インストール後、zsh-git-prompt
のスクリプトの読み込み及び、python
のエリアスを設定する必要がある。
~/.zshrc
に次の内容を追加する。
if type brew &>/dev/null; then
source $(brew --prefix)/opt/zsh-git-prompt/zshrc.sh
fi
alias python="python3"
alias pip="pip3"
実際にターミナル上に表示するにはPROMPT
内でgit_super_status
を展開する必要があるが、これは後で説明する。
新しくインストールしたコマンドを即時認識させる
~/.zshrc
の先頭に次のコマンドを追記する。
zstyle ":completion:*:commands" rehash 1
arm環境とx64環境の切り替えコマンドの設定
Apple Siliconを搭載したMacで、Intel系プロセッサ向けツールを使用する必要がある場合はRosetta 2をする。 コマンドのエリアスを登録しておくと実行環境の切り替えが容易になる。
~/.zshrc
の先頭に次のコマンドを追記する。
if (( $+commands[arch] )); then
alias x64='exec arch -arch x86_64 "$SHELL"'
alias a64='exec arch -arch arm64e "$SHELL"'
fi
これで、x64
でRosetta 2の環境、a64
でApple Siliconの環境に切り替えれる。
プロンプトの変更
ここでいうプロンプトとは、ターミナル上で現在のユーザ名やディレクトリなどの情報を表示する文字列のことである。
PROMPT
環境変数に文字列を設定することで自由にカスタマイズできる。
PROMPT
用の特殊文字列がいくつかある。以下は一例。
PROMPT | Description |
---|---|
%n | ユーザー名 |
%h | ホスト名 |
%~ | カレントディレクトリ |
%# | 一般ユーザーのときは %、root になったときは # を表示 |
参考:
公式doc
【zsh】いろいろなプロンプト表記 まとめ
色の設定については、%F{色名または色番号}
~%f
で囲んだ箇所に色をつける事ができる。
使用可能な色番号は次のスクリプトで確認できる。
(bash/zshで16色(ANSI カラーコード)と256色のカラーパレットを表示)
#!/bin/sh
#
# 256色のカラーパレットを表示する
# bash と zsh にて実行可能
#
target_shell=$1
if [ -z "$1" ]; then
target_shell=$(basename "$SHELL")
fi
if [ "$target_shell" = "bash" ]; then
bash <<< 'for code in {0..255}; do echo -n "[38;05;${code}m $(printf %03d $code)"; [ $((${code} % 16)) -eq 15 ] && echo; done'
elif [ "$target_shell" = "zsh" ]; then
zsh <<< 'for code in {000..255}; do print -nP -- "%F{$code}$code %f"; [ $((${code} % 16)) -eq 15 ] && echo; done'
else
echo "error: Invalid argument ($target)"
echo "Usage: $0 [bash|zsh]"
fi
ユーザ名、実行環境、カレントディレクトリ、gitの状態を表示させるために~/.zshrc
に次のように設定した。
git_prompt() {
PROMPT="%F{040}%n%f%F{009}[$(arch)]%f ➜ %F{033}%~%f"
if [ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = true ]; then
PROMPT="$PROMPT $(git_super_status)"
fi
PROMPT="$PROMPT"$'\n'"%# "
}
precmd() {
git_prompt
}
PROMPT
に設定した、実行環境の情報やgitの状態は、プロンプトそのものの機能ではないため、プロンプトが表示される前に毎回実行しないと現在の状態が表示されない。そのため、zshのprecmd
という、プロンプトを表示する直前に実行されるhook関数に登録しておくことで、最新の情報がプロンプト上に表示されるようにしている。
(zshでhook関数を登録する)