🥑

Rustでfishのプラグインマネージャーを作った

に公開

TL;DR

Rustでfishのプラグインマネージャーを作りました。

https://github.com/tetzng/pez

なぜ作ったか

fish のプラグインマネージャーには、fisherOh 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 helpREADME を参照してください。
下記は一例です。

# インストールされているプラグインの一覧を表示
pez list

# pez の設定状態を確認
pez doctor

今後の開発について

Pezは現在も開発中であり、今後も機能追加や改善を行っていく予定です。
バグ報告や機能リクエストなどは、GitHubのIssueやPull Requestで随時受け付けています。
お気軽にIssueやPRを送っていただけると幸いです!

おわりに

作る過程で clap のバグを発見してコントリビュートしたり、非同期処理にハマったりと、刺激的な経験ができました。
この先もより良いツールにしていきたいと思っているので、まだまだ発展途上のプロジェクトですが、興味がある方はぜひ試してみてください。

GitHubで編集を提案

Discussion