Help us understand the problem. What is going on with this article?

Macでbashからzshへお引越しする方法

お断り

筆者はbashにもzshにも疎いです。そして、この記事はmacOSが対象です。
そしてそして、n番煎じの記事です(n>2)
予めご了承ください。

前置き

前日のWWDC2019にて、 macOS Catalinaが発表されたのはこの記事を読まれている皆さんの記憶にも新しいかと思います。

ところで、macOS Catalinaからは、新規ユーザーの設定時にデフォルトのログインシェルが bash から zsh になるようです。参考リンクはこちら

ということで、これを機に母艦であるMacにてbashからzshに 可能な限り既存の設定を引き継いで zshに乗り換えつつ、良い感じに整えてみたので、自分が行った手順を残しておこうかと思います。
参考になれば幸いです。

前提環境

筆者が行った際の環境は以下の通りです。
macOS 10.14.5 (Mojave)
iTerm2 3.2.9
Homebrew 2.1.4導入済み

また、これまでzshをインストールしたことがない環境への導入を行うものとして説明を行います。

セットアップ手順

前提環境にもあるように、ここでの手順はHomebrewを導入していることを前提に手順を記します。
また、以下の説明にて実行するコマンドの先頭には$をつけています。

1. zshをインストール

zshに乗り換えるので、これがないと始まりません。
Homebrew経由でzshをインストールします。

$ brew install zsh

2. zsh-completionをインストール

zshの補完機能を強化するzsh-completionをインストールします。

$ brew install zsh-completion

インストール後、設定を行うよう促される表示が出ますが、一旦無視します。

3. zshを起動してセットアップしてみる

おもむろに以下のコマンドでzshを起動します。

$ zsh

すると、以下のような表示が出るかもしれません。

This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses --- 

この表示が出た場合、1をタイプします。
続けて、以下のような表示になります。

Please pick one of the following options:

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

(2)  Configure the new completion system.  (Recommended.)

(3)  Configure how keys behave when editing command lines.  (Recommended.)

(4)  Pick some of the more common shell options.  These are simple "on"
     or "off" switches controlling the shell's features.

(0)  Exit, creating a blank ~/.zshrc file.

(a)  Abort all settings and start from scratch.  Note this will overwrite
     any settings from zsh-newuser-install already in the startup file.
     It will not alter any of your other settings, however.

(q)  Quit and do nothing else.  The function will be run again next time.
--- Type one of the keys in parentheses ---

この表示で、0をタイプします。

すると、コメントのみの~/.zshrcが作成されますが、これを削除します。(理由は後ほど)

$ rm ~/.zshrc

zshを起動したまま、次の手順に進みます。

4. Preztoをセットアップ

zshの設定フレームワークと謳っているPreztoをセットアップします。
PreztoのリポジトリのREADMEに従い、セットアップを行います。
先の手順でzshは起動してありますので、README中の手順1は飛ばします。

以下のコマンドを実行します。

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

処理に時間がかかりますがしばらく待ちます。
終わったら、そのまま次のコマンドを実行します。

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

このコマンドにより、Prezto側でよしなに設定ファイルを作成してくれるようです。(先程削除した.zshrcも含まれます)

その後、以下のコマンドを実行します。
これで、zsh起動時にzsh-completionを読み込む準備が整います。

$ echo 'fpath=(/usr/local/share/zsh-completions $fpath)' >> .zshrc

5. ログインシェルを変更する

新規タブ/ウインドウにてデフォルトでzshを起動するよう、ログインシェルをzshに変更します。

まず、インストールしたzshをログインシェルとして使用できるようにします。
/etc/shellsをお好みのエディタで編集します。スーパーユーザでないと書き込めないため、sudoで実行します。

$ sudo vi /etc/shells

以下の記述を最後の行に追記し、保存します。

/usr/local/bin/zsh

その後、以下のコマンドを実行することでログインシェルがzshに変更されます。

$ chsh -s /usr/local/bin/zsh

6. 設定を整える

.bash_profile.bashrc を引き継ぎます。(他に設定ファイルがある場合、以下を参考によしなに引き継ぎます)
が、.zprofile.zshrcは既にこれまでの手順でお膳立てされているので、追記する形で内容を引き継ぎます。
(ミスってここまでお膳立てした設定ファイルを失わないよう、バックアップを取るといいかもしれません。)
自分の試した範囲では、ほぼ全部引き継げていましたが、この手順の結果に関しては各自の環境に依るかと思われます。

$ cat .bash_profile >> .zprofile
$ cat .bashrc >> .zshrc

確認のため、新規タブもしくは新規ウインドウを開きます。
先の手順でログインシェルを変更したため、zshが立ち上がるかと思います。
が、もしかすると、起動時にエラーが出てきたりするかもしれません。
エラー文などを参考に、.zshrc.zprofile等をよしなに編集し、エラーの解消に努めたりします。(完全に解消できないかもですが、環境に依りますので悪しからず...)

終わりに

補完機能がbashのときよりもつよく、良い感じです。
まだ使い始めたばかりなので、zshを使いこなせるよう頑張ります。

間違い等あるかもしれません、その際はコメントや編集リクエストでご指摘いただければ幸いです。

参考リンク

作業するにあたり、以下の文献を参考にしました。
bashからzshに移行したときのメモ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away