asdf-elixir
GitHub概要
asdf-vm/asdf-elixir
Elixir plugin for asdf version manager
スター514
ウォッチ11
フォーク77
作成日:2014年12月18日
言語:Shell
ライセンス:MIT License
トピックス
なし
スター履歴
データ取得日時: 2025/10/22 04:10
言語バージョン管理ツール
asdf-elixir
概要
asdf-elixirは、asdfバージョンマネージャー用のElixirプラグインです。複数のElixirバージョンを管理し、対応するErlang/OTPバージョンとの互換性を保証します。ElixirはErlang VM上で動作するため、特定のOTPバージョンでコンパイルされたElixirバージョンを正確に選択することが重要で、このプラグインがその管理を簡素化します。Elixir公式でも推奨されている標準的なバージョン管理ソリューションです。
詳細
主な特徴
- OTP互換性管理: ElixirとErlang/OTPバージョンの適切な組み合わせ
- プリコンパイル版対応: 素早いインストールとセットアップ
- .tool-versionsサポート: プロジェクトごとのバージョン固定
- ドキュメント統合: IEx経由でのErlang Docsアクセス(Elixir 1.11+)
- Mixコマンド自動実行: インストール後の自動setup
- 複数バージョン並行管理: プロジェクト間でのバージョン切り替え
- クロスプラットフォーム: Linux, macOS, WSL対応
アーキテクチャ
asdf-elixirは、asdfのプラグインシステムを使用してElixirバイナリを管理します。特定のOTPバージョン向けにコンパイルされたElixirバージョンを選択でき、ランタイム時の互換性を保証します。インストール後は.default-mix-commandsファイルで追加のMixコマンドを自動実行できます。
OTP互換性の重要性
ElixirはErlang VM上で動作するため、使用するElixirバージョンは使用中のErlangバージョン専用にコンパイルされている必要があります。バージョンが一致しない場合、問題が発生する可能性があります。
メリット・デメリット
メリット
- 公式推奨: Elixir公式サイトで推奨されるバージョン管理手法
- OTP互換性保証: 確実なElixir/Erlang組み合わせ管理
- 高速インストール: プリコンパイル版による迅速セットアップ
- プロジェクト隔離: .tool-versionsによるプロジェクト環境分離
- 統一管理: asdfでErlangとElixirを一元管理
- 豊富なバージョン: 古いバージョンから最新版まで幅広くサポート
- 自動化対応: CI/CDとスクリプトでの自動化が容易
デメリット
- asdf依存: asdf本体のインストールと設定が前提
- OTP知識要求: Erlang/OTPバージョンの理解が必要
- 複雑性: 単純なElixirインストールより設定が複雑
- 初期学習: asdf使用法とOTP互換性の学習コスト
- コンパイル時間: カスタムビルド時の長いコンパイル時間
参考ページ
書き方の例
事前準備(asdfのインストール)
# asdf本体のインストール(Linux/macOS)
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
# シェル設定(Bash)
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
# シェル設定(Zsh)
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.zshrc
echo 'fpath=(${ASDF_DIR}/completions $fpath)' >> ~/.zshrc
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
# 設定の再読み込み
source ~/.bashrc # または ~/.zshrc
プラグインのインストール
# ErlangとElixirプラグインの追加
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
# インストール済みプラグインの確認
asdf plugin list
# プラグインの更新
asdf plugin update erlang
asdf plugin update elixir
バージョンの確認とインストール
# 利用可能なErlangバージョンの確認
asdf list all erlang
# 利用可能なElixirバージョンの確認
asdf list all elixir
# 推奨される組み合わせ(2025年現在)
# Erlang/OTP 27とElixir 1.17の組み合わせ
asdf install erlang 27.2
asdf install elixir 1.17.3-otp-27
# Erlang/OTP 26との組み合わせ
asdf install erlang 26.2.5.6
asdf install elixir 1.17.3-otp-26
# 古いバージョンの組み合わせ例
asdf install erlang 25.3.2.14
asdf install elixir 1.15.8-otp-25
バージョンの設定
# グローバルバージョンの設定
asdf global erlang 27.2
asdf global elixir 1.17.3-otp-27
# プロジェクトローカルバージョンの設定
cd /path/to/your/project
asdf local erlang 27.2
asdf local elixir 1.17.3-otp-27
# 現在のバージョン確認
asdf current
asdf current erlang
asdf current elixir
# インストール済みバージョンの確認
asdf list erlang
asdf list elixir
.tool-versionsファイルの活用
# プロジェクトディレクトリでの設定
cd myproject
# .tool-versionsファイルの作成
echo "erlang 27.2" >> .tool-versions
echo "elixir 1.17.3-otp-27" >> .tool-versions
# ファイル内容の確認
cat .tool-versions
# erlang 27.2
# elixir 1.17.3-otp-27
# .tool-versionsに基づくバージョンインストール
asdf install
# バージョンが自動設定される確認
elixir --version
erl -eval 'erlang:system_info(otp_release), halt().'
OTPバージョンの互換性管理
# 特定のOTPバージョン向けElixirのインストール
# フォーマット: <elixir-version>-otp-<otp-major-version>
# OTP 27用のElixir 1.17.3
asdf install elixir 1.17.3-otp-27
# OTP 26用のElixir 1.17.3
asdf install elixir 1.17.3-otp-26
# OTP 25用のElixir 1.15.8
asdf install elixir 1.15.8-otp-25
# 互換性確認
elixir --version
# Elixir 1.17.3 (compiled with Erlang/OTP 27)
プロジェクト環境の切り替え
# プロジェクト1(OTP 27環境)
cd ~/projects/modern-app
asdf local erlang 27.2
asdf local elixir 1.17.3-otp-27
mix --version
# プロジェクト2(OTP 26環境)
cd ~/projects/legacy-app
asdf local erlang 26.2.5.6
asdf local elixir 1.17.3-otp-26
mix --version
# プロジェクト3(古い環境)
cd ~/projects/old-app
asdf local erlang 25.3.2.14
asdf local elixir 1.15.8-otp-25
mix --version
Mixコマンドの自動実行設定
# デフォルトMixコマンドの設定ファイル作成
echo 'hex' > ~/.default-mix-commands
echo 'phx.new' >> ~/.default-mix-commands
echo 'ecto.sql' >> ~/.default-mix-commands
# ファイル内容の確認
cat ~/.default-mix-commands
# hex
# phx.new
# ecto.sql
# 新しいElixirバージョンインストール時に自動実行される
asdf install elixir 1.17.3-otp-27
# mix archive.install hex --force
# mix archive.install phx.new --force
# mix archive.install ecto.sql --force
Phoenixプロジェクトでの活用
# Phoenix開発環境のセットアップ
asdf local erlang 27.2
asdf local elixir 1.17.3-otp-27
# Phoenixアーカイブのインストール
mix archive.install hex phx_new
# 新しいPhoenixプロジェクトの作成
mix phx.new my_app --database postgres
cd my_app
# プロジェクト固有の.tool-versionsファイル確認
cat .tool-versions
# erlang 27.2
# elixir 1.17.3-otp-27
# 依存関係のインストール
mix deps.get
# データベースの作成とマイグレーション
mix ecto.create
mix ecto.migrate
# サーバーの起動
mix phx.server
CI/CDでの活用
# GitHub Actions例
name: Elixir CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
elixir: ['1.17.3-otp-27', '1.17.3-otp-26']
erlang: ['27.2', '26.2.5.6']
exclude:
- elixir: '1.17.3-otp-27'
erlang: '26.2.5.6'
- elixir: '1.17.3-otp-26'
erlang: '27.2'
steps:
- uses: actions/checkout@v4
- name: Install asdf
run: |
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
echo ". $HOME/.asdf/asdf.sh" >> $GITHUB_ENV
- name: Install Erlang and Elixir
run: |
export PATH="$HOME/.asdf/bin:$PATH"
. $HOME/.asdf/asdf.sh
asdf plugin add erlang
asdf plugin add elixir
asdf install erlang ${{ matrix.erlang }}
asdf install elixir ${{ matrix.elixir }}
asdf global erlang ${{ matrix.erlang }}
asdf global elixir ${{ matrix.elixir }}
- name: Install dependencies
run: mix deps.get
- name: Run tests
run: mix test
Dockerでの活用
# Dockerfile例
FROM ubuntu:22.04
# 基本パッケージのインストール
RUN apt-get update && apt-get install -y \
curl \
git \
build-essential \
autoconf \
libncurses5-dev \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# asdfのインストール
RUN git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
# 環境変数の設定
ENV PATH="$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"
# プラグインのインストール
RUN . ~/.asdf/asdf.sh && \
asdf plugin add erlang && \
asdf plugin add elixir
# バージョンのインストール
RUN . ~/.asdf/asdf.sh && \
asdf install erlang 27.2 && \
asdf install elixir 1.17.3-otp-27 && \
asdf global erlang 27.2 && \
asdf global elixir 1.17.3-otp-27
# 作業ディレクトリの設定
WORKDIR /app
# プロジェクトファイルのコピー
COPY . .
# 依存関係のインストール
RUN mix deps.get
# ポートの公開
EXPOSE 4000
# アプリケーションの起動
CMD ["mix", "phx.server"]
トラブルシューティング
# インストールに失敗した場合のクリーンアップ
asdf uninstall elixir 1.17.3-otp-27
asdf uninstall erlang 27.2
# キャッシュのクリア
rm -rf ~/.asdf/downloads/erlang/*
rm -rf ~/.asdf/downloads/elixir/*
# 依存関係の確認(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y \
build-essential \
autoconf \
m4 \
libncurses5-dev \
libwxgtk3.0-gtk3-dev \
libwxgtk-webview3.0-gtk3-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libpng-dev \
libssl-dev \
libssh-dev \
unixodbc-dev \
xsltproc \
fop \
libxml2-utils
# バージョン互換性の確認
elixir --version
erl -eval 'erlang:system_info(otp_release), halt().'
# Mixの再インストール
mix archive.install hex phx_new --force
# プラグインの問題解決
asdf plugin remove elixir
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
バージョンアップグレード手順
# 現在のバージョン確認
asdf current
# 利用可能な新しいバージョンの確認
asdf list all erlang | tail -5
asdf list all elixir | tail -5
# 新しいバージョンのインストール
asdf install erlang 27.2
asdf install elixir 1.17.3-otp-27
# プロジェクトでの段階的アップグレード
cd myproject
# バックアップの作成
cp .tool-versions .tool-versions.backup
# 新しいバージョンの設定
asdf local erlang 27.2
asdf local elixir 1.17.3-otp-27
# 依存関係の更新
mix deps.update --all
mix deps.compile
# テストの実行
mix test
# 問題がある場合はロールバック
# cp .tool-versions.backup .tool-versions