😸

miseのすすめ

に公開

はじめに

皆さんはバージョン管理ツール何を使っていますか?私は「mise」をおすすめします。
複数の言語やツールを扱うために様々なバージョン管理ツールを駆使していて、この煩雑な管理方法をもっとスマートにできないものかという不満を「mise」が解決してくれました。

基本的な使い方

インストール

macOSであればHomebrewでインストールします

brew install mise

他のプラットフォームについては、公式ドキュメントを参照してください。
https://mise.jdx.dev/getting-started.html#installing-mise-cli

基本の使い方

# 言語のバージョンリストを確認
mise ls-remote node

# 言語のバージョンを指定してインストール
mise install node@24.0.1
mise install node@22.15.0

# 現在のディレクトリではver22.15.0を使う
mise use node@22.15.0

# グローバルではver24.0.1を使う
mise global node@24.0.1

これで現在のディレクトリとそうでないディレクトリで異なるnodeを使う環境が簡単に構築できました。

プロジェクト設定ファイル

mise use ツール@バージョンを行うとそのディレクトリの.mise.tomlにバージョンが定義されます。
なので直接ファイルを作成して記述することでプロジェクトの環境を定義させることも可能です。

mise.toml
[tools]
python = "3.13.3"
uv = "0.7.3"

この設定により、プロジェクトディレクトリに入ると自動的に指定されたバージョンが有効になります。

モノレポ構成

フロントエンドにNode、バックエンドにPython、を使うようなモノレポ構成なプロジェクトでも、それぞれのバージョンを1つの設定ファイルで管理できます。

mise.toml
[tools]
node = "22.15.0"
python = "3.13.3"
uv = "0.7.3"

asdfとの互換

asdfとの互換があり.tool-versionsそのまま利用できるのも嬉しい点の1つです。
https://mise.jdx.dev/configuration.html#tool-versions

もちろんasdfからmiseの設定ファイルへ移行することも可能です。

mv ~/.tool-versions ~/.tool-versions.bak
# ツール@バージョンの形式に置き換えてmiseにインストールさせる
cat ~/.tool-versions.bak | tr ' ' '@' | xargs -n2 mise use -g

miseの高度な機能

1. 環境変数管理

私が導入しようとしたきっかけはこれで、miseは環境変数の管理も簡単に行えます。
.mise.tomlファイルに[env]セクションを追加するだけで、プロジェクトごとに環境変数を定義できます

.mise.toml
[env]
NODE_ENV = "production"
DATABASE_URL = "mysql+pymysql://test_user:password@localhost:3306/test_db"
# config_rootで設定ファイルのパスが取得できます
PYTHON_PATH = "{{config_root}}/backend",

個人的には、チームで共有にしたい情報はmise.tomlで指定してコミットに含める、センシティブな情報は別にmise.local.tomlで手元で管理するのがおすすめです

またコマンドから設定することも可能です

mise set NODE_ENV="development"
echo $NODE_ENV
# development

また、.envファイルを指定することも可能です

.mise.toml
[env]
_.file = [".env", ".env.local"]

2. タスクランナー機能

miseには組み込みのタスクランナー機能もあり、プロジェクト固有のコマンドを定義・実行できます

.mise.toml
[tasks.build]
run = "npm run build"

[tasks.start]
# buildの実行後にstartさせられる
depends = ['build']
run = "npm run start"

[tasks.lint]
run = [
  "uv run ruff check .",
  "uv run mypy ."
]

これにより、mise run startのように簡潔なコマンドでタスクを実行させることが可能です。

まとめ

miseは、複数の言語やツールを扱う開発環境において、バージョン管理の煩わしさを大幅に軽減してくれるツールです。
miseで、「このプロジェクトには何のバージョンが必要だっけ?」みたいな疑問を持つ必要もなく導入もごく僅かな手間で済むため、開発効率もかなり上がるかと思います。
ぜひ試してみてください!

参考資料

https://github.com/jdx/mise
https://mise.jdx.dev

GitHubで編集を提案

Discussion