はじめに
私は普段、KotlinやJavaの開発をしていますが、プロジェクトによって、あるいはトラブルシューティングなどのため、実行環境のJavaバージョンを変えたくなるときがあります。
そんな時はJAVA_HOME
を変更する方法もあるでしょうし、SDKMAN!
のようなツールを使う方もいるでしょう。
こういう問題は、Javaに限らず色んな言語・実行環境・ツールで発生します。
私は最近mise
(ミーズ)というツールを使い始めたのですが、便利にバージョン管理できていますよというお話です。
この記事は「mise
を個人でサクッと使う」(ローカルの開発環境を切り替える)ことに的を絞っています。
チームでプロジェクトごとの開発環境を共有する話や、mise
そのものの詳細などは別の記事にする予定です。
mise.toml
も出てきません。
環境
この記事を書いている環境は以下の通りです。
OS: macOS Sequoia 15.3.1
ターミナル: warp v0.2025.02.12.16.51.stable_03
mise: 2025.2.8 macos-arm64 (2025-02-25)
何が良いの?(どう使うの?)
まず「何が良いのか」をお伝えします。
簡単に言えば、コマンド1つで開発環境を切り替えられるのが楽で良いです。
実際に使い方を見てみます。
mise ls
でツール一覧確認
まずmise ls
(ないしmise list
)で、利用可能なツールの一覧を確認できます。
$ mise ls
出力を画像で貼っているのは、バージョンによって色が違うのを見てもらいたいからです。
現在使われているものとそうでないものは、色が違って表示されます。
この環境では、Java
でいうと17
, 19
, 21
が入っていて、現在は21
が使われているのが確認できました。
mise use
でバージョン変更
ツールのバージョンを変えたい場合は、以下のようにmise use
を使います。
ためしにJava
を17
に切り替えましょう。
$ mise use java@openjdk-17.0.2
これだけです!
あっさりと、使用する環境を変更できました。
mise ls
で確認しましょう。
ちゃんと17
になっていますね!
一応、Javaのコマンドでもバージョンを確認してみましょう。
$ java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
ちゃんとJava
の17
が使われていることが確認できました!
mise use
を使う際、オプションなしだとカレントディレクトリ以下の環境が変更されます。
グローバルに(端末全体に)変更を反映したい場合、下記のように-g
オプションを付与してください。
$ mise use -g java@openjdk-17.0.2
導入
インストール
「何ができるのか」「どう便利なのか」の話が終わったところで、インストール方法を説明します。
と言っても、↓の公式ドキュメントに書いてあるとおりです。OSごとの導入方法や、Homebrewを使う場合など説明があるので、ご自分の環境に応じたコマンドを確認してください。
一例として、ここではhomebrew経由でインストールします。
$ brew install mise
インストールできたことを確認するため、バージョンを見てみましょう。
$ mise --version
_ __
____ ___ (_)_______ ___ ____ ____ / /___ _________
/ __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
/ / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/
/_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/
/_/
2025.2.8 macos-arm64 (2025-02-25)
ロゴの主張が激しいですが、ちゃんと出てますね。
アクティベート
アクティベートとは
インストールできたら次はアクティベートの設定をします。
この記事では細かい話は省きますが、アクティベートすると常に最適な環境変数やPATH
が使われるので便利になります。
アクティベート方法
アクティベートの方法も、↓の公式ドキュメントに書いてある通りです。OSや、使っているシェルごとにアクティベート用のコマンドが用意されているので実行してください。
一例として、zsh
を使っている場合は↓ですね。
$ echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
要は.zshrc
にeval "$(mise activate zsh)"
を加えています。
シェルの設定を書き換えた後は、設定を読み込み直しましょう
$ source ~/.zshrc
ここまで出来たら、mise doctor
(ないしmise dr
)で問題ないことを確認しましょう。
$ mise dr
version: 2025.2.8 macos-arm64 (2025-02-25)
activated: yes
shims_on_path: no
(中略)
No problems found
出力が長いので省略しましたが、activated: yes
、No problems found
となっていれば準備完了です!
使う
ツールのインストール
インストールとアクティベートが済んだだけでは、まだ何もツールがありません。
ためしにmise ls
をやってみても何も出てこないと思います。
$ mise ls
Tool Version Source Requested
というわけで、さっそく管理したいツールをインストールしましょう。
インストールする時は、下記のコマンドを実行します。
$ mise install <ツール名>@<バージョン>
ちなみにバージョンを省略すると、最新の安定版がインストールされます。
私は今回、JavaのOpenJDK 21を入れたいので、下記のように実行します。
$ mise install java@openjdk-21.0.2
成功すれば、下記のようにmise ls
の結果に出てくるようになります。
$ mise ls
Tool Version Source Requested
java openjdk-21.0.2
使えるバージョンのチェック
ちなみに、ツールの使えるバージョン等を確認したい時は、mise ls-remote
が使えます。
$ mise ls-remote <ツール>
Javaで試すとこんな感じですね。
Javaはバージョンと言うかディストリビューションが多すぎて大量に出力されるので、略しまくってますが、色々扱えるよという雰囲気は感じてもらえるのではないでしょうか。
$ mise ls-remote java
adoptopenjdk-jre-11.0.15+10
adoptopenjdk-jre-11.0.16+101
adoptopenjdk-jre-11.0.16+8
(中略)
corretto-17.0.11.9.1
corretto-17.0.12.7.1
corretto-17.0.13.11.1
corretto-17.0.14.7.1
(中略)
graalvm-community-21.0.0
graalvm-community-21.0.1
graalvm-community-21.0.2
(中略)
mandrel-23.1.3.1-Final+java21
mandrel-23.1.4.0-Final+java21
mandrel-23.1.5.0-Final+java21
mandrel-23.1.6.0-Final+java21
(中略)
openjdk-19.0.0
openjdk-19.0.1
openjdk-19.0.2
(中略)
temurin-jre-21.0.3+9.0.LTS
temurin-jre-21.0.4+7.0.LTS
temurin-jre-21.0.5+11.0.LTS
temurin-jre-21.0.6+7.0.LTS
(後略)
使うツールの指定
後は記事の冒頭で説明したのと同じですが、mise use
で使うツールを指定するだけです。
$ mise use <ツール>@<バージョン>
さっき入れたJavaのOpenJDK 21を使いたい場合はこうですね。
$ mise use java@openjdk-21.0.2
mise ls
を実行すると、use
で指定したツールの色が変わって、使わないものはグレーになっていますね。
インストールされていないものをmise use
ちなみに、mise use
は使うツールの切り替えに使うと説明してきましたが、未インストールのツールをmise use
で指定すると、そのツールをインストールした上で、それを使うように切り替えます。
試しにまだ入っていないJava
の23
を入れてみましょうか。
$ mise use java@openjdk-23.0.2
mise To enable macOS integration, run the following commands:
sudo mkdir /Library/Java/JavaVirtualMachines/openjdk-23.0.2.jdk
sudo ln -s /Users/fujita/.local/share/mise/installs/java/openjdk-23.0.2/Contents /Library/Java/JavaVirtualMachines/openjdk-23.0.2.jdk/Contents
openjdk version "23.0.2" 2025-01-21
OpenJDK Runtime Environment (build 23.0.2+7-58)
OpenJDK 64-Bit Server VM (build 23.0.2+7-58, mixed mode, sharing)
mise java@openjdk-23.0.2 ✓ installed
mise ~/.config/mise/config.toml tools: java@openjdk-23.0.2
use
の出力だけ見ても分かりにくいので、例によってmise ls
を見てみると
ちゃんと23
が使われていますね!