2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

開発環境の管理ツール mise ってなんだ?

Posted at

はじめに

先日、「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 toolsaqua/ubiの仕組みがあるため、多くのツールはプラグインなしで動作します。

これも詳細は↓の公式ドキュメントを参照ください。

「で、プラグイン非推奨はわかったけど自分の使いたいあのツールは使えるの?」ということが知りたい場合には、↓のregistry.tomlを探して、

名前がありそうだったら、mise ls-remoteで探してみるといいかもしれません。

sh
mise ls-remote <ツール名>

チームでの環境統一

個人でmiseを利用するだけなら、mise useコマンドを使うだけで開発環境のバージョンを切り替えられます。しかし、チームでプロジェクトごとの開発環境を統一したい場合、mise.tomlをチームで共有すると便利です。

mise.tomlとは

mise.tomlは、要はmiseの設定ファイルなのですが、プロジェクトごとの開発環境を定義することができます。このファイルがプロジェクトに含まれていることで、チーム内で同じツールやバージョンを使用するように統一できます。

例えば、Node.jsJavaのバージョンを指定したかったらこういう感じですね。

mise.toml
[tools]
node = "18.16.1"
java = "openjdk-21.0.2"

ちなみに自分で作成しなくても、mise useコマンドを使うと、カレントディレクトリに無かったら自動で作成されます。
つまり、下記のコマンドを実行すると

sh
$ mise use java@openjdk-21.0.2

下記のファイルが(カレントディレクトリに)生成されます。

mise.toml
[tools]
java = "openjdk-21.0.2"

作った覚えのないmise.tomlがプロジェクト内にあったら、それは恐らく過去に実行したmise useで作成されたものでしょう。

なお、mise.tomlの影響範囲はカレントディレクトリ以下ですので、通常は各プロジェクトの直下に配置します。

mise.tomlをはじめとした設定ファイルについて、さらに詳しくは公式サイトをご確認ください。

チーム開発での活用

mise.tomlが配置された状態でmise installを実行すると、ファイルで指定されているバージョンのツールがインストールされます。

sh
$ mise install

例えば、チームが開発しているプロジェクトやサービスが複数ある時に、それぞれで異なるバージョンの実行環境やフレームワークを使いたい、というケースがあると思います。
そんな場合、プロジェクトごとにmise.tomlを用意しておけば(そしてmiseがアクティベートされていれば)、自動で指定のバージョンが使われるようになります。
自然とチーム全員が同じバージョンで動作させることができ、誤ったバージョンで動かしてしまって環境ハマリを起こすリスクも防げます。

おわりに

miseとは何か」という話と、mise.tomlをチーム開発で活用することについて、簡単にまとめました。

miseはシンプルに使えますが、機能は他にも色々と用意されているようです。
また新しい情報に出会ったら整理して記事にしたいと思います。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?