はじめに
先日、「miseを使ったら開発環境のバージョン管理が快適になった」という記事を書きました。
その途中で「そもそもmise
って何?」という概要の節を挟もうと思っていたのですが、書いていたらそれなりのボリュームになって概要という感じでもなくなり、「使い方」という記事のテーマから脱線しそうだったので、別記事として書くことにしました。
こちらでは「そもそもmiseとは何なのか」を説明したうえで、設定ファイルであるmise.toml
や、チームでの環境統一についても扱います。
基本的な使い方やセットアップ方法が知りたい方は先述の記事をご参照ください。
miseとは?
改めてですが、この記事ではmise
という「開発環境のセットアップやバージョン管理」のためのツールについて説明します。
公式ドキュメントが充実しているのですが、充実しすぎていると言うか、説明が詳しすぎる部分もあり、この記事を書いている時点では日本語化もされていないようなので、この記事でザックリと解説します。
名前・発音
mise
の発音はミーズ
です。公式でもpronounced "meez"
とされています。
別名(?)としてmise-en-place
とも言います。名前の由来はフランスの料理用語で、ざっくり言うと「準備する」とか「整える」みたいな言葉のようです。
特徴・機能
繰り返しになりますが、mise
は開発環境のセットアップツールです。
asdf
などの後発にあたるツールですが、こちらはRust製で高速かつシンプルであり、asdf
との互換もあるのが特徴です。
提供している機能は大きく下記の3つです。先述の記事で触れたのは、主に1つ目のインストール&バージョン管理の話になります。
- 開発ツール・ランタイムのインストール&バージョン管理
- 環境変数の管理
- タスクランナー
アクティベート
先述の記事でも少し触れましたが、mise
のインストール後にはアクティベートという作業を行うことになります。
アクティベートの設定を行うと、プロンプトが実行される度(つまり新しいシェルセッションを開いたり、cd
でディレクトリを移動したりする度)に、毎回mise activate
が働き、カレントディレクトリやプロジェクトに応じた環境変数やPATH
を使ってくれるようになります。
CI/CDのような非対話的な場面ではshims
が推奨されるのですが、普通の(対話的なシェルを使う)開発環境ならアクティベートが推奨されています。
アクティベートについてもっと詳しく知りたければ、公式のFAQにある"What does mise activate do?"も参照してください。
管理できるツール
mise
は多くの言語やツールに対応しています。まず公式でCore Tools
として紹介されている組み込みプラグインは、記事執筆時点では以下の通り。
- Bun
- Deno
- Elixir (experimental)
- Erlang
- Go
- Java
- NodeJS
- Python
- Ruby
- Rust (experimental)
- Swift (experimental)
- Zig
詳細は公式ページを参照してください。
プラグインについて
以前はプラグインを利用してツールを追加することも可能でしたが、現在はセキュリティの観点から非推奨になっています。core tools
とaqua
/ubi
の仕組みがあるため、多くのツールはプラグインなしで動作します。
これも詳細は↓の公式ドキュメントを参照ください。
「で、プラグイン非推奨はわかったけど自分の使いたいあのツールは使えるの?」ということが知りたい場合には、↓のregistry.toml
を探して、
名前がありそうだったら、mise ls-remote
で探してみるといいかもしれません。
mise ls-remote <ツール名>
チームでの環境統一
個人でmise
を利用するだけなら、mise use
コマンドを使うだけで開発環境のバージョンを切り替えられます。しかし、チームでプロジェクトごとの開発環境を統一したい場合、mise.toml
をチームで共有すると便利です。
mise.toml
とは
mise.toml
は、要はmise
の設定ファイルなのですが、プロジェクトごとの開発環境を定義することができます。このファイルがプロジェクトに含まれていることで、チーム内で同じツールやバージョンを使用するように統一できます。
例えば、Node.js
とJava
のバージョンを指定したかったらこういう感じですね。
[tools]
node = "18.16.1"
java = "openjdk-21.0.2"
ちなみに自分で作成しなくても、mise use
コマンドを使うと、カレントディレクトリに無かったら自動で作成されます。
つまり、下記のコマンドを実行すると
$ mise use java@openjdk-21.0.2
下記のファイルが(カレントディレクトリに)生成されます。
[tools]
java = "openjdk-21.0.2"
作った覚えのないmise.toml
がプロジェクト内にあったら、それは恐らく過去に実行したmise use
で作成されたものでしょう。
なお、mise.toml
の影響範囲はカレントディレクトリ以下ですので、通常は各プロジェクトの直下に配置します。
mise.toml
をはじめとした設定ファイルについて、さらに詳しくは公式サイトをご確認ください。
チーム開発での活用
mise.toml
が配置された状態でmise install
を実行すると、ファイルで指定されているバージョンのツールがインストールされます。
$ mise install
例えば、チームが開発しているプロジェクトやサービスが複数ある時に、それぞれで異なるバージョンの実行環境やフレームワークを使いたい、というケースがあると思います。
そんな場合、プロジェクトごとにmise.toml
を用意しておけば(そしてmise
がアクティベートされていれば)、自動で指定のバージョンが使われるようになります。
自然とチーム全員が同じバージョンで動作させることができ、誤ったバージョンで動かしてしまって環境ハマリを起こすリスクも防げます。
おわりに
「mise
とは何か」という話と、mise.toml
をチーム開発で活用することについて、簡単にまとめました。
mise
はシンプルに使えますが、機能は他にも色々と用意されているようです。
また新しい情報に出会ったら整理して記事にしたいと思います。