Skip to main content

zsh プラグイン管理を考える

Kiai
@Ningensei848

つい昨日、Oh My Zsh を採用すると宣言したのもつかの間、カスタマイズをしようと調べ始めたら「起動速度が気になる」「デカいからもっさりしちゃう」「もっと新しいの使え」などとたくさんのコメントに触れた。

そんなにいうならどれ使うんだよ!!!!!!となったため、取り敢えず現時点での最新情報をまとめてみることにした。 いや、そんな手間かけるよりググれカスと誹られて当然だが、先ずは自分で調べてみるのもリハビリなので…… ということで、やっていきましょう。

Zsh is a shell designed for interactive use, although it is also a powerful scripting language.

ググる

まずはググってみる(それはそう)。 「zsh plugin manager 2024」で検索すると、Reddit の記事(r/zsh)各種プラグインマネージャのベンチマークテストが出てきた。1

What is the best plugin manager in your opinion? : r/zsh

Load time: Lower is better. This is the metric we care about most because its the time it takes to open a new shell until we get a usable prompt.

概況はわかったところで、 GitHub でも検索かけてみる。 検索タグは以下の通り:

加えて、unixorn/awesome-zsh-plugins: A collection of ZSH frameworks, plugins, themes and tutorials. も参照してみる。2

あまりに古そう or メンテされないものを排除すると、prezto, zinit, sheldon, zgenomあたりが候補として残った。 次章からは各候補について調査していく。

それぞれのひとくちメモ

ここからは、それぞれのプロジェクトについて概要や特色、気になったことをメモしていく。 基本的には検索して Hit したものから調べたため、特に順序に意味はない。

prezto

Tag search result on GitHub

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 なのかもしれない。

そんなわけでこういう記事も出ている。4

速度を気にしていることからして、もっさり感とかに苦しめられたのかなとも思ったが、"zsh の起動に大体 600ms 程度かかっていたのがだいぶ気になってはいた" という言及からするとそこまで重い感じではなさそう? (もちろんその 0.6 秒が俺には大切なんだという価値観もアリだが)

zinit

Zinit is a flexible and fast Zshell plugin manager that will allow you to install everything from GitHub and other sites.


なんて素知らぬ顔をしているが、実は過去に一悶着あったとかなかったとか……。5

まぁ「速い」ことは前提として、oh-my-zshprezto と何が違うんじゃい!と思った。 この記事を読むと、移行にあたってこれら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.

cf. https://sheldon.cli.rs/


あ~~~~~~~~~もうこれ確定ですね、そんな直感がします (一旦保留して他も調べますが…… ちょろっと調べた感じとか雰囲気とか、全部好みだし速度も申し分ないしサイコー感が醸されていますね?)

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 に反映し、快適な開発環境を手に入れようと思う。

次に読みたい和文記事

Footnotes

  1. とはいえ、最終更新は去年とかなので留意すべきやも (Commits on Jun 6, 2023)

  2. awesome-XX 系のリポジトリはコミュニティ主導で体系的にまとめられているため、Dev 関係で調べたいならまずここだったかも…(後悔)

  3. きゃわzshテーマ(powerlevel10k) - Zenn.dev

  4. Prezto をやめて sheldon に移行して zsh の起動速度を改善してみた - emahiro/b.log

  5. zsh の zinit (旧zplugin) が消滅しちゃったよ! 経緯と解決法 #Bash - Qiita

  6. zinit をしっかりと理解する - Zenn.dev

  7. starship/starship: ☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!