-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Draft] aqua と asdf を比較する #82
Comments
本体の install (Homebrew)https://asdf-vm.com/guide/getting-started.html asdf$ brew install asdf . $(brew --prefix asdf)/libexec/asdf.sh aqua
export PATH=~/.aqua/bin:$PATH |
Node.js の Installasdf$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git Plugin によっては別のツールに依存するケースもあります。 aqua では依存は生じません。 $ brew install gpg gawk .tool-versions を用意します。
install コマンドを実行します $ asdf install aquaaqua.yaml を用意します。 registries:
- type: standard
ref: v0.10.18 # renovate: depName=aquaproj/aqua-registry
packages:
- name: nodejs/[email protected] .tool-versions よりは冗長とは言えますが、だいぶ簡潔だとは思います。 install コマンドを実行します。 $ aqua i -l plugin をインストールする必要がない分、簡単と言えます。 個人的にはやはり plugin を install しないといけないのがネックだなと感じます。 例えば Make task を作って plugin をインストールするようにするとか工夫しようはあると思いますが、 |
ツールの検索asdfList plugins registered on asdf-plugins repository with URLs $ asdf plugin list all aquaaqua g というコマンドで interactive に検索できます。 Registry はローカルにダウンロードされているので、非常に高速に動きます。 $ aqua g |
AWS CLI のインストールasdf では AWS CLI 用の Plugin が存在しますが、 aqua の Standard Registry にはありません。 |
tfcmt のインストールaqua では tfcmt が Standard Registry にあるので、簡単にインストールできますが、 2021-12-09 現在、 asdf の tfcmt 用の plugin は恐らくないでしょう(ちゃんと調べてないけど)。 |
ツールに対応する plugin がない場合の対応asdf であれば plugin を自作することになるでしょう。 検索できるようにするには https://github.com/asdf-vm/asdf-plugins に追加する必要もあるようです。 aqua であれば Standard Registry に issue か PR を作ることになります。 |
インストール可能なツールのバージョンを調べるasdf であれば次のようなコマンドでバージョンをリストアップできます。 $ asdf list all nodejs 一方で aqua にはそのようなコマンドがありません。 じゃぁその機能をつけるかというと、まだ慎重なスタンスです。本当に必要か、ないと困るか見極めたいです。 |
plugin (registry) のバージョン管理aqua は aqua.yaml で Registry のバージョンも固定することを強制しています。 一方で asdf にはそのような仕組みはないように思えます。
|
GitHub Actions での利用aquaaqua には 2 つの GitHub Actions があり、どちらを使っても簡単に aqua とツールをインストールできます。 asdf使い方がパット見わかりにくいのですが、こんな感じで plugin の install まで含めてやってくれました。 https://github.com/asdf-vm/actions/blob/master/install/action.yml asdf はデフォルトで master っぽいのであまり安全とは言えませんね。 steps:
- name: Checkout
uses: actions/checkout@v2
- name: asdf_install
uses: asdf-vm/actions/install@v1
- run: node -v plugin の install は .tool-versions からツールの一覧を抽出してインストールを実行していました。 |
Renovateaqua は Renovate による継続的なアップデートを推奨しており、 簡単に update できる Preset Config を提供しています。 asdf も公式の Manager のサポートはありません。 ちなみに Dependabot を既に使っている場合でも、 aqua.yaml や .tool-versions などに限定して Renovate と併用することは可能です。 |
#80
aqua という CLI ツールを YAML でバージョン管理できるツールを開発しています。
似たようなユースケースで使われる有名なツールとして asdf があります。
https://asdf-vm.com/
そこで
といったことを書いていきたいと思います。
ただし、自分は asdf にはあまり詳しくありません。
以前より存在は知っていましたが、使ってはいませんし、最近 aqua と比較するためにちょっと触っているくらいです。
また、自分は aqua の開発者であるため、どうしても aqua に偏った比較をするでしょう。
「使うのが簡単」とか「学習コストが低い」といった客観的に比較しにくい部分もあります。
asdf は間違いなく人気のあるツールで、非常に様々なツールに対応しています。
当初自分は Python や Ruby, Node.js といった様々な言語に対応したツールくらいに思ってましたが、
言語に限らず様々なツールに対応していることに驚きました。
また、 asdf には aqua にはない機能もあります。
自分は aqua が asdf より単純に優れているとは思っていません。
逆に asdf のほうが aqua よりも優れているとも思っていません。
玉虫色なことを言うと、皆さんのユースケースに合ったほうを使えばいいのではないかと思います。
更にいうと、どちらか一方しか使えないということはなく、併用することももちろん可能です。
同じツールであればどちらか一方で管理したほうが良いとは思いますが、
片方をメインで使い、メインのほうが対応していないツールはもう片方を使うのは全然ありでしょう。
共通する部分
asdf の introduction を読むと、やりたいことは割と親しいなと感じます。
チームで設定を共有し、同じバージョンを使うようにしたいということですね。
違い
plugin 機構
asdf の plugin に対し、 aqua には Registry があります。
この 2 つは、本体とは独立して機能を拡張できる(様々なツールに対応できる) という共通点がある一方、
仕組み的には結構違います。
asdf の plugin はツールごとにリポジトリを作成するのに対し、 aqua の Registry は 1 つで複数のツールに対応できます。
asdf では plugin ごとに決められたシェルスクリプトを作成することで、自由度高くツールのインストールが可能であり、様々なツールに対応できます。
一方、 aqua のツールのインストールはかなり限定的なため、 aqua では対応できないツールも少なからずあります。
aqua で対応できないツールを使いたい場合、 asdf のような他のツールを検討するしかないでしょう。
ただし、これだけでインストール可能なツールもかなり多く存在します。
Go で作られたツールは GitHub Releases で公開されていることが多く、こういったツールは aqua で簡単に対応できます。
インストール方法を限定している代わり、簡潔に記述できるとも言えます。シェルスクリプトをゴニョゴニョ書く必要はありません。
また、任意のスクリプトを実行できるのはセキュリティ的な懸念もありますが、 aqua ではそのようなことはできないので、ツールをインストール時に悪意のあるコードが実行されるようなことはありません。
asdf の plugin には security policy https://github.com/asdf-vm/asdf-plugins#security があり、 security に関しても気を配ってますし、不必要に不安を煽るつもりはありませんが、仕組み的に防ぐことは難しいでしょう。
分散か中央集権か
asdf はサードパーティの plugin が数多く存在します。
一方で aqua では Standard Registry という中央集権的な Registry で管理されています。
Standard Registry に追加するツールは、 star 数や人気とかで選別といったことは全くしてなく、
だれも知らないようなツールでも install さえちゃんとできれば追加できます。気軽に PR を投げてください。
サードパーティの Registry を作ることは可能ですし、会社の Private Repository で Private な Registry を作成し、 private なツールを配布すると言った使い方は十分に考えられます。
しかし OSS のツールに関しては Standard Registry で管理したほうが aqua user にとって都合が良いと思っています。
サードパーティの Registry を作る場合、ユーザーがその Registry の存在を知り、 aqua.yaml に追加する必要があります。
Standard Registry に追加すればその必要はありません。
ツール側に変更があったり(リポジトリの owner が変わったり、 asset の名前が変わったり)、 aqua の update に伴い Registry に修正が必要になったりしたら、 Registry をメンテする必要がありますが、 Standard Registry に追加しておけばそれを任せることができます。
サードパーティだとメンテされずに放置されるリスクもあり、 Standard Registry であってもないとは言えませんが、
aqua というプロダクトが生き続ける限り、恐らく大丈夫だと思います。
Standard Registry ではツールの更新を Renovate で検知して CI を実行することで、ツールの更新に伴い Registry が壊れるのを防いでいます。
aqua の update に伴い Registry に修正が必要な場合、 Standard Registry のように一つのリポジトリに集約しているモデルだと、リポジトリが分散しているモデルに比べ、対応が遥かに容易です。
ユーザーが自由にサードパーティの plugin を作るモデルの場合、
本体の開発者はそれらをメンテしなくて良いので楽ですし、健全とも言えますが、 plugin によって品質がマチマチだったり
メンテされなくなったりということも往往にあります。
学習コスト
aqua と asdf で共通するモチベーションとして、複数人で同じバージョンを使うようにするというのがあります。
aqua や asdf に限らず、チーム・プロジェクトにツールを導入すると言った場合、学習コストの低さは重要です。
みんながそのツールを使うモチベーションが高いわけではないし、全員が英語のドキュメントをすらすら読めるとも限りません。
aqua のコマンドはシンプルで、他にもコマンドは幾つかありますが、多くの人は
aqua i [-l]
だけで良いはずです。導入はかなり容易なのではないかと思っています。
一方で知名度が高いほうが導入しやすいのは当然で、 asdf を知らない人であっても、ここまで人気のあるツールであれば導入しやすいでしょう。
本体のインストール
本体(aqua と asdf) のインストールはどちらも簡単で、態々比較するほどのものでもないですが、違いはあります。
asdf はシェルスクリプトで実装されており、 .bashrc などで読み込む必要があります。
そのためシェルごとに細かくガイドが分かれていて、正直わかりにくいと感じるのと、
毎回スクリプトをロードしないといけないというのは、チームや組織に asdf を広めると言った場合にハードルになることも考えられます(asdf ほど知名度のあるツールであれば問題にならないかもしれませんが)。
aqua は Go で実装されており、 PATH を追加すればよいだけです。
The text was updated successfully, but these errors were encountered: