zsh プラグイン管理を考える
つい昨日、Oh My Zsh
を採用すると宣言したのもつかの間、カスタマイズをしようと調べ始めたら「起動速度が気になる」「デカいからもっさりしちゃう」「もっと新しいの使え」などとたくさんのコメントに触れた。
そんなにいうならどれ使うんだよ!!!!!!となったため、取り敢えず現時点での最新情報をまとめてみることにした。 いや、そんな手間かけるよりググれカスと誹られて当然だが、先ずは自分で調べてみるのもリハビリなので…… ということで、やっていきましょう。
ググる
まずはググってみる(それはそう)。 「zsh plugin manager 2024」で検索すると、Reddit の記事(r/zsh)と各種プラグインマネージャのベンチマークテストが出てきた。1
What is the best plugin manager in your opinion? : r/zsh
概況はわかったところで、 GitHub でも検索かけてみる。 検索タグは以下の通り:
加えて、unixorn/awesome-zsh-plugins: A collection of ZSH frameworks, plugins, themes and tutorials. も参照してみる。2
あまりに古そう or メンテされないものを排除すると、prezto
, zinit
, sheldon
, zgenom
あたりが候補として残った。
次章からは各候補について調査していく。
それぞれのひとくちメモ
ここからは、それぞれのプロジェクトについて概要や特色、気になったことをメモしていく。 基本的には検索して Hit したものから調べたため、特に順序に意味はない。
prezto
Prezto — Instantly Awesome Zsh
Prezto is the configuration framework for Zsh; it enriches the command line interface environment with sane defaults, aliases, functions, auto completion, and prompt themes.
cf. sorin-ionescu/prezto: The configuration framework for Zsh
Zsh をきゃわにするテーマという記事3でも触れられていたが、 Plugin Manager というよりは Framework であるらしい。
なるほど、色々できるっぽいのか~というのはわかった一方で、じゃあどこが強みっぽいのか、よくわからなかった。 スター数がダントツに多いからユーザが居るのは確かなのだろうが、日本語文献だけみるとあんまり……? かなり古い結果も出てくることから察するに、zsh 登場以後長く使われてきた老舗 FW なのかもしれない。
速度を気にしていることからして、もっさり感とかに苦しめられたのかなとも思ったが、"zsh の起動に大体 600ms 程度かかっていたのがだいぶ気になってはいた" という言及からするとそこまで重い感じではなさそう? (もちろんその 0.6 秒が俺には大切なんだという価値観もアリだが)
zinit
なんて素知らぬ顔をしているが、実は過去に一悶着あったとかなかったとか……。5
まぁ「速い」ことは前提として、oh-my-zsh
や prezto
と何が違うんじゃい!と思った。
この記事を読むと、移行にあたってこれら2つの資産を(ほぼ)そのまま流用できるという特徴があるらしい。6
ラクなのは大事だよね~~
でもそれって資産がない人には勧めない理由にもなっちゃうのでは?
個人的にはう~~~~~んと思いつつ、取り敢えず 一旦保留にして他を調べてみることにした。
sheldon
Fast, configurable, shell plugin manager
cf. https://github.com/rossmacarthur/sheldon
Sheldon is a fast, configurable, command-line tool to manage your shell plugins.
あ~~~~~~~~~もうこれ確定ですね、そんな直感がします (一旦保留して他も調べますが…… ちょろっと調べた感じとか雰囲気とか、全部好みだし速度も申し分ないしサイコー感が醸されていますね?)
zgenom
A lightweight yet powerful plugin manager for Zsh.
It is a superset of the brilliant zgen. Providing more features and bugfixes while being fully backwards compatible. Have a look at the migration guide if you're currently using zgen. Also have a look at new features of zgenom.
cf. https://github.com/jandamm/zgenom
antigen
-> zgen
-> zgenom
という流れがあるらしい。
調べようにも和文でヒットするものがほとんど無く、ほんとに使われてるのか…?(疑念)
一応は zinit
と同様に oh-my-zsh
& prezto
への互換性があるため移行が簡単だよ~と宣伝してはいるようだ。
シェルのカスタマイズとかいう俺が一切精通していない分野で和文ソースなしという無謀はあまりに恐ろしい。 流石に手を出すのはやめておきたい(ごめんなさいの顔)。
閑話
ここまで特に区別なく Zsh 周りのプロジェクトについて調べてきたが、その経過で認識したワードの使い分けをメモに残す。
Plugin
文字通り「プラグイン」であり、バニラな Zsh に機能を追加したり拡張したりするもの全般を指す。 専らこれらの (un)install / (up|down)grade を管理するのが Plugin Manager ということになる。
oh-my-zsh
しかり prezto
しかり、多くの場合 PM ごとに方言がある。
ただし、それだと新規ユーザは呼び込めても既存の別 PM のユーザは資産の喪失を恐れて流入を見込めない。
そのため、後方互換性を確保して対応するといったことがしばしば生じる。
個人的には、このことが原因でプロジェクトの開発スピードが下がったり記述量が増えて容量増大につながるのではないかという懸念はある
(つまりツールを乗り換えるときはそれなりのコストを支払ってエイヤっと切るのを重視すべきと考える)。
Theme / Prompt
shell の見た目を制御するものである。
各 PM 向けにつくられたものもあれば、なんでも使えるよ~といったものまであるようだ。
Theme は PM のコマンドや config で設定するが、 Prompt は zsh とは独立して存在するものを使うらしい。
#shell-prompt
や #zsh-prompt
で惹かれるものを探してみるのもいい。
現時点で圧巻の 40.9K Star★を誇るStarShip なんかは Rust 製で見目麗しく7ぜひ使ってみたいものだ――
Framework
いわゆる「フレームワーク」であり、実用上はほぼ PM と同じ役割を持つ。 ただし、Theme の管理やその他特殊なあれこれの機能を持っていることが多いようだ。 PM + α が Framework と言えるだろう。 ただし、追加の機能を持つ分だけ記述量は増えているはずで、その分だけ速度に係数がかかるかもしれないことには留意が必要だ。 適宜、最新のベンチマーク等を参照し、ストレスのない環境を維持することに努めたい。
結論
俺は oh-my-zsh
をやめて Sheldon + 任意の Theme を採用する。
理由は以下の通り:
- はやそう(Rust 製のツール全盛の時代が来ると期待
- PM は Plugin に集中していい / 他は不要なはず
prezto
,zinit
とも迷ったけど、現状俺には資産がない- じゃあ新しいものに手を出したほうがいいと信じたい
- StarShip も併用してみたい
- 和文ソースがたくさん ← 先人たちの模倣で誤魔化せる
こんな感じだろうか。
具体的な Sheldon + Starship についての設定方法やカスタマイズについては他の記事に譲る。
さっそく自分の dotfiles
に反映し、快適な開発環境を手に入れようと思う。
次に読みたい和文記事
- 高速で設定しやすいZsh/BashプラグインマネージャーSheldonの紹介
- zinitが不安なのでsheldonへ移行したらzshの起動が50msと更に速くなった - Engineering blog at ktrysmt
- zplugからsheldonに乗り換えた
- Rust製ツールまみれのdotfilesを始めた
- 究 極のzshプラグイン読み込み高速化: プラグインマネージャーの限界を越えろ【起動時間14.6ms】
- 俺が考える最速のZsh×モニターなし開発環境 · からまるのブログ
- Prezto をやめて sheldon に移行して zsh の起動速度を改善してみた - emahiro/b.log
Footnotes
-
とはいえ、最終更新は去年とかなので留意すべきやも (Commits on Jun 6, 2023) ↩
-
awesome-XX
系のリポジトリはコミュニティ主導で体系的にまとめられているため、Dev 関係で調べたいならまずここだったかも…(後悔) ↩ -
Prezto をやめて sheldon に移行して zsh の起動速度を改善してみた - emahiro/b.log ↩
-
starship/starship: ☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell! ↩