Rustでfishのプラグインマネージャーを作った
TL;DR
Rustでfishのプラグインマネージャーを作りました。
なぜ作ったか
fish のプラグインマネージャーには、fisher や Oh My Fish などがあり、筆者自身も長らく fisher を愛用していました。
fisher は、それ自体が fish script のみで書かれているため、他ツールなどの依存もなく満足していたのですが、ロックファイルを用いて宣言的にバージョン管理を行う仕組みがないことや、アップデートのたびにプラグインが再インストールされることなど、いくつか自分のニーズに合わない点がありました。
そこで、より自分の欲しい機能に近いものを作ってみようと思い、作ってみることにしました。
特徴
- 設定ファイル(
pez.toml)によるプラグインの管理 - ロックファイル(
pez-lock.toml)によるバージョン管理 - プラグインのインストール、アップデート、アンインストールの並列実行
使用方法
インストール手順と基本的なコマンドの使い方を説明します。
インストール
お好みの方法でインストールしてください。
Homebrew
brew install tetzng/pez/pez
Cargo
cargo install pez
コマンド
初回のセットアップ
pez init
実行後に、pez.toml が生成されます。
プラグインのインストール
# プラグインを指定してインストール
pez install franciscolourenco/done
pez.toml にプラグインが追加され、インストール後に pez-lock.toml が生成されます。
# プラグインを指定せずにインストール
pez install
pez.toml に記載されているプラグインをすべてインストールします。
プラグインのアップデート
pez upgrade <plugins...>
pluginを指定しない場合 pez.toml に記載されているプラグインをすべて最新バージョンにアップデートします。
プラグインのアンインストール
pez uninstall <plugins...>
pez uninstall に関しては plugin の指定は必須で、指定しない場合にはエラーになります。
そのほかのコマンド
そのほかにもいくつかのコマンドがあるので pez help や README を参照してください。
下記は一例です。
# インストールされているプラグインの一覧を表示
pez list
# pez の設定状態を確認
pez doctor
今後の開発について
Pezは現在も開発中であり、今後も機能追加や改善を行っていく予定です。
バグ報告や機能リクエストなどは、GitHubのIssueやPull Requestで随時受け付けています。
お気軽にIssueやPRを送っていただけると幸いです!
おわりに
作る過程で clap のバグを発見してコントリビュートしたり、非同期処理にハマったりと、刺激的な経験ができました。
この先もより良いツールにしていきたいと思っているので、まだまだ発展途上のプロジェクトですが、興味がある方はぜひ試してみてください。
Discussion