【今更】zshデビュー:bashからの移行体験記
はじめまして。nemunekoです=^_^=
長い間、私はbashを使い続けてきました。特に不満もなかったしね。
でも、最近勉強会とかでさまざまなツールやコマンドなどをいる機会があり、その中で「zsh」というシェルが紹介されていたので触ってみました。
今回は、zshへの移行手順と簡単な所感を書いてみました。
それではどうぞ。
zshのインストール
私の環境はUbuntu on WSLなので、aptコマンドでサクッとインストールしました。
# パッケージリストを更新して
sudo apt update
# zshをインストール!
sudo apt install zsh
インストールが終わったら、デフォルトのシェルをbashからzshに変更します。
# デフォルトシェルをzshに変更
chsh -s $(which zsh)
この後、ターミナルを再起動すると、zshの初期設定ウィザードみたいなものが始まるんですが、今回はあえて手動で設定していくことにしました。
その方がおもしろそうだし。
.zshrcのセットアップ
ターミナルを再起動した際に~/.zshrcというファイルが作られていない場合は、手動で作成します。
touch ~/.zshrc
このファイルに設定を書き込むことで、zshを自分好みにカスタマイズしていきます。bashの.bashrcと同じですね。
今回は、私が特に便利だと感じた設定をいくつか紹介します。
1. 基本設定と強力な補完機能
まずは、基本的な設定と、zshの代名詞ともいえる強力な補完機能を有効にします。
# ~/.zshrc
# ======= 基本設定 =======
# 日本語ファイル名を扱えるようにする
setopt extended_glob
# バックグラウンドジョブの終了をすぐに通知する
setopt notify
# ======= 履歴(history)設定 =======
HISTFILE=~/.zsh_history # 履歴ファイルの場所
HISTSIZE=10000 # メモリに保存する履歴の件数
SAVEHIST=10000 # 履歴ファイルに保存する件数
setopt hist_ignore_dups # 直前のコマンドと同じ場合は履歴に追加しない
setopt share_history # 複数のターミナルで履歴を共有する
# ======= 補完機能の有効化 =======
# compinitを自動で読み込む
autoload -U compinit
compinit
# 補完で大文字小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# 補完で選択できるようにする
zstyle ':completion:*' menu select interactive
setopt menu_complete
2. ディレクトリ移動の高速化
zshはディレクトリ移動がとても快適になります。bashにはない便利な機能を設定してみました。
# ======= ディレクトリナビゲーション =======
# ディレクトリ名だけでcdできる
setopt auto_cd
# cd時に自動でディレクトリスタックに追加
setopt auto_pushd
# 重複したディレクトリをスタックに追加しない
setopt pushd_ignore_dups
# ディレクトリスタックを一覧表示するエイリアス
alias d='dirs -v'
3. ちょっと便利な自作関数とエイリアス
日々のちょっとした手間を省くための関数やエイリアスを追加します。
# ======= 便利な関数とエイリアス =======
# mkdirしてすぐにcdする
function mkcd() {
mkdir -p "$1" && cd "$1"
}
# ファイル名やディレクトリ名で検索する
function ff() {
find . -type f -name "*$1*"
}
function fd() {
find . -type d -name "*$1*"
}
# 各サブディレクトリのサイズを表示
function duh() {
du -h --max-depth=1 | sort -hr
}
# よく使うコマンドのショートカット
alias ls='ls --color=auto'
alias ll='ls -lF'
alias la='ls -laF'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
# Git用のエイリアス
alias gs='git status'
alias ga='git add'
alias gc='git commit -m'
alias gp='git push'
alias gl='git log --oneline --graph --decorate'
mkcdは、ディレクトリを作ってすぐにその中に移動するという、誰もが一度は面倒に感じたであろう操作を一つにしてくれます。地味ですが、使う頻度が高いので効果は絶大です。
4. WSL連携 (Windowsユーザー向け)
私はWSL環境で開発しているので、Windowsとの連携も設定しました。
# ======= WSL連携 =======
# WSL環境かどうかを判定
if grep -qEi "(Microsoft|WSL)" /proc/version; then
# Windowsのエクスプローラーで現在のディレクトリを開く
alias open='explorer.exe .'
# Windowsのクリップボードにコピー
alias clip='clip.exe'
fi
openと打てばエクスプローラーが開き、cat file.txt | clipのようにすればファイルの中身をWindowsのクリップボードにコピーできます。
5. Gitブランチが見えるプロンプト
最後に、開発者には必須のGitブランチ情報をプロンプトに表示させます。
# ======= プロンプト設定 =======
# vcs_info(バージョン管理システム情報)を有効にする
autoload -Uz vcs_info
# プロンプトでvcs_infoを使えるようにする
setopt PROMPT_SUBST
# vcs_infoのフォーマットを設定 (ブランチ名の前に "git:" を表示)
zstyle ':vcs_info:git:*' formats ' on %F{yellow}git:%b%f'
# プロンプトが表示される前にvcs_infoを呼び出すフック
precmd() { vcs_info }
# プロンプトの見た目を設定
# 書式: ユーザー名(緑) カレントパス(シアン) vcs情報 $
PROMPT='%F{green}%n%f@%F{blue}%~%f${vcs_info_msg_0_} $ '
プラグインの導入
zshのすごいところは、便利なプラグインでどんどん賢くできること。
bashでも似たようなことはできたかもしれないけど、zshは導入がすごく簡単でした。
今回は、特に評判のいい2つのプラグインを入れてみます。
-
zsh-syntax-highlighting: 入力中のコマンドが正しければ緑、間違っていれば赤で表示してくれる。これでタイプミスがわかりやすい -
zsh-autosuggestions: 過去のコマンド履歴から入力しそうな候補を薄い文字で提案してくれる。結構便利
git cloneでプラグインをダウンロードしてきます。
# プラグインを置いておくディレクトリを作成
mkdir -p ~/.zsh/plugins
cd ~/.zsh/plugins
# zsh-syntax-highlighting (コマンドに色付け)
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
# zsh-autosuggestions (過去のコマンドを予測して表示)
git clone https://github.com/zsh-users/zsh-autosuggestions.git
この時点ではまだただのファイルなので、.zshrcっていうzsh用の設定ファイルに有効化の文言を追加する必要があります。
以下の有効化設定を~/.zshrcに追記します。
# ======= プラグイン =======
# シンタックスハイライト
source ~/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# コマンド予測
source ~/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
# 予測文字色の調整
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
所感
設定が一通り終わったターミナルを使ってみました。
一言でいえば「便利すぎ!」ですね。パスの自動補完とかコマンド補完とかが使いやすすぎる。
- コマンドの色分け
sudoやgitが緑色に光るだけで、こんなに安心感があるなんて。存在しないコマンドを打つと赤くなるので、実行前にミスに気づけます。bash時代、何度タイプミスでエラーを出したことか…=TェT= - Tabキー補完が賢い
zshは候補をリスト表示してくれて、矢印キーで選べるんです。これが地味に快適
今更ですが、いつも使うものを整備する大切さを肌で感じました(遅い)
もう少し込み入った設定も今後していきたいですね。
もっと簡単な方法:oh-my-zsh
ここまで手動で色々設定してきたお話をしてきましたが、実は「oh-my-zsh」という超便利なフレームワークがあります。これを使えば、今回紹介したようなプラグイン管理もテーマの切り替えも、もっと簡単にできるみたいです。
じゃあなんで手動でやったの?って話なんですが…
今回、あえて手動で設定してみたのは、bashから乗り換えるにあたって、zshが裏側で何をやっているのか、ちゃんと自分の手で触って理解したかったからです。
調べてみた感じ、oh-my-zshは機能が多すぎて、zshとbashの違いとか設定の内容とかを把握しきれない気がしていたので、今回は導入を避けました。
まとめ
実際にzshに触れてみると、強力な補完機能、見やすいシンタックスハイライト、そして拡張性の高いプラグインなど、いろいろとできて楽しいですね。
シェルが使いやすくなるだけで、開発の速度やモチベーションが変わってくるので、移行してよかったと感じました=^ω^=
もしzshを試したことのない方がいれば、これを機に触ってみるのはいかがでしょうか。
それでは、また次の記事で。nemunekoでした=^_^=
Discussion