My Dev#004 Shell
最も重要な選択
今回はシェルの話です!楽しみ!
僕が使用しているのはZshですので,基本的にはその話になります.
What is "Shell"?
シェル(Shell) とはユーザとOS(カーネル)の間を取り持つインターフェイスとしての役割を持つソフトウェアです.貝殻(Shell)が中身(カーネル=OSの核)を包み込んでいる構造に由来して名付けられました.
代表的なシェルとして以下が挙げられます.
- Bash (Bourne Again Shell): Linuxディストリビューションの多くで標準採用されているデファクトスタンダード.サーバー環境やシェルスクリプト実行基盤として不動の地位を保っています.
- Zsh (Z Shell): macOSのデフォルトシェルとして採用されており,高いカスタマイズ性と強力な補完機能,豊富なプラグインエコシステムを持つ人気シェルです.
- Fish (Friendly Interactive Shell): 面倒な初期設定をしなくても,導入直後から自動補完やシンタックスハイライトが快適に動く,対話型操作に特化したモダンなシェルです.
- Nushell (Nu): Rust製で開発され,コマンドの出力をテキストではなく「構造化データ(表形式)」として扱い,現代的なデータ操作ができる次世代シェルです.
シェルごとに設定の自由度,補完の強力さ,エコシステムが大きく異なり,日々の作業効率や開発体験を左右する重要な選択となります.
個人的には,開発環境を整える上で最も優先するべきところだと考えています.「開発環境とかLinuxとか興味ないです」という人でも,最低限シェルだけはカスタマイズすることをおすすめします.特にMacOSのユーザはデフォルトのシェルがZshですので,今回の記事を参考にしていただければと思います.
Why Zsh?
数ある選択肢の中から最終的に Zsh をメインシェルとして選んだ理由は以下です.
- Bashに近い仕様
- 拡張性
- 豊富な情報
要するにスタンダードなので使いやすくて色んなことができるということです.特に拡張性については群を抜いています.ここからは拡張機能について書きます.
Plugin Manager
プラグイン(拡張機能)を導入するにはそれらを管理するプラグインマネージャが必要です.有名なのはSheldonです.
Sheldonは拡張機能をTOMLファイルで管理できる(らしい)ので,.zshrc(Zshの設定ファイル)を汚さないところが良いところです.また,BashやFishにも使えるらしいのでそこが魅力ですね.
ただし,僕としてはzshの設定は.zshrcで済ませたいという(謎の)こだわりがあったのと,Rust製のSheldonをインストールするのが絶妙に面倒だったので,Sheldonの導入は断念しました.そこで僕が選んだのがZplugです.
ZplugはSheldonと違い,.zshrcで設定を記述します.なので別ファイルを管理する必要はありません.僕の場合Zplugのインストール用スクリプトも.zshrc内に記述しているので,Zshに関連するすべての設定が.zshrcで完結しています.ただその分プラグインが増えると起動時間が遅くなる可能性があるのと,そもそもZplugはあまりモダンな選択肢ではないので,今後変更するかもしれません.
以下に私のZplugの設定スクリプトを記載します.
# install and initialize zplug
export ZPLUG_HOME="$HOME/.zplug"
if [[ ! -d "$ZPLUG_HOME" ]]; then
curl -L --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh
echo "Installation completed! Restart your terminal."
else
source $ZPLUG_HOME/init.zsh
# install plugins
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-syntax-highlighting"
zplug "zsh-users/zsh-completions", defer:2
zplug "romkatv/powerlevel10k", as:theme, depth:1
if ! zplug check --verbose; then
printf "Installing plugins...\n"
zplug install
fi
# load plugins
zplug load
fi
Plugins
次に僕が導入しているプラグインについて1つずつ解説していきます.
1. zsh-autosuggestions
過去に入力したコマンド履歴をもとに,入力中の文字列の続きを薄いグレー文字でリアルタイムにサジェスト(推測表示)してくれるプラグインです.
長い引数やディレクトリパスを毎回最後まで入力する必要がなくなり,→ キー(右矢印キー)を押すだけで補完を確定できます.
これはマジで使ってほしい.イメージは以下です.かなり効率が良くなります.

2. zsh-syntax-highlighting
コマンドラインに入力した文字列をリアルタイムに色分け(構文解析)してくれるプラグインです.
正しいコマンドが存在する場合は緑色,スペルミスや存在しないコマンドの場合は赤色でハイライト表示されるため,Enter を押す前にタイポ(誤字)に気付けます.
こんな感じ


3. zsh-completions
Zsh 標準の補完機能をさらに強化し,公式にはサポートされていない多数の外部コマンド(Git,Docker,クラウドCLIツールなど)のタブ補完定義を追加してくれるプラグインです.
Tabキーを押した際に表示される候補が大幅に増え,コマンドラインでの探索的な作業が快適になります.
4. powerlevel10k
プラグインと合わせて設定しているのが,Zsh のテーマ powerlevel10k です.
Git のブランチ情報や実行ステータス,実行時間などを美しくプロンプト上に表示してくれます.初回起動時にインタラクティブな設定ウィザード(p10k configure)が立ち上がるため,好みの見た目やアイコン表示を直感的に選択してセットアップできます.
有名なOh my zsh!はあまり肌に合わなかったのでこれを使ってます.シンプルでかっこいいので気に入っています.
p10kなしだとこんな感じ

p10kありだとこうなる.Gitのブランチの情報や,追加ファイル,変更されたファイルなどがひと目で確認できる.

.zshrc
設定ファイルの管理方法についてです.僕は機能ごとにモジュール化しています.
.
├── .zsh
│ ├── .fzf.zsh # fzf(ファジーファインダー)の設定
│ ├── .p10k.zsh # Powerlevel10k のプロンプト設定
│ ├── alias.zsh # コマンドのエイリアス設定
│ ├── completion.zsh # コマンド補完の設定
│ ├── history.zsh # コマンド履歴の設定
│ ├── path.zsh # PATH 環境変数の設定
│ └── plugin.zsh # Zsh プラグインの読み込み設定
└── .zshrc # Zsh 全体の基本設定・各設定ファイルの読み込み
こんな感じです.
疲れてきたのでこの辺にします.エイリアスなどシェルの細かい設定についてはまた記事にします.「CLI環境を整える」みたいなタイトルでezaとかfzfみたいなツールと一緒にまとめれたらと思います.
My DevもAtsulogもなかなか終わりが見えないですね〜.ゆるくマイペースにやっていきます.
ではまた.