Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブzsh

2019年10月21日 By KD コメントを書く

BashからZshに移行する方法(Mac編)

BashからZshに移行する方法(Mac編)

MacのOSがmacOS Catalinaになるにあたり、標準のシェルがZshになったので、今まで使っていた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.

これはOSが「macOS Catalina」になるにあたり、標準のシェルがBashからZshに変更されたためです。詳細は公式のページに書かれているのですが、この期にBashからZshに移行することにしましょう。

それでは、BashからZshに移行していきましょう!

方針

今回はBashで個人の設定(「.bashrc」や「.bash_profile」)が終わっている前提で、その設定を壊さないようにしつつ、Zshの基本設定を行うことにします。

Zshの基本設定は、Zshのパッケージマネージャーである「zplug」をまず入れ、それからZshのフレームワークである「Prezto」を入れる方針とします。

もちろん「Homebrew」は設定済みですよね。

BashからZshへ移行

移行していきましょう。

Zshを確認する

まずは、MacにZshがインストール済みであることを確認します。

$ which zsh
/bin/zsh
$ cat /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/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

OKですね。

zplugおよびPreztoをインストールする

Homebrewでzplugをインストールし、Preztoをインストールします。テーマは「Dracula」にします。

なお、今回はBashからZshに移行するので問題ないと思いますが、Preztoをインストールすると「.zlogin」「.zlogout」「.zprofile」「.zshenv」「.zshrc」にシンボリックリンクが張られるので、必要であれば事前に対象ファイルを退避しておきましょう。

$ zsh
$ brew install zplug
$ vi ~/.zshrc
# Initialize zplug via brew
export ZPLUG_HOME=/usr/local/opt/zplug
source $ZPLUG_HOME/init.zsh

# Load configuration framework
zplug "sorin-ionescu/prezto"

# Load pachages
zplug "zsh-users/zsh-completions"
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-syntax-highlighting"
zplug "zsh-users/zsh-history-substring-search"

# Load theme file
zplug 'dracula/zsh', as:theme

# Install plugins if there are plugins that have not been installed
if ! zplug check --verbose; then
    printf "Install? [y/N]: "
    if read -q; then
        echo; zplug install
    fi
fi

# Source plugins and add commands to $PATH
zplug load --verbose

# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi

# Customize to your needs...
$ zplug install
$ ln -s $ZPLUG_HOME/repos/sorin-ionescu/prezto $HOME/.zprezto
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

Bashの設定をZshの設定に移行する

「.bash_profile」と「.zprofile」、「.bashrc」と「.zshrc」が対応しているので、内容をコピーします。

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

後は、「.zprofile」および「.zshrc」の中身で動いていないところを修正すればOKです。私が修正したところは「おまけ」を参照して下さい。

シェルをZshに変更する

BashからZshに変更します。

$ chsh -s $(which zsh)

これで移行は完了です。

おまけ

Bashの設定をZshの設定に移行する際に修正した箇所

私の場合は以下の3箇所の修正が必要でした。

1. Bashの補完をZshの補完に変更する

「bash-completion」の設定を削除します。代わりに「zsh-completions」を使うのですが、zplugでインストール済です。

2. プロンプトの設定を変更する

「export PS1=…」のように書いていたら削除します。今回はテーマを「Dracula」にしているので、プロンプトの追加の設定はいりません。

もし自前でプロンプトの設定をしたければ、例えば、公式のGitの「ZshでGitを使う」を参考にして、以下のようにすると、Gitのブランチや状態を好きなように表示させることができます。

export PS1="%10F%m%f:%11F%1~%f $ "
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
RPROMPT="$vcs_info_msg_0_"
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{red}+"
zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'

3. anyenvの設定を変更する

私は複数のプログラミング言語を書く関係で「anyenv」を使っているので、その設定を以下のように変更します。

$ vi ~/.zshrc
...
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init - zsh)"
...

なお、もし「ndenv」を使っている人は、非推奨になったので、「nodenv」に移行しておきましょう。そうしないと「anyenv」のインストールでエラーになる場合があります。(実際fishを試した際にエラーが出ました)

ついでに、「nodenv」の「default-packages」というプラグインが使いやすいので紹介します。anyenv経由でnodenvをインストールした場合は最初から使えます。これを使えば、新しいnodeをインストールするたびに、予め「default-packages」上に指定しておいたモジュールをグローバルにインストールしてくれます。

$ touch $(nodenv root)/default-packages
$ vi $(nodenv root)/default-packages
yarn
nodemon
jest
eslint
tslint
flow-bin
typescript
@babel/core
@babel/cli
webpack-cli
@webpack-cli/init
parcel-bundler
express-generator
create-react-app
@vue/cli
$ nodenv default-packages install --all

便利ですね。

Zsh変更時のエラー対応

Zsh変更時に以下のエラーが出た場合。

「zsh compinit: insecure directories, run compaudit for list.」

対象フォルダの権限を変更することで対応します。

$ compaudit
There are insecure directories:
/usr/local/share
$ chmod -R 755 /usr/local/share
$ compaudit

ZshからFishに移行する方法

Fishとは、「The friendly interactive shell」の事であり、使いやすいと評判のシェルです。しかし、POSIX非互換のため、設定の書き方が大幅に異なります。そのため、BashからZshに移行するのとは異なり、ZshからFishに移行するのはいろいろ書き直しが必要になります。興味がある方は、ざっくり概要をまとめるので、試してみると良いでしょう。

Fishをインストールする

$ brew install fish
$ which fish
/usr/local/bin/fish
$ echo /usr/local/bin/fish | sudo tee -a /etc/shells
Password:
$ cat /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/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish

fisherをインストールする

fisherはFish用のパッケージマネージャーです。

$ fish
$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

パッケージを入れる

適当にパッケージを入れてみます。(好きなパッケージを入れて下さい)

$ fisher add jethrokuan/z
$ fisher add jethrokuan/fzf
$ fisher add oh-my-fish/plugin-peco
$ fisher add decors/fish-ghq
$ fisher add 0rax/fish-bd
$ fisher add edc/bass
$ fisher add oh-my-fish/theme-bobthefish

Zshの設定をFishの設定に移行する

「.zshrc」の内容を「config.fish」にコピーします。

$ cp ~/.zshrc ~/.config/fish/config.fish

後は、地道に以下の修正を行います。

  • zshやzplugの設定を削除する
  • 環境変数を「export PATH=」のような書き方から「set -x PATH」のような書き方に変換する
  • 関数をZshの書き方からFishの書き方に変換する
  • 「anyenv」の読み込みを以下のように修正する (この書き方は頻繁に変わっているので、動かなかった場合は、デフォルトのシェルをFishにした状態で「anyenv init」を実行すれば、その時のanyenvの設定が表示されます)
$ vi ~/.config/fish/config.fish
...
set -x PATH $HOME/.anyenv/bin $PATH
status --is-interactive; and source (anyenv init -|psub)
...

Fishの設定をする

$ fish_config

シェルをFishに変更する

$ chsh -s (which fish)

最後に

いかがでしたか?これで、BashからZshに移行できたことでしょう。後はZshのカスタマイズをすることで、自分色に染めていくと良いでしょう。それでは。

環境

  • PC: macOS Catalina 10.15
  • Homebrew: 2.1.15
  • bash: 3.2.57
  • zsh: 5.7.1
  • zplug: 2.4.2
  • fish: 3.0.2
  • fisher: 3.2.9

カテゴリ : 技術 Tips & Tutorials タグ : bash, mac, prezto, zplug, zsh

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • FacebookログインのJavascriptのSDKをサクッと試す方法
    FacebookログインのJavascriptのSDKをサクッと試す方法
  • SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
    SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
  • [tips][bat] バッチで明日の日付を計算する。
    [tips][bat] バッチで明日の日付を計算する。
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes