Help us understand the problem. What is going on with this article?

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

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

追記(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の場合>
公式サイトに書いているとおりにする。
% echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile
% echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile

<zshの場合>
.zshrcに以下4行追記する。
% echo "autoload -Uz compinit && compinit" >> ~/.zshrc
% echo "export PATH=$HOME/.asdf/bin:$PATH" >> ~/.zshrc
% echo "source $HOME/.asdf/asdf.sh" >> ~/.zshrc
% echo "source $HOME/.asdf/completions/asdf.bash" >> ~/.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:

参考サイト

kochi-ex
Elixir / Nerves / Phoenix / Erlang を中心とした研究・開発・勉強を楽しむ非営利の団体です。高知県を中心に活動してます。オフ会を不定期に開催しています。
https://kochi-ex.connpass.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした