💧

新しいツールへの対応を asdf と aqua で比較

2021/12/10に公開

CLI ツールを YAML でバージョン管理できるツール aqua を開発しています。

https://aquaproj.github.io/

新しい OSS のツールを aqua や asdf でインストールできるようにするには、
aqua の場合、 Standard Registry に PR を投げるのに対し、
asdf では Template Repository を元に Repository を作成し、 plugin として開発することになります。

そこで aqua との比較のため、 asdf の plugin を途中まで作ってみました。
途中でやめたのは、思ったより面倒だったからです。

あくまで aqua と比較するために途中まで作ったという内容なので、
asdf plugin の作り方をちゃんと知りたい人向けの内容ではありません。

asdf plugin の作り方

まずドキュメントがあります。

https://asdf-vm.com/plugins/create.html

結構色々書いてあって、これを理解して作るのは大変だなと感じました。

とりあえず Template Repository から Repository を作ります。

https://github.com/asdf-vm/asdf-plugin-template

今回は https://github.com/suzuki-shunsuke/ci-info という CLI ツール用の plugin を作ります。

https://github.com/suzuki-shunsuke/asdf-ci-info

途中でやめてしまったので archive しています。正常に動かないので注意してください。

スクリプトを実行します。

$ bash setup.bash

するとインタラクティブにコードを生成することができます。
やってみるとどうも Git の履歴を書き換えているように見えます。
別に良いとは思いますが、中々思い切ったことをしますね。

すると既に必須のスクリプトの雛形が生成されています。
実はもう動くのか?と思い試しに force push して install してみましたが、動きませんでした。

$ asdf plugin add ci-info https://github.com/suzuki-shunsuke/asdf-ci-info.git

.tool-versions

ci-info 2.0.3
$ asdf install
* Downloading ci-info release 2.0.3...
asdf-ci-info: Expected /home/foo/.asdf/installs/ci-info/2.0.3/bin/ci-info to be executable.
asdf-ci-info: An error ocurred while installing ci-info 2.0.3.

install できていません。

bin や lib 配下のシェルスクリプトを修正して GitHub Releases から tarball をダウンロードするようにする必要があるようです。
もちろん OS や CPU Architecture に合わせて asset 名を変更する必要があります。

少々面倒に感じたのと、だいたい分かった気になれたのでここで stop しました。

このように asdf plugin を作る際はシェルスクリプトを書く必要があります。

まぁ 1 度作ってしまえば同じような plugin を作るのは割と楽な気もしますが、最初のハードルはちょっと高いなと感じました。

また、ユーザーが検索できるようにするには https://github.com/asdf-vm/asdf-plugins に登録する必要もあるでしょう。名前空間の概念がないので、同じ名前の plugin が既に登録されていたら、名前を変えないといけないのもちょっとネックですね。

aqua にツールを追加する場合

aqua では Standard Registry に PR を投げます。

例えば velero を追加した PR がこちらです。

https://github.com/aquaproj/aqua-registry/pull/1281

11 行の YAML を書いただけです。

非常に簡潔ですし、意味が明確ではないでしょうか(各設定の意味はドキュメントを読んでください)。

asdf の plugin だとシェルスクリプトをパット見て何をやっているのか理解するのが難しかったりします(まぁツールをダウンロードしたりしているってのはわかりますが)。

シェルスクリプトであれば plugin によって品質はマチマチでしょうし、環境依存も大きいでしょう。

さいごに

以上、 asdf plugin を途中まで作って aqua の Registry と比較してみました。

今回はあくまで新しい OSS のツールをサポートする手間や、コードの読みやすさといった観点で比較しました。

asdf plugin も Document, Template Repository, interactive な code generator などが整備され、かなりユーザーフレンドリーではありますが、
それでも asdf plugin 作るのと aqua Registry に PR 投げるのでは、 aqua のほうがハードルが低いのではないかと感じました。

Discussion