miseの使い方完全ガイド【インストールから応用まで】
あなたは複数のプロジェクトを掛け持ちし、それぞれで異なるNode.jsやPythonのバージョンを使うことに苦労していませんか。あるプロジェクトではNode.js 18、別のプロジェクトではNode.js 20が必要。そんな時、nvmやpyenvといったバージョンマネージャーをプロジェクトごとに切り替える手間は、開発効率を著しく低下させます。
さらに、プロジェクト固有の環境変数を設定するためにdirenvを使ったり、ビルドやテストのコマンドをMakefileやpackage.jsonのスクリプトで管理したりと、多くのツールを使い分けることになります。これでは、新しいプロジェクトに参加するたびに環境設定に時間がかかるといった問題が起こりがちです。
もし、これらすべてを一つのツールで管理できたらどうでしょう。プロジェクトのディレクトリに入るだけで、必要なツールバージョンが自動的に切り替わり、環境変数が読み込まれ、定義されたタスクを実行できるようになるのです。この夢のような開発体験を現実にするのが、今回ご紹介するmiseです。
miseは、あなたの開発環境を劇的にシンプルにし、生産性を向上させる強力なツールです。もう、環境設定の複雑さに悩む必要はありません。
miseとは
miseは、開発ツール、環境変数、タスクをまとめて管理するコマンドラインインターフェース(CLI)ツールです。Node.js、Python、Rubyといったプログラミング言語のバージョン管理だけでなく、TerraformやAWS CLIのような開発ツールまで、数百種類にわたるツールに対応しています。
このツールが目指すのは、開発環境の「mise-en-place」(フランス語で「準備を整える」という意味)です。プロジェクトごとに異なるツールバージョンや環境設定が必要となる現代の開発において、その準備作業を自動化し、一元的に管理します。
miseの主な特徴は以下の3点です。
- 開発ツールのバージョン管理:
asdfやpyenvといった既存のバージョンマネージャーの機能を統合し、プロジェクトごとに最適なツールバージョンを自動で適用します。 - 環境変数の管理:
direnvの代替として機能し、プロジェクトディレクトリに入ると同時に必要な環境変数を読み込みます。.envファイルとの互換性も持ちます。 - タスクランナー:
Makefileやnpm scriptsのように、ビルドやテスト、デプロイといったプロジェクト固有のタスクを定義し、実行できます。
miseは、これらの機能をmise.tomlという一つの設定ファイルに集約します。これにより、新しいプロジェクトをクローンしたり、CI/CD環境を構築したりする際に、開発環境のセットアップが極めて容易になります。高速で開発者フレンドリーな設計も特徴で、多くの開発者の支持を集めています。
インストール方法
miseのインストールは非常に簡単です。以下の手順で、お使いのOSにmiseを導入できます。
macOS / Linux
curlコマンドを使って、スクリプトを実行するのが最も手軽な方法です。
miseのインストール
curl https://mise.run | shこのコマンドは、
miseの実行ファイルを~/.local/bin/miseにインストールします。バージョン確認
インストールが完了したら、バージョンを確認してみましょう。
~/.local/bin/mise --version以下のような出力が表示されれば成功です。
_ __ ____ ___ (_)_______ ___ ____ ____ / /___ _________ / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \ / / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/ /_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/ /_/ by @jdx 2026.6.11 macos-arm64 (2026-06-16)シェルへのフック設定
miseを常に利用できるように、シェルにフックを設定する必要があります。これにより、miseがプロジェクトディレクトリの変更を検知し、自動的に環境を切り替えられるようになります。お使いのシェルに合わせて、以下のコマンドを実行してください。Bashの場合
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc source ~/.bashrcZshの場合
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc source ~/.zshrcFishの場合
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish source ~/.config/fish/config.fish注意:
~/.local/binがPATHに含まれていることを確認してください。含まれていない場合は、.bashrcや.zshrcにexport PATH="$HOME/.local/bin:$PATH"を追加する必要があります。
Windows
Windows環境でmiseを使用する場合、主に以下の方法があります。
WSL (Windows Subsystem for Linux) を利用する
WSL環境があれば、上記macOS/Linuxの手順と全く同じ方法で
miseをインストールできます。これが最も推奨される方法です。Chocolatey または Scoop を利用する
Windowsネイティブで
miseをインストールするには、パッケージマネージャーが便利です。Chocolateyの場合
choco install miseScoopの場合
scoop install misePowerShellへのフック設定
PowerShellを使用している場合は、以下のコマンドでフックを設定します。
echo '~/.local/bin/mise activate pwsh | Out-String | Invoke-Expression' >> $PROFILE . $PROFILE注意:
~/.local/bin/miseの部分は、miseがインストールされた実際のパスに合わせて調整してください。
基本的な使い方
miseは非常に多機能ですが、まずは最低限これだけ知っていれば使えるコマンドを3〜5個ご紹介します。
1. ツールのインストールとバージョン指定 (mise use)
プロジェクトで使うツールとそのバージョンを指定します。これはmiseの最も基本的な機能です。
グローバルにツールをインストールする
システム全体でデフォルトとして使いたいツールバージョンを指定します。
mise use --global node@20 go@1.22このコマンドを実行すると、
nodeのバージョン20系とgoのバージョン1.22系がインストールされ、システム全体で利用可能になります。node -v # v20.x.x go version # go version go1.22.x darwin/arm64プロジェクトローカルでツールバージョンを指定する
特定のプロジェクトディレクトリで作業する場合、そのプロジェクト固有のツールバージョンを指定できます。
cd my-node-project mise use node@18このコマンドは、
my-node-projectディレクトリに.tool-versionsファイルを生成(または更新)し、Node.jsのバージョン18系を指定します。cat .tool-versions # node 18これで、このディレクトリにいる間はNode.js 18が、他のディレクトリではグローバルに設定したNode.js 20が使われます。
2. 設定ファイルに基づいてツールをインストール (mise install)
mise.tomlや.tool-versionsファイルに記述されたツールをまとめてインストールします。新しいプロジェクトをクローンした際に非常に便利です。
# プロジェクトディレクトリに移動
cd my-project
# .tool-versions または mise.toml に記述されたツールをインストール
mise install
もし指定されたツールがまだインストールされていなければ、miseが自動的にダウンロードしてセットアップします。
3. 一時的なバージョン指定でコマンドを実行 (mise exec)
特定のコマンドを、一時的に指定したツールバージョンで実行したい場合に利用します。現在のシェル環境には影響を与えません。
mise exec node@20 -- npm test
このコマンドは、Node.js 20の環境でnpm testを実行します。テストが完了すると、シェルのNode.jsバージョンは元の状態に戻ります。
4. プロジェクトのタスクを実行 (mise run)
mise.tomlに定義されたカスタムタスクを実行します。
例えば、mise.tomlに以下のタスクが定義されているとします。
# mise.toml
[tasks.build]
description = "プロジェクトをビルドする"
run = "echo 'ビルド中...' && npm run build"
このタスクを実行するには、プロジェクトディレクトリで以下のコマンドを使います。
mise run build
すると、mise.tomlに記述されたrunコマンドが実行されます。
便利な使い方・応用例 3選
miseの真価は、これらの基本機能を組み合わせることで発揮されます。ここでは、実際の開発シーンに役立つ応用例を3つご紹介します。
1. プロジェクトごとの複数のツールバージョンを一元管理
多くのプロジェクトでは、Node.js、Python、Goなど複数の言語やツールを組み合わせて使用します。miseを使えば、これらのバージョンをmise.tomlファイル一つでまとめて管理できます。
例えば、フロントエンドはNode.js 20、バックエンドはPython 3.10、インフラはTerraform 1.5を使うプロジェクトがあるとします。
# mise.toml
[tools]
node = "20"
python = "3.10"
terraform = "1.5"
このmise.tomlファイルをプロジェクトのルートディレクトリに配置します。
プロジェクトディレクトリに移動
cd my-fullstack-projectツールをインストール
初めてプロジェクトに参加する開発者は、以下のコマンドを実行するだけで必要なツールがすべてインストールされます。
mise installバージョンを確認
これで、このディレクトリ内では指定されたバージョンのツールが利用可能です。
node -v # v20.x.x python --version # Python 3.10.x terraform version # Terraform v1.5.x
このように、mise.tomlをGitリポジトリに含めることで、チーム全体で開発環境を簡単に統一できます。
2. プロジェクト固有の環境変数と.envファイルの活用
プロジェクトによっては、データベース接続情報やAPIキーなど、環境固有の変数を設定する必要があります。miseはこれをmise.tomlで管理できるだけでなく、一般的な.envファイルもサポートします。
例えば、開発環境と本番環境で異なるAPIキーを使いたい場合を考えます。
# mise.toml
[env]
# デフォルトのAPIキー
API_KEY = "dev_default_key"
そして、.envファイルでローカル開発環境のAPIキーを上書きします。
# .env (Git管理からは除外)
API_KEY="local_development_key_12345"
DB_HOST="localhost"
DB_PORT="5432"
プロジェクトディレクトリに移動
cd my-project-with-env環境変数を確認
miseが自動的に.envファイルを読み込み、API_KEYが上書きされます。echo $API_KEY # local_development_key_12345 echo $DB_HOST # localhostもし
.envファイルが存在しない場合、mise.tomlに定義されたAPI_KEYの値が使われます。この機能により、direnvのようなツールを別途使う必要がなくなります。また、機密情報は.envに記述し、Git管理から除外することで安全に扱えます。
3. ビルド・テスト・デプロイタスクの統一化
開発ワークフローにおいて、ビルド、テスト、デプロイといったタスクは頻繁に実行されます。miseのタスク機能を使えば、これらのコマンドをmise.tomlに定義し、チーム内で統一された方法で実行できます。
例えば、GoとNode.jsを組み合わせたプロジェクトのタスクを定義します。
# mise.toml
[tools]
node = "20"
go = "1.22"
[tasks.frontend-build]
description = "フロントエンドをビルドする"
run = "npm install && npm run build"
[tasks.backend-test]
description = "バックエンドのテストを実行する"
run = "go test ./..."
[tasks.full-build]
description = "フロントエンドとバックエンドを両方ビルドする"
run = [
"mise run frontend-build",
"mise run backend-test", # テストはビルドの一部と考える
"echo 'ビルド完了!'"
]
タスクの実行
各タスクは
mise run <タスク名>で実行できます。# フロントエンドのビルド mise run frontend-build # バックエンドのテスト mise run backend-test # 全体のビルドとテスト mise run full-buildfull-buildタスクのように、複数のタスクを順番に実行する設定も可能です。これにより、複雑なビルドプロセスもシンプルなコマンド一つで実行できるようになります。チームメンバーは、mise.tomlを見るだけでプロジェクトのタスクとその実行方法を把握できます。
他ツールとの組み合わせ
miseは単体でも強力ですが、他のツールと組み合わせることでさらにその価値を高めます。
Dockerとの連携
miseはローカル開発環境のセットアップを簡素化しますが、Dockerはコンテナ化された一貫性のある実行環境を提供します。これら二つは競合するものではなく、補完し合う関係にあります。
- ローカル開発:
miseを使って、開発者のマシンに必要な言語やツールチェーンを迅速にセットアップします。これにより、IDEの連携やファイルシステムへのアクセスが容易になります。 - CI/CDおよびデプロイ: 本番環境やCI/CDパイプラインでは、Dockerコンテナを利用して、完全に分離された一貫性のある環境でアプリケーションを実行します。
- 開発環境のギャップ解消:
mise.tomlに記述されたツールバージョンをDockerfile内で参照し、コンテナイメージをビルドする際に同じバージョンをインストールすることで、ローカルとコンテナ間のギャップを最小限に抑えられます。
例えば、mise.tomlでNode.js 20を指定し、Dockerfileでも同じバージョンを使うように設定できます。
# Dockerfile
ARG NODE_VERSION=20
FROM node:${NODE_VERSION}-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
開発者はローカルでmiseを使ってNode.js 20で開発し、デプロイ時には同じNode.js 20をベースにしたDockerイメージが使われる、といったワークフローが実現します。
VS Codeとの連携
VS Codeのような統合開発環境(IDE)との相性も良好です。
- 統合ターミナル: VS Codeの統合ターミナルは、
miseによってフックが設定されているため、プロジェクトディレクトリに移動するだけで自動的にツールバージョンや環境変数が適用されます。 - 拡張機能: 特定の言語のVS Code拡張機能(例: Python拡張機能)は、
miseによって設定されたPythonインタプリタを自動的に検出して使用できます。これにより、リンティング、デバッグ、コード補完がスムーズに機能します。 .vscode/settings.json: プロジェクト固有のVS Code設定ファイルで、miseで管理されているツールのパスを明示的に指定することも可能です。
Gitとの連携
mise.tomlや.tool-versionsファイルは、プロジェクトリポジトリに含めるべき重要な設定ファイルです。
- 環境の同期: これらをGitで管理することで、チームの全員が同じ開発環境を簡単にセットアップできます。新しいメンバーがプロジェクトに参加する際も、リポジトリをクローンして
mise installを実行するだけで準備が整います。 - バージョン管理: ツールバージョンの変更もGitのコミット履歴として追跡できるため、いつ、誰が、なぜ変更したかを明確に把握できます。
.envファイルの除外:.envファイルは機密情報を含むことが多いため、.gitignoreに追加してGit管理から除外することが推奨されます。miseは.envファイルを自動的に読み込むため、ローカル環境でのみ必要な変数を簡単に管理できます。
# .gitignore
.env
よくある設定・カスタマイズ
miseの設定は主にmise.tomlファイルを通じて行われますが、グローバル設定や.tool-versionsファイルとの互換性も考慮されています。
mise.tomlの具体的な記述例
mise.tomlは、プロジェクトのルートディレクトリに配置される主要な設定ファイルです。以下に、ツール、環境変数、タスクを組み合わせた包括的な例を示します。
# mise.toml
#
# このプロジェクトのツールバージョン定義
[tools]
node = "20" # Node.js 20系を使用
python = "3.10" # Python 3.10系を使用
go = "1.22" # Go 1.22系を使用
aws-cli = "2" # AWS CLI v2を使用
terraform = "1.5" # Terraform 1.5系を使用
# このプロジェクトで利用する環境変数
[env]
# 環境変数 TF_WORKSPACE を "development" に設定
TF_WORKSPACE = "development"
# AWSリージョンを "us-east-1" に設定
AWS_REGION = "us-east-1"
# AWSプロファイルを "my-dev-profile" に設定
AWS_PROFILE = "my-dev-profile"
# カスタムパス変数を追加(例: プロジェクト内のスクリプト用)
PATH = "{{ .ProjectRoot }}/scripts:{{ .PATH }}"
# このプロジェクトで実行可能なタスク定義
[tasks.setup]
description = "プロジェクトの初期セットアップを行う"
run = [
"mise install", # 必要なツールをインストール
"npm install", # Node.jsパッケージをインストール
"pip install -r requirements.txt", # Pythonパッケージをインストール
"echo 'セットアップ完了!'"
]
[tasks.frontend-dev]
description = "フロントエンド開発サーバーを起動する"
run = "npm run dev"
[tasks.backend-start]
description = "バックエンドサーバーを起動する"
run = "go run main.go"
[tasks.plan-infra]
description = "Terraformでインフラのプランを表示する"
run = """
terraform init
terraform workspace select $TF_WORKSPACE || terraform workspace new $TF_WORKSPACE
terraform plan -var-file="config/$TF_WORKSPACE.tfvars"
"""
[tasks.deploy-infra]
description = "Terraformでインフラをデプロイする"
run = """
mise run plan-infra # 事前にプランを表示
terraform apply -auto-approve -var-file="config/$TF_WORKSPACE.tfvars"
"""
このmise.tomlファイル一つで、プロジェクトのツール、環境、タスクのすべてが定義されています。
グローバル設定とローカル設定の使い分け
miseは階層的な設定をサポートしており、グローバル設定、ユーザー設定、プロジェクトローカル設定の順で優先度が決まります。
- グローバル設定:
mise use --global <tool>@<version>で設定され、どのディレクトリでも適用されるデフォルトのバージョンを定義します。これは~/.config/mise/config.tomlまたは~/.config/mise/.tool-versionsに保存されます。 - ユーザー設定:
~/.config/mise/config.tomlに直接記述することで、グローバルな環境変数やタスクを定義できます。 - プロジェクトローカル設定: プロジェクトルートにある
mise.tomlや.tool-versionsファイルで定義され、そのプロジェクトディレクトリ内でのみ適用されます。これが最も優先されます。
この優先順位により、開発者はシステム全体のデフォルトを維持しつつ、特定のプロジェクトで必要な場合にのみ設定を上書きできます。
.tool-versionsファイルとの互換性
miseはasdfの.tool-versionsファイル形式と完全に互換性があります。もしあなたのプロジェクトがすでにasdfで.tool-versionsを使っている場合、miseを導入しても既存の設定をそのまま利用できます。
# .tool-versions
node 18.17.1
python 3.9.18
miseは自動的にこのファイルを読み込み、指定されたツールバージョンを適用します。これにより、既存のプロジェクトへの導入障壁が低くなります。
シェル設定ファイルへのフック記述
miseをインストールした際に、.bashrcや.zshrcなどにeval "$(mise activate <shell>)"のようなフックを設定しました。このフックは、miseがシェルのプロンプト表示前やコマンド実行前にフックすることで、カレントディレクトリに応じてツールバージョンや環境変数を自動的に切り替えるために必要です。
もしフックが正しく設定されていない場合、miseの自動切り替え機能が動作しないことがあります。その際は、再度「インストール方法」のセクションを確認し、お使いのシェルに合ったフックが設定されているか確認してください。
今日からできる実行プラン
miseの導入は、あなたの開発ワークフローを大きく改善する可能性を秘めています。今日から以下の3ステップでmiseを使い始めてみましょう。
ステップ1: miseをインストールする
まずは、お使いのOSにmiseをインストールし、シェルにフックを設定しましょう。
# macOS/Linuxの場合
curl https://mise.run | sh
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc # もしくはzshrc/config.fish
source ~/.bashrc # シェルを再読み込み
インストールが完了したら、mise --versionを実行して正しく動作するか確認してください。
ステップ2: 既存プロジェクトでmise useを使ってツールバージョンを管理してみる
次に、現在作業しているプロジェクトでmiseを試してみましょう。例えば、Node.jsを使っているプロジェクトがあれば、そのディレクトリに移動して特定のバージョンを指定します。
cd my-existing-node-project
mise use node@20
これにより、my-existing-node-projectディレクトリに.tool-versionsファイルが作成されます。このディレクトリでnode -vを実行すると、指定したバージョンが表示されるはずです。他のディレクトリでは、グローバルに設定された(またはデフォルトの)Node.jsバージョンが使われることを確認してみてください。
ステップ3: mise.tomlで環境変数やタスクを定義し、チームで共有してみる
miseの強力な機能を最大限に活用するため、プロジェクトのルートにmise.tomlファイルを作成してみましょう。まずは簡単な環境変数やタスクから始めてみてください。
# mise.toml
[tools]
node = "20"
[env]
MY_PROJECT_ENV = "development"
[tasks.dev-server]
description = "開発サーバーを起動する"
run = "npm run dev"
このファイルをGitリポジトリにコミットし、チームメンバーにmiseの導入を提案してみましょう。チーム全体でmiseを使うことで、開発環境のセットアップと管理が劇的に簡素化され、よりスムーズな開発体験が得られるはずです。
miseは、開発ツールの管理におけるあなたの悩みを解決し、より生産的な開発ワークフローを実現するための強力なパートナーとなるでしょう。ぜひ今日からその恩恵を体験してください。
参考文献
- Mise : The ultimate Dev Tool Manager for seamless workflows
- Introducing mise: A Fast and Dev-Friendly Version Manager for Your Toolchain
- mise GitHub Repository
- mise Documentation