asdf-elixir

Elixirasdfバージョン管理OTPErlang関数型プログラミングプラグイン

GitHub概要

asdf-vm/asdf-elixir

Elixir plugin for asdf version manager

スター514
ウォッチ11
フォーク77
作成日:2014年12月18日
言語:Shell
ライセンス:MIT License

トピックス

なし

スター履歴

asdf-vm/asdf-elixir Star History
データ取得日時: 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