4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 11

mise を使って Erlang と Elixir をインストールする

Last updated at Posted at 2024-12-24

はじめに

今まで Erlang や Elixir 、 Node.js 、 Python などの言語、 Terraform 、 AWS CLI 、 jq などのツール類などは asdf で macOS にインストールしてました

しかし、知人から「最近は mise が良いよ」という話を聞いたので、 mise (ミーズ)に切り替えてみました

asdf の無効化

asdf で各種言語、ツールのバージョンを管理している状態を無効化します

最終的には asdf をアンインストールすれば良いのですが、全て消してから戻るのは面倒なので、とりあえず無効化だけしておきます

asdf を Homebrew でインストールしている場合、シェルの設定ファイル(bash の場合は ~/.bashrc 、 zsh の場合は ~/.zshrc )から以下の行をコメントアウトします

. /opt/homebrew/opt/asdf/libexec/asdf.sh

asdf.sh のバスは環境によって違うことがあります

asdf.sh の書いてある行をコメントアウトしてください

mise のインストール

mise の Getting Started に従ってインストールします

macOS の場合は Homebrew でインストールします

Homebrew は以下のコマンドでインストールします

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew で mise をインストールします

brew install mise

実行すると、最後に以下のようなメッセージが表示されます

If you are using fish shell, mise will be activated for you automatically.

zsh completions have been installed to:
  /opt/homebrew/share/zsh/site-functions

メッセージに書かれてある通り、 fish を使っている場合は自動的に mise が有効化されます

bash の場合は以下のコマンドを実行し、 mise を有効化します

echo 'eval "$(/opt/homebrew/bin/mise activate bash)"' >> ~/.bashrc

zsh の場合は以下のコマンドを実行し、 mise を有効化します

echo 'eval "$(/opt/homebrew/bin/mise activate zsh)"' >> ~/.zshrc

Erlang のインストール

まずは Erlang をインストールしてみましょう

mise には Erlang と Elixir のプラグインが最初から含まれているため、プラグインのインストールは不要です

新しいターミナルを開き、以下のコマンドを実行します

mise use -g erlang@latest

use -g によって、デフォルトで使用するバージョンを指定しています

@latest で最新版をインストールします

以下のような結果が表示されます

mise erlang@27.2 ✓ installed
mise ~/.config/mise/config.toml tools: erlang@27.2

Erlang のバージョンを確認してみます

erl -noshell -eval 'erlang:display(erlang:system_info(system_version))' -eval 'init:stop()'

実行結果

"Erlang/OTP 27 [erts-15.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]\n"

Elixir のインストール

mise use -g elixir@latest

以下のような結果が表示されます

mise elixir@1.18.0-otp-27 ✓ installed
mise ~/.config/mise/config.toml tools: elixir@1.18.0-otp-27

Elixir のバージョンを確認してみます

elixir --version

実行結果

Erlang/OTP 27 [erts-15.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Elixir 1.18.0 (compiled with Erlang/OTP 25)

バージョン指定のインストール

一時ディレクトリー配下で別のバージョンをインストールしてみます

mkdir mise_test
cd mise_test

まず Erlang

mise use erlang@26.2.5.6

実行結果

mise erlang@26.2.5.6 ✓ installed
mise ~/mise_test/mise.toml tools: erlang@26.2.5.6

続いて Elixir

mise use elixir@1.16.3

実行結果

mise elixir@1.16.3 ✓ installed
mise ~/mise_test/mise.toml tools: elixir@1.16.3

mise_test/mise.toml が以下の内容で作成されます

[tools]
elixir = "1.16.3"
erlang = "26.2.5.6"

これにより、 mise_test ディレクトリー配下では mise.toml に書かれたバージョンが使用されるようになりました

バージョンを確認します

elixir --version

実行結果

Erlang/OTP 26 [erts-14.2.5.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Elixir 1.16.3 (compiled with Erlang/OTP 24)

asdf と同じ .tool-versions でバージョンを指定することもできます

.tool-versions の場合は以下のように記述します

elixir 1.16.3
erlang 26.2.5.6

.tool-versionsmise.toml の両方が存在する場合、 mise.toml が優先されます

.tool-versions があり、 mise.toml がない状態で mise use を実行すると、 .tool-versions が更新されます

つまり、 asdf を使っていた場合、何も変えずにそのまま mise を使うことができます

インストール済バージョンの確認

以下のコマンドでインストール済バージョンを確認することができます

現在有効になっているバージョンは ~/mise_test/.tool-versions のように、バージョン指定している設定ファイルのパスが表示されます

mise ls

実行結果

elixir     1.16.3         ~/mise_test/.tool-versions  1.16.3
elixir     1.18.0
erlang     26.2.5.6       ~/mise_test/.tool-versions  26.2.5.6
erlang     27.2

-c を付けることで、現在有効になっているバージョンだけを表示することができます

mise ls -c

実行結果

elixir     1.16.3         ~/mise_test/.tool-versions  1.16.3
erlang     26.2.5.6       ~/mise_test/.tool-versions  26.2.5.6

インストール可能なバージョンの確認

以下のコマンドで Elixir のインストール可能なバージョンを確認することができます

mise ls-remote elixir

実行結果

0.12.4
0.12.5
0.13.0
...
1.18.0
1.18.0-otp-25
1.18.0-otp-26
1.18.0-otp-27

一括インストール

mise_test/.tool-versions を作っていた場合は削除し、 mise_test/mise.toml を以下の内容で作成します

[tools]
elixir = "1.17.3"
erlang = "27.2"
node = "22.12.0"
python = "3.13.1"
yarn = "4.5.3"

Node.js や Python も mise 自体にプラグインが含まれていますが、 yarn は外部のプラグインを使用します

しかし、外部のプラグインを使用する場合も、個別にプラグインのインストールをする必要はありません

mise.toml.tool-versions があるディレクトリー内で以下のコマンドを実行すれば、プラグインも含めて一括インストールしてくれます

mise install

環境変数の設定

環境変数は mise.toml 内で以下のように指定できます

[env]
MIX_ENV = "dev"
_.file = ".env"
_.source = "./env.sh"

.envdotenv による環境変数指定です

HELLO="dotenv"
HI="Elixir"

./env.sh はシェルスクリプトによる環境変数指定です

export MY_ENV_VAR="my value"

これらのファイルがある状態で環境変数を表示すると、正しく読み込まれています

printenv

実行結果

...
HELLO=dotenv
HI=Elixir
MIX_ENV=dev
MY_ENV_VAR=my value

これにより、特定ディレクトリー配下での環境変数設定が可能になっています

asdf でよく使っていた direnv も使用できますが、非推奨になっています

Windows での mise について

mise は Windows にもインストールできます

後述しますが、 Python や Node.js では使えるものの、 Erlang や Elixir では使い物になりません

今後に期待です

以下のように winget を使用して mise をインストールします

winget install jdx.mise

scoop でのインストール方法も書かれていますが、まだプルリクエストがマージされていないため、エラーになります

scoop install mise

PowerShell で以下のコマンドを実行することで、 mise でインストールした言語、ツールが有効化されます

$shimPath = "$env:USERPROFILE\AppData\Local\mise\shims"
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
$newPath = $currentPath + ";" + $shimPath
[Environment]::SetEnvironmentVariable('Path', $newPath, 'User')

Python の最新版は以下のコマンドでインストールできます

mise use -g python@latest

ただし、 Erlang は未対応のため、 mise ではインストールできません

Elixir は対応しているものの、バージョン番号の指定方法が macOS の場合と違っていたり、ダウンロード元が違っていたり(macOS は hex.pm 、 Windows は GitHub)するので、同じようには使えません

例えば 1.17.3 を使いたい場合、以下のようにバージョンを指定します

mise use -g elixir@1.17.3-elixir-otp-27

macOS の場合は elixir@1.17.3 もしくは elixir@1.17.3-otp-27 なので、 macOS と Windows でバージョン指定ファイルが共有できません

mise の Windows 版は vfox のプラグインを利用しています

しかし、 vfox の Elixir プラグインの仕様が前述のようになっているため、このままだと macOS との統合が厳しい状況です

Issue は上がっているものの対応されていないので、現状では期待できなさそうです

asdf のアンインストール

使っているツールが一通り mise でインストール、使用できた場合、 asdf でインストールした各種言語、ツールプラグイン、 asdf 自体をアンインストールしましょう

まとめ

mise を使って Erlang と Elixir をインストールできました(macOS では)

インストールも高速だし、プラグインも含めて一括インストールできるなど便利なので、 asdf から mise に移行したいと思います

Windows でも出来れば完璧だったのですが

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?