開発者にとって、シェル(コマンドライン)は一日の半分を過ごす場所。ここが快適かどうかで生産性がガラリと変わる。3大シェルを真面目に使って比較してみた。
bash — 安定と信頼のデファクト。どこにでも入ってる。シェルスクリプトもbashで書けば間違いない。でも補完が弱いし、設定ファイル(.bashrc)がすぐカオスになる。zshを知るまではこれが普通だと思ってた。
3大シェル比較:
| PowerShell | zsh | bash | |
|---|---|---|---|
| OS | Windows(クロスも可) | macOSデフォルト、Linux | Linuxデフォルト |
| パイプ | オブジェクト渡し(神) | テキスト渡し | テキスト渡し |
| 補完 | ◎ 超強力 | ◎ プラグインで神化 | △ 素朴 |
| スクリプト | フル機能(.NET呼べる) | シェルスクリプト互換 | POSIX準拠 |
| テーマ | oh-my-posh | Powerlevel10k | bash-it |
| 学習コスト | やや高い | 低い | 低い |
PowerShellの真価は「オブジェクトパイプ」。Linuxのシェルはテキストをパイプで渡す(`ls | grep txt`でテキストをフィルタリング)。PowerShellはオブジェクトを渡す(`Get-Process | Where-Object CPU -gt 10`)。だから文字列パースが不要。これが一度わかると、テキストパイプに戻れなくなる。
zsh + oh-my-zsh + Powerlevel10k — macOSユーザーの鉄板。これで見た目も補完も劇的に良くなる。履歴検索(Ctrl+R)のfzf連携が快適すぎる。
結局、僕は普段bash(WSL2内)で、Windows側の管理はPowerShell、リモートサーバーもbash。シェルはTPOで使い分けるのが大人ってもんだ。