asdfはなぜ動くのか。asdfの詳細とShimによるバージョン切り替えの仕組みを読み解く。
この記事ではマルチランタイムバージョン管理ツール「asdf」の仕組みを読み解いていきます。
私自身あまり理解していない状態から徐々に読み解いていきますので、途中で理解が間違っている事があるかと思います。
その点はご容赦ください。
なお、asdfのインストールと設定については以下で解説しています。
まずは触れてみたいという方は以下をご覧ください。
https://blog.yukiapps.com/2025/03/asdf-mac.html
それでは参りましょう。
asdfの構成
- Go言語で書かれている
- asdfコアとasdfプラグインによる構成
- プラグインによってShimが作成される
- 実行ファイルの代わりにShimが実行される
- asdfの公式による概要はこちら:https://asdf-vm.com/ja-jp/guide/introduction.html
- ソースコードはこちら:https://github.com/asdf-vm/asdf
図にするとこんな感じでしょうか。
「asdfコア」「プラグイン」「Shim」が重要なキーワードになりそうです。
まずは「Shim」とは何かについて解説した後に、一つずつ深掘りしていきます。
Shimとは何か
「shim(シム)」とは英語で、クサビ上の木材など部品の隙間や割れ目を埋める物の事です。
プログラミングの分野においては、プログラムの間に挟まる薄いレイヤー(ラッパーようなもの)を指します。
asdfにおいては、実行ファイルの前にShimを挟むことでバージョンを管理しています。
Shimとはラッパーのようなものと覚えておいて良いかと思います。
Wikipediaを参考:https://en.wikipedia.org/wiki/Shim_(computing)
Shimの概念を理解したところで、asdfの各コンポーネントについて深堀りしていきます。
asdfコアの主な役割
- 設定ファイル(.tool-versions)読み取る
- プラグインをインストールする
- .tool-versionsとプラグインを参照してShimを生成
- インストール済みの実行ファイルを元にShimを生成
図を修正すると以下のような感じでしょうか。
次にプラグインについて見ていきます。
asdfのプラグインの主な役割
- asdfコアに任意のツールを操作する機能を提供する
- インストール
- インストール可能なバージョンの表示
- 最新安定バージョンの表示 等
asdfのプラグインの作成
asdfのShimの主な役割
- asdfコアを介して指定されたコマンドを実行する
つまり、adfによって管理されているコマンドを実行する際、まずはShimが呼び出されます。
Shimはasdfコマンドが記述されたシンプルなbashスクリプトです。
生成と実行時に分けて図を作り直します。
インストールと設定時の流れは以下のようになります。
実際にコマンドを実行する際は以下のようになります。
asdfの初期設定で環境変数の$PATHを修正しているため、コマンドはまずはShimがあるか探しにいきます。
Shimがあればそこからasdfコアが呼び出され、asdfが管理しているコマンドが実行されるという流れです。
asdfのバージョン切り替えの仕組みがなんとなく理解できました。
今回はここまでにしようと思います。
次はソースコードを読んで実装を詳しく見てみたいですね。
コメント
コメントを投稿