Macでターミナルなどでデフォルトで使われるシェルがbashではなくzshになりましたが、設定をどこに記載するか迷います。.zprofileか.zshrcか.zloginのどれに記載するべきでしょうか?本記事は私、個人の好みを大いに含むので参考程度にご覧ください。
少なくとも.zshenvではない
.zshenvはログインシェル、インタラクティブシェル、シェルスクリプト、全てに適用されます。
シェルスクリプトを書いたことがある方ならわかると思いますが、シェルスクリプトは色んな端末に配布されて実行される可能性があります。.zshenvに記載することはシェルスクリプトの動作に影響する可能性があります。シェルスクリプトの作者は、それぞれの端末の設定など考慮できないので、.zshenvの記載は最小限にしておくべきです。
インタラクティブシェルって?
.zprofileと.zshrcは、ログインシェルで使われるのは同じです。
ログインシェルというのは、ターミナルなどのコマンドラインを起動した時に立ち上がるシェルです。なので最も馴染みがあると思います。
違いは、.zshrcはインタラクティブシェルでも使われます。インタラクティブシェルというのは、私は使ったことがないのですが、コマンドライン上で zsh と実行すると始まるシェルとのことです。
ちなみに、現在ターミナルなどで zsh と入力しても何の変化もありません。ただ、 bash と入力するとプロンプトがbash用のものに変化します。
1 2 3 4 5 6 |
% bash 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. bash-3.2$ |
もしかしたらデフォルトのシェルがbashの場合は、 zsh と入力するとプロンプトが変化するかもしれません。
おそらく、インタラクティブシェルとはデフォルトのシェルとは違うタイプのシェルを使う際に起動するシェルということかもしれません。
で、インタラクティブシェルって使う機会ある?って思います。使う機会がないもののために設定する必要がないので、.zshrcではなく.zprofileに設定を記載すべきかなと私は思います。
.zloginって?
.zprofileと同じくログインシェルにだけ適用されるものに.zloginがあります。.zloginではなく、.zprofileを使う理由はあるのでしょうか。多くの記事で、.zloginではなく.zprofileを使っている理由がわかりませんでした。
読み込まれる順番が.zloginのは一番最後になります。これが使わない理由になっているかはわかりませんが、当方もここは多数派に合わせて.zprofileを使うことにしました。
さいごに
.zprofileにせよ.zshrcにせよ.zloginにせよ、ドットで始まる設定ファイルはまとめてgitで管理するのがおすすめです。そのためにdotfilesというディレクトリを作って管理するのが主流となっています。そのシンプルな方法を以下で説明しています。