[Mac]Zshでoh-my-zshからPreztoに切り替える

# はじめに
シェル環境はZsh派ということもあり、これまで環境をイイ感じに構築してくれる [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)  を入れていました。

が、oh-my-zsh インストール後、環境設定もほぼデフォルトの状態で使用。
メンテナンスも満足にしておらず、当時のインストール時の備忘録も残さないまま、勢いで入れてそのままズルズル使用していたので、一発奮起して <strong><font color="red";>Prezto</font></strong> に乗り換えてみます。
[Prezto - Instantly Awesome Zsh](https://github.com/sorin-ionescu/prezto)

先人の知恵でたくさん記事があります。参考にさせていただきました。
https://blog.andooown.dev/post/2018/02/prezto/
https://qiita.com/Angelan1720/items/60431c85592fe90fcdd5
https://dev.classmethod.jp/tool/zsh-prezto/

# oh-my-zsh や Prezto ってそもそも何なの
oh-my-zsh や Prezto は、Zshでラクに環境構築を行うための**フレームワーク**です。
一から自分で設定することもできますが、こういったものを利用することで、比較的手軽に環境を構築することが可能になります。


> oh-my-zsh はオワコンで古い！とかいろんな意見を見ますが、依然人気は人気みたい。機能豊富だしいろいろできるもんね。
[9 Best ZSH configuration frameworks as of 2019 - Slant](https://www.slant.co/topics/5827/~zsh-configuration-frameworks)

# 前提条件
今回の自分の環境です。
この環境下で Prezto に切り替えていきます。

* ターミナル： <strong><font color="red";>iTerm2</font></strong> を利用
* <strong><font color="red";>Homebrew/Homebrew Cask</font></strong> によるパッケージ管理
* oh-my-zsh 適用済み
* Zsh は Homebrew でインストール済み


## 完全クリーンな状態から Prezto をインストールする場合
概ね以下のような手順になるかと思います。

* Homebrew をインストール (入っていない場合)
* Zsh をインストール

> Homebrew の使用に関しては好みがあると思うので、必須ではないです

## 前段階における注意点
.zshrc などにカスタムで環境設定を入れている場合は既存のものを流用してもいいかも。
わたしはそこまで環境設定を追加していなかったので、完全にリプレースしました。

ただ有事の場合にロールバックができるように、念のため、設定ファイルとヒストリはバックアップを取っておきます。

```shell:
-> % mkdir bkdir && mv .zsh* bkdir
-> % ll -A bkdir
total 632
-rw-------  1 user  staff   309K  5  6 10:36 .zsh_history
-rw-r--r--  1 user  staff   2.9K 10  4  2018 .zshrc
```

# 切り替え手順
## oh-my-zsh のアンインストール
アンインストールはコマンドがあります。README参照。

```shell:
-> % uninstall_oh_my_zsh
Are you sure you want to remove Oh My Zsh? [y/N] y
Removing ~/.oh-my-zsh
Looking for original zsh config...
Switching back to bash
Changing shell for user.
Password for user:
Thanks for trying out Oh My Zsh. It's been uninstalled.
```

アンインストールが完了しました。
ターミナルを再起動すると、 bash になってます。

```shell:
$ echo $SHELL
/bin/bash
```

## Prezto のインストール
zshに切り替え。

```shell:
$ zsh
```

Prezto のREADMEに書いてあるように、リポジトリをcloneしてきます。

```shell:
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
```

以下のコマンドを実行すると、各種設定ファイルのシンボリックリンクが生成されます。
この時点ですでに存在しているファイルがあると、そのファイルに関してはリンクが生成されません。

```shell:
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```

```shell:
lrwxr-xr-x  1 user  staff      37  5  6 11:01 /Users/userDir/.zlogin -> /Users/userDir/.zprezto/runcoms/zlogin
lrwxr-xr-x  1 user  staff      38  5  6 11:01 /Users/userDir/.zlogout -> /Users/userDir/.zprezto/runcoms/zlogout
lrwxr-xr-x  1 user  staff      40  5  6 11:01 /Users/userDir/.zpreztorc -> /Users/userDir/.zprezto/runcoms/zpreztorc
lrwxr-xr-x  1 user  staff      39  5  6 11:01 /Users/userDir/.zprofile -> /Users/userDir/.zprezto/runcoms/zprofile
lrwxr-xr-x  1 user  staff      37  5  6 11:01 /Users/userDir/.zshenv -> /Users/userDir/.zprezto/runcoms/zshenv
lrwxr-xr-x  1 user  staff      36  5  6 11:03 /Users/userDir/.zshrc -> /Users/userDir/.zprezto/runcoms/zshrc
```

### .zshrc の設定を流用したい場合
いったん既存ファイルは退避しておいて、差分だけをあとから Prezto の .zshrc に追記する形がいいかも。

試しにdiff取ってみましたが、なんだこれ。。
Prezto は超絶シンプルすぎる環境設定。
中略部分は何十行も oh-my-zsh の設定が入ってる部分です。
やっぱり oh-my-zsh はオーバースペックすぎたかな。
> あと .zshrc にベタで書き込まれるパラメーターが多い。
> oh-my-zsh のパラメーターファイルみたいなのがどっかにあって、それをincludeするとシンプルになりそうな気がする (主観です

```shell:
$ diff -u ~/bk_zsh/.zshrc ~/.zshrc                                                  
--- /Users/user/bk_zsh/.zshrc	2018-10-04 13:38:32.000000000 +0900
+++ /Users/user/.zshrc	2019-05-06 10:53:24.000000000 +0900
@@ -1,92 +1,13 @@
-# Path to your oh-my-zsh installation.
-export ZSH=/Users/user/.oh-my-zsh
-
-# Set name of the theme to load.
-# Look in ~/.oh-my-zsh/themes/
-# Optionally, if you set this to "random", it'll load a random theme each
-# time that oh-my-zsh is loaded.
-ZSH_THEME="candy"

　・・・ 中略 ・・・

+# Executes commands at the start of an interactive session.
+#
+# Authors:
+#   Sorin Ionescu <sorin.ionescu@gmail.com>
+#
+# Source Prezto.
+if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
+  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
+fi
+# Customize to your needs...
```

インストールが完了したので、ログインシェルを Homebrew の Zsh に変更し、ターミナルを再起動します。

```shell:
$ chsh -s /usr/local/bin/zsh
```

### 補足：ログインシェル変更時のエラー
ログインシェルを変更する時に以下のように `non-standard shell`とエラーが出てしまう場合。
/etc/shells に Homebrew の Zsh のパスを追記することでエラーを解消することができます。

```shell:
$ chsh -s /usr/local/bin/zsh
Changing shell for user.
Password for user:
chsh: /usr/local/bin/zsh: non-standard shell
```
```shell:/etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/zsh  // Homebrew の Zsh のパスを追記
```

再起動後にシェルが変更されていることを確認します。

```shell:
~ ❯❯❯ echo $SHELL
/usr/local/bin/zsh
```
> oh-my-zsh で入ってたaliasのバックアップ忘れた…と思ったけど、 Prezto インストール後のalias確認したら普段よく使うコマンドの短縮形は入ってるから問題なさそう


## テーマの設定
さて、肝心のテーマですが、Prezto には<strong><font color="blue";>promptコマンド</font></strong>というものがあり、オプション **-p** をつけることでテーマのプレビューが表示されます。

```shell:
~ ❯❯❯ prompt -p
```

変更後のイメージがしやすくて良い。  
<img width="767" alt="2019-05-06 14-27-54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73604/a1cef2bd-28b4-6377-a5bc-6c59357f27c4.png">
                                                                        
powerlineの人をけっこう見かけるのでpowerlineが人気なのかな。
<img width="767" alt="2019-05-06 14-30-37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73604/eb6293e2-b790-d511-e1f4-6b89b07adf76.png">

でもわたしはparadoxにします。
デフォルトがsorinになっているので、 .zpreztorc を編集してコメントアウトor上書きします。

```shell:~/.zpreztorc
#zstyle ':prezto:module:prompt' theme 'sorin'
zstyle ':prezto:module:prompt' theme 'paradox'
```

どのようなテーマがあるかはここを見るとわかりやすいかも。
[Customizing Your Prezto Prompt - Mike Buss](https://mikebuss.com/2014/04/07/customizing-prezto/)

## テーマ適用時の注意点
上記記事のNoteに`you’ll need a Powerline-patched font.`と書いてある通り、paradoxをテーマとして適用する時は、Powerline用のフォントを使わないといけないみたいです。

Powerline用のフォントについてはこちら。
[GitHub - powerline/fonts: Patched fonts for Powerline users.](https://github.com/powerline/fonts)

## Powerline用のフォントの適用
ということで、わたしは **Source Code Pro** を選択しました。
フォントのインストール方法は`git clone`だったり諸方法あるのですが、わたしは <strong><font color="red";>brew-cask-fonts</font></strong> が入っている環境なので、これを使ってインストールします。

```shell:
❯ brew cask info font-source-code-pro-for-powerline                                 [12:28:41]
font-source-code-pro-for-powerline: latest
https://github.com/powerline/fonts/tree/master/SourceCodePro
Not installed
From: https://github.com/Homebrew/homebrew-cask-fonts/blob/master/Casks/font-source-code-pro-for-powerline.rb

　・・・以下略・・・

❯ brew cask install font-source-code-pro-for-powerline
```

インストールできたら、 iTerm2 のフォントの設定で <strong><font color="blue";>Source Code Pro for Powerline</font></strong> を選択して完了です。
<img width="599" alt="2019-05-06 14-45-09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73604/f505e9f6-6b7c-a887-f670-a22732f56d4e.png">

# おわりに
とりあえずこれで使ってみて、もうちょっと便利にしたいなーと思ったら適宜調整していきます。
あと oh-my-zsh の残骸もお掃除しないと…