イントロダクション
asdf
は、ツールのためのバージョンマネージャです。すべてのツールのバージョンは単一のファイル(.tool-versions
)内で定義されるため、プロジェクトのGitリポジトリにチェックインして共有することで、チーム全員に同じーバージョンのツールを使ってもらえるようになります。
従来は、複数のCLIのバージョンマネージャを用意する必要があり、それぞれが異なるAPI、構成ファイル、および実装($PATH
の操作、Shim、環境変数など)となっていました。asdf
は、開発ワークフローを簡素化するための単一インターフェースと構成ファイルを提供しており、シンプルなプラグインインターフェースを使って、すべてのツール・ランタイムに拡張することができます。
どうやって動いているの
シェル上でasdf
コアがセットアップすると、特定のツールを管理するためのプラグインをインストールすることができるようになります。プラグインによってツールがインストールされると、インストールされる実行ファイルごとにShimが作成されます。これらの実行ファイルを実行しようとすると、代わりにShimが実行され、.tool-versions
で定義されているバージョンをasdf
が認識して、当該バージョンが実行されます。
関連プロジェクト
nvm / n / rbenv etc
nvm、n、およびrbenvのようなツールはすべて、ツールによってインストールされる実行ファイルのShimを作成するシェルスクリプトです。
asdf
はこれらのツールと非常に似ていて、ツール/ランタイムのバージョン管理という分野では競合しています。asdf
はプラグインシステムを採用し、他のツールと差別化することで、ツール/ランタイムごとのマネージャ、マネージャごとの異なるコマンド、そしてリポジトリ内の様々な*-version
ファイルといったものを排除しています。
direnv
シェルに、ディレクトリごとに環境変数をロード/アンロードできる機能を付け加えます。
asdf
は環境変数を管理することはしませんが、direnvの動作をasdf
に統合するasdf-direnv
プラグインが存在します。
詳しくはdirenvのドキュメントをご覧ください。
Homebrew
macOS(またはLinux)のためのパッケージマネージャー
Homebrewは、パッケージとその上位の依存関係を管理します。asdf
は上位の依存関係を管理することはしませんし、パッケージマネージャでもありません。それらの管理はユーザが負担することとなりますが、asdf
はなるべく依存関係のリストを小さく保つように努めています。
詳しくはHomebrewのドキュメントをご覧ください。
NixOS
Nixは、パッケージ管理とシステム構成に独自のアプローチを取り入れたツールです。
NixOSは、各ツールの依存関係ツリー全体でパッケージのバージョンを正確に管理することで、真に再現可能な環境を構築することを目指しています。asdf
でそのようなことはできません。NixOSは、独自のプログラミング言語、たくさんのCLIツール、そして60,000を超えるパッケージコレクションによって、それらの機能を支えています。
繰り返しになりますが、asdf
は上位の依存関係を管理することはしませんし、パッケージマネージャでもありません。
詳しくはNixOSのドキュメントをご覧ください。
なぜasdfを使うの?
asdf
は、プラグインシステムによって多くのツールをサポートしており、シェル構成にたった1行のシェルスクリプトを記述するだけで使えるというシンプルさ・親しみやすさによって、チームが確実に同じバージョンのツールを使用することを保証できます。
Note
asdf
はシステムのパッケージマネージャになることを目指してはいません。あくまで、ツールのバージョンマネージャです。プラグインを作成することで、どのようなツールでもasdf
で管理できるようになりますが、それがそのツールにとって最善の方法であるとは限りませんのでご注意ください。