Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
31
Help us understand the problem. What are the problem?
@nishiuchikazuma

Elixirのバージョン管理環境をasdfを使って作った

Debian Linux 8.9な環境でElixirを使わないといけなくなったがやけど、OSXでbrewで構築しているElixirとバージョンが違うことが判明したきOSXで異なるバージョンのElixirを使う方法を調べました。

  • 2021/08/26 修正:いま時点のシェル設定方法に変更。@kikuyuta さんありがとうございました。
  • 2019/05/31 追記:最近だとbrew install asdfできるようだけど、git cloneする方法を書いてます。
Erlang Elixir
Debian Linux 8.9 20.1 1.5.0
macOS High Sierra(10.13.6) brew 21.1 1.7.4

ざっくりまとめると

  • Elixirのバージョンを切り替えて使いたい
    • もっと言うと古いバージョンのElixirを使いたい状況になった
  • kiexとasdfを比較してasdfを採用した(ちゃんと開発が続きゆため)
  • brewでインストールしたErlang/Elixirはアンインストールする必要がある
  • できた\(^o^)/

環境

OS: macOS High Sierra 10.13.6
Elixir: % brew install elixirでインストール

% iex --version
Erlang/OTP 21 [erts-10.1.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

IEx 1.7.3 (compiled with Erlang/OTP 21)

Erlang/Elixirをアンインストール

Erlang/Elixirの管理方法が変わるきbrewでインストールしているErlang/Elixirをアンインストールします。brew uninstallコマンドだけやったらアンインストールされるのは直近のバージョンだけみたいやき、「--force」オプションをつけてコマンドを実行します。Erlang 1.6GBもあったのか…。

% brew uninstall --force erlang elixir
Uninstalling erlang... (34,012 files, 1.6GB)
Uninstalling elixir... (826 files, 11MB)

asdf環境構築

公式サイトREADMEどおりに実行します。

必要なソフトをインストール
% brew install coreutils automake autoconf openssl libyaml readline libxslt libtool unixodbc

asdf関連ファイルをgit clone
% git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.6.0

シェルを設定
<bashの場合>
公式ドキュメント通りに以下を実行して .bash_profile に必要な設定をする。
% echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.bash_profile

<zshの場合>
公式ドキュメント通りに以下を実行して .zshrc に必要な設定をする。
% echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.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

インストール

Erlangのインストールは時間がかかるので注意。

% asdf install erlang 20.1
% asdf install erlang 21.1

% asdf install elixir 1.5.0
% asdf install elixir 1.7.4

使用するバージョンを指定

% asdf global erlang 20.1
% asdf global elixir 1.5.0

確認

まずはDebian想定のバージョンから。

% asdf current
elixir         1.5.0   (set by /Users/nishiuchi/.tool-versions)
erlang         20.1    (set by /Users/nishiuchi/.tool-versions)

% iex --version
Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

IEx 1.5.0

brewでインストールした想定のバージョンに切り替えて確認:hugging:

インストールされちゅうバージョンを確認。
% asdf list
elixir
  1.5.0
  1.7.4
erlang
  20.1
  21.1

brewインストール想定のバージョンに切り替え。
% asdf global elixir 1.7.4
% asdf global erlang 21.1

利用するバージョンを確認。
% asdf current
elixir         1.7.4   (set by /Users/nishiuchi/.tool-versions)
erlang         21.1    (set by /Users/nishiuchi/.tool-versions)

切り替わっているかどうかiexで確認。
% iex --version
Erlang/OTP 21 [erts-10.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

IEx 1.7.4 (compiled with Erlang/OTP 21)

ErlangとElixirのバージョンのペアが違っていた場合、Elixirがエラーを出して終了したりエラー出つつもなんとか起動しようとしたりするき注意が必要です(きっとダメ)。

asdfコマンドメモ

  • asdfのアップデート(Gitからインストールしている場合)
% asdf update
  • プラグインを追加
() asdf plugin-add <name> <git-url>
% 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 list-all <name>
% asdf list-all elixir
  • インストールされちゅうバージョンをリスト表示
() "asdf list" or "asdf list <name>"
% asdf list elixir
  • 現在使っているソフトとバージョンをリスト表示
% asdf current
  • インストール
() asdf install <name> <version>
% asdf install elixir 1.5.0
  • アンインストール
() asdf uninstall <name> <version>
% asdf uninstall elixir 1.5.0
  • globalとlocal

環境の切り替えが頻繁になければglobalで切り替え対応だけでいいっぽい。

erlangをインストールした時のメッセージから抜粋:
Erlang 20.1 has been installed. Activate globally with:

    asdf global erlang 20.1

Activate locally in the current folder with:

    asdf local erlang 20.1

まとめ

  • asdfを使ってErlang/Elixirの環境を切り替えて使えるようになりました
  • エディタ(Atom)を再起動したらPATHを取ってきてくれてエディタ内でElixirを実行できるようになっちょった:hugging:

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
31
Help us understand the problem. What are the problem?