asdf
GitHub概要
asdf-vm/asdf
Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more
ホームページ:https://asdf-vm.com/
スター24,478
ウォッチ121
フォーク902
作成日:2014年11月29日
言語:Go
ライセンス:MIT License
トピックス
asdf-vmbashclielixirelvisherlangfishgolangmultiple-languagesnodenushellpowershellpythonrubyshellversion-managerzsh
スター履歴
データ取得日時: 2025/10/22 04:10
言語バージョン管理ツール
asdf
概要
asdfは、複数のプログラミング言語とツールのバージョンを一元管理できる汎用バージョンマネージャーです。プラグインシステムにより、Python、Node.js、Ruby、Go、Elixirなど300以上のツールに対応しています。一つのツールですべての言語バージョンを管理できるため、チーム開発に最適です。
詳細
主な特徴
- 多言語対応: 300以上のツール・言語をサポート
- 統一インターフェース: すべての言語で同じコマンド体系
- プラグインアーキテクチャ: 新しい言語の追加が容易
- .tool-versions: プロジェクトごとの一元的なバージョン管理
- グローバル/ローカル設定: 柔軟なバージョン管理
- 既存ツールとの互換性: .nvmrc、.ruby-versionなどをサポート
動作原理
asdfはshimディレクトリをPATHに追加し、各言語のコマンドをインターセプトします。.tool-versionsファイルまたはレガシーバージョンファイルを読み取り、適切なバージョンのバイナリを実行します。
プラグインシステム
各言語やツールはプラグインとして実装されており、GitHubから簡単にインストールできます。プラグインは言語固有のインストール方法やバージョン管理を抽象化します。
メリット・デメリット
メリット
- 一元管理: すべての言語を一つのツールで管理
- 学習コスト削減: 統一されたコマンド体系
- チーム開発に最適: .tool-versionsで環境を共有
- 豊富なエコシステム: 300以上の公式プラグイン
- アクティブな開発: 継続的な更新とサポート
- 移行が容易: 既存の.*-versionファイルとの互換性
デメリット
- 初期設定の複雑さ: プラグインの個別インストールが必要
- パフォーマンス: 言語特化ツールより若干遅い場合がある
- プラグイン依存: プラグインの品質にばらつき
- Windows非対応: WSL環境が必要
- メモリ使用: 多数の言語使用時のディスク容量
参考ページ
書き方の例
インストール(Linux/macOS)
# Gitクローンによるインストール
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
# macOSではHomebrewも使用可能
brew install asdf
# Linux(パッケージマネージャー経由)
# Ubuntu/Debian
apt install asdf
# Arch Linux
pacman -S asdf-vm
シェル設定
# Bash(.bashrcに追加)
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"
# Zsh(.zshrcに追加)
. "$HOME/.asdf/asdf.sh"
fpath=(${ASDF_DIR}/completions $fpath)
autoload -Uz compinit && compinit
# Fish(~/.config/fish/config.fishに追加)
source ~/.asdf/asdf.fish
mkdir -p ~/.config/fish/completions
ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
# 設定を反映
source ~/.bashrc # または該当するシェル設定ファイル
プラグインのインストール
# プラグイン一覧の表示
asdf plugin list all
# 各言語のプラグインをインストール
asdf plugin add python
asdf plugin add nodejs
asdf plugin add ruby
asdf plugin add golang
asdf plugin add java
asdf plugin add elixir
# URLを指定してプラグインをインストール
asdf plugin add kotlin https://github.com/asdf-community/asdf-kotlin.git
基本的な使い方
# インストール可能なバージョンの表示
asdf list all python
asdf list all nodejs
# 特定バージョンのインストール
asdf install python 3.12.0
asdf install nodejs 20.11.0
asdf install ruby 3.3.0
# 最新バージョンのインストール
asdf install python latest
asdf install nodejs latest:18 # 18.x系の最新
# インストール済みバージョンの確認
asdf list python
asdf list nodejs
グローバルバージョンの設定
# グローバルバージョンの設定
asdf global python 3.12.0
asdf global nodejs 20.11.0
# 複数ツールを一度に設定
asdf global python 3.12.0 nodejs 20.11.0
# 現在のバージョン確認
asdf current
asdf current python
プロジェクトごとの管理
# プロジェクトディレクトリに移動
cd /path/to/my-project
# .tool-versionsファイルを作成
asdf local python 3.11.7
asdf local nodejs 18.19.0
asdf local ruby 3.2.3
# .tool-versionsの内容
cat .tool-versions
# python 3.11.7
# nodejs 18.19.0
# ruby 3.2.3
# 手動で.tool-versionsを編集することも可能
echo "golang 1.21.5" >> .tool-versions
レガシーバージョンファイルのサポート
# レガシーバージョンファイルのサポートを有効化
echo 'legacy_version_file = yes' >> ~/.asdfrc
# 既存のバージョンファイルが使用可能
# .nvmrc (Node.js)
# .ruby-version (Ruby)
# .python-version (Python)
# .java-version (Java)
依存関係のインストール
# Node.jsの場合、npmのグローバルパッケージ用設定
asdf reshim nodejs
# Pythonの場合、pipのアップグレード
python -m pip install --upgrade pip
# Rubyの場合、Bundlerのインストール
gem install bundler
asdf reshim ruby
システムバージョンの使用
# システムにインストールされたバージョンを使用
asdf local python system
asdf global nodejs system
# 一時的にシステムバージョンを使用
asdf shell ruby system
便利なコマンド
# プラグインの更新
asdf plugin update --all
asdf plugin update python
# 未使用バージョンの削除
asdf uninstall python 3.10.0
# 現在のツールのパスを表示
asdf which python
asdf where python
# 環境変数の設定確認
asdf info
# プラグインの削除
asdf plugin remove java
チーム開発での活用
# プロジェクトのセットアップスクリプト
#!/bin/bash
# setup.sh
# 必要なプラグインをインストール
while IFS= read -r line; do
plugin=$(echo $line | cut -d' ' -f1)
asdf plugin add $plugin 2>/dev/null || true
done < .tool-versions
# .tool-versionsに記載されたバージョンをインストール
asdf install
# 使用例
chmod +x setup.sh
./setup.sh