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^)/
環境
- もっと言うと古いバージョンのElixirを使いたい状況になった
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環境構築
必要なソフトをインストール
% 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でインストールした想定のバージョンに切り替えて確認
インストールされちゅうバージョンを確認。
% 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を実行できるようになっちょった
参考サイト
Author And Source
この問題について(Elixirのバージョン管理環境をasdfを使って作った), 我々は、より多くの情報をここで見つけました https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .