macOS Catalina が bash から zsh に変わるとお知らせがあったので今更移行して環境を整えた話

私の手元の Mac ではターミナル起動時に随分前から下記のような警告が表示されていました。

```
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
```

様々な Qiita 記事を参考にしつつ、自分用の備忘録として bash から zsh に乗り換えたついでに色々ターミナル環境をカスタムしようと決意したので、作業内容を残しておこうと思いました。

個人的にはサーバオペレーションが多いので、 bash にそろえておきたい気持ちがとてもあります(Tab 補完の感覚とか Completion の感覚)が、仕方ないので。

# カスタム結果

![スクリーンショット 2020-08-30 13.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19717/97e63c40-2e8e-a40f-916c-6d36961388d4.png)

フォントも見やすいし、色も柔らかくて個人的にはイイ感じです。

# 要約

1. ターミナルのスタイルは iceberg
2. フォントは「白源(HackGen)」
3. プロンプトに Starship を採用
4. zsh の設定管理に oh-my-zsh を採用

# 情報収集

まずは情報収集をしました

[お前らのターミナルはダサい](https://qiita.com/kinchiki/items/57e9391128d07819c321)

[iTerm2とstarshipでterminalとshellをお洒落にしました！](https://qiita.com/macololidoll/items/1c369217c6203dd479bd)

[プロンプトを超絶おしゃれにする Starship を紹介](https://qiita.com/unhappychoice/items/3b774310d95e2124eb77)

[【文字幅 半角3:全角5 も追加】Ricty を神フォントだと崇める僕が、フリーライセンスのプログラミングフォント「白源」を作った話](https://qiita.com/tawara_/items/374f3ca0a386fab8b305)

これだけ集まれば、そこそこ便利なターミナル + zsh 環境が整うだろう、とのことでセットアップスタートです

# 端末のスタイルを変更

[お前らのターミナルはダサい](https://qiita.com/kinchiki/items/57e9391128d07819c321) から得た情報として、 iceberg というスタイルがあるため、そちらを使うことにしました。

![スクリーンショット 2020-08-30 13.19.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19717/dd48fae6-6e0b-e4b3-1ad1-1654f868398b.png)

http://cocopon.github.io/iceberg.vim/

こちらからファイルをダウンロードして、スタイルを適用しました。手順は引用元の記事に記載されています。

# starship インストール前に必要なフォントをインストール

[starship の公式サイト]() には「Powerline フォント がターミナルにインストールされて有効になっている必要があります」との記述があるので、Fira Code フォントを試したのですが、個人的には Ricty を採用したかったので、Powerline フォントに対応している RictyDiminished with FiraCode というものを使います

... と言いたいところなのですが、RictyDiminished with FiraCode を starship で利用しようとすると、ブランチ記号の大きさが意図したものと異なるため、「白源 (HackGen)」を利用することにしました。

[【文字幅 半角3:全角5 も追加】Ricty を神フォントだと崇める僕が、フリーライセンスのプログラミングフォント「白源」を作った話](https://qiita.com/tawara_/items/374f3ca0a386fab8b305)

こちらもターミナルのフォントの設定から、「HackGen35Nerd Console Regular 14pt」を選択して設定をしました

# [starship](https://starship.rs/) をインストール

starship は公式サイトにある通り「シェル用の最小限の、非常に高速で、無限にカスタマイズ可能なプロンプト」です。Cross-Shell Prompt という言葉もある通り、zsh だけでなく bash でも対応しています。

こちらは[日本語訳](https://starship.rs/ja-jp/guide/)もありますので、公式サイトの手順で問題ないと思います。brew もありますのでお好みで。

```shell
curl -fsSL https://starship.rs/install.sh | bash
```

これは git で管理しているディレクトリの状態をサッと確認するために導入しました。他にも拡張が増えると良いですね。

# [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh) をインストール

oh-my-zsh は zsh の設定管理フレームワークです。

と、いう位置づけですが、コミュニティが開発した様々な拡張機能の恩恵を受けることができます。

[prezto](https://github.com/sorin-ionescu/prezto) と悩んだのですが、私はよく使う `docker` , `docker-compose` コマンドの completion の公式手順が oh-my-zsh の手順だったため、prezto は諦めました。

[Command-line completion | Docker Documentation](https://docs.docker.com/compose/completion/#zsh)

あと、こういった話もあるようです。(bash のときには `docker exec -it ...` で補完できていましたが、 zsh では `docker exec -i -t ...` としなければならなそうです)

["docker exec" doesn't do container name autocompletion if used with options · Issue #5568 · ohmyzsh/ohmyzsh](https://github.com/ohmyzsh/ohmyzsh/issues/5568#issuecomment-621465117)

# .zshrc をカスタマイズ

```zsh
### ここから上は oh-my-zsh のデフォルトのままなので、カスタムした内容だけ記載してます。

# tab による Auto Completion をしないように NO_AUTO_MENU を指定
setopt NO_AUTO_MENU

# oh-my-zsh から取ってきた適当な LSCOLORS を採用
export LSCOLORS="exfxcxdxbxegedabagacad"

eval "$(starship init zsh)"

export PATH="/usr/local/sbin:$PATH"

# Load rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# Load NVM, if you are using it
[[ -s $HOME/.nvm/nvm.sh ]] && source $HOME/.nvm/nvm.sh
```

https://github.com/ohmyzsh/ohmyzsh/issues/5568

# 最後に

使いたてもいいところですし、個人的に zsh は補完が親切すぎた節があったので食わず嫌いでしたが、これなら bash と遜色ない感じで生活していけそうです。

zsh ならではの便利機能もぜひに活用していきたいですね ◝( ⁰▿⁰)◜ :sparkles: