
こんにちは!プログラミング初心者のOZです。今日は、開発現場でよく聞く「mise」というツールについて、プロ太先生に教えてもらいました!

プロ太先生、最近「mise」っていうツールの名前をよく聞くんですが、これって何なんですか?

いい質問だね!miseは簡単に言うと「開発で使うツールのバージョンを自動で切り替えてくれるツール」だよ。

バージョンの切り替え…?

例えば、OZ君がWebサイトを作る時に使うNode.jsっていう技術があるんだけど、これにはバージョン16、18、20とかいろんなバージョンがあるんだ。プロジェクトによって使うバージョンが違うから、いちいち手動で切り替えるのが面倒なんだよ。
実際にありがちな問題を体験してみよう

具体的にはどんな感じで面倒なんですか?

実際の例で説明してみるね。OZ君がWebサイト制作会社でアルバイトを始めたとしよう。そして、月曜日、古いECサイトの修正を頼まれました。
# 古いプロジェクト
cd old-ec-site
nvm use 16 # Node.js 16に切り替え
npm start # サイト起動

火曜日、今度は新しいSPA(シングルページアプリケーション)の開発です。
cd new-spa-project
nvm use 20 # Node.js 20に切り替え
npm start # サイト起動

あー、毎回手動で切り替えるのか…確かに面倒ですね。

そうそう!しかも、切り替え忘れると「あれ?なんでエラーが出るんだろう?」ってなって、原因がわからずに時間を無駄にしちゃうんだ。
miseがあるとどう変わる?

miseを使うとどうなるんですか?

最初に一度だけ設定しておけば、あとはフォルダを移動するだけで自動的にバージョンが切り替わるんだ!
# 最初の設定(一回だけ)
cd old-ec-site
mise use node@16 # このプロジェクトはNode.js 16を使うよ
cd new-spa-project
mise use node@20 # このプロジェクトはNode.js 20を使うよ

設定後は、もうコマンドを打つ必要がない!
cd old-ec-site
# → 自動的にNode.js 16に切り替わる!
cd new-spa-project
# → 自動的にNode.js 20に切り替わる!

おおー!これは確かに便利ですね!
新人さんの環境構築も楽になる

あと、チーム開発でも威力を発揮するよ。新しいメンバーが入った時のことを考えてみて。

僕もそうですが、、新人さんは環境構築でつまずきがちですよね…

従来の方法だと、新人さんはSlackでこんな質問をしがち
「Node.jsのバージョンはいくつですか?」
「Pythonは3.10でしたっけ?3.11でしたっけ?」
「nvmの設定がうまくいきません…」

でもmiseがあれば、、、、
git clone our-project # プロジェクトをダウンロード
cd our-project # フォルダに移動
mise install # 必要なバージョンを自動インストール

これだけで環境構築完了!

新人研修の時間がすごく短縮されそうですね!
あれ?Dockerと何が違うの?

でも先生、Dockerっていうのも環境を管理するツールですよね?miseとDockerって何が違うんですか?

おお、いい質問!これは多くの人が混乱するポイントだね。
Dockerは「別世界を作る」技術

Dockerは「仮想的な別のパソコン」を作る技術なんだ。
docker run -it node:18 bash # Node.js 18が入った「別世界」に入る
docker run -it node:20 bash # Node.js 20が入った「別世界」に入る

別世界…?

君のパソコンの中に、仮想的な「パソコンA」「パソコンB」を作って、それぞれに違う環境を用意するイメージだよ。君の本当のパソコンにはNode.jsが入ってなくても大丈夫。
miseは「君のパソコンに直接インストール」

一方、miseは君のパソコンに直接いろんなバージョンをインストールするんだ。
mise install node@16 # 君のPCにNode.js 16をインストール
mise install node@18 # 君のPCにNode.js 18をインストール
mise install node@20 # 君のPCにNode.js 20をインストール

つまり、miseを使う場合は、僕のパソコンにNode.jsの16、18、20が全部入ってるってことですか?

その通り!全部入ってる。miseは「どれを使うか」を自動で切り替えてくれるだけなんだ。
どっちを使えばいいの?

じゃあ、どういう時にDockerを使って、どういう時にmiseを使えばいいんですか?

それぞれに得意分野があるんだ。
miseが得意なこと:日常的な開発作業

以下がmiseが得意なことだよ。
●軽くて速い:フォルダ移動するだけで瞬時に切り替わる
●IDEとの相性がいい:Visual Studio Codeなどが正しいバージョンを認識してくれる
●学習コストが低い:使い方がシンプル
# めちゃくちゃ速い!
cd project-a # 0.1秒でNode.js 16に切り替わる
cd project-b # 0.1秒でNode.js 20に切り替わる
Dockerが得意なこと:完全な環境の再現

以下がdockerが得意なことだよ。
●完全に同じ環境:OSの設定、データベース、全部含めて再現
●「俺の環境では動く」問題の解決:誰がやっても同じ結果になる
●複雑なシステム:API、データベース、キャッシュサーバーを一度に立ち上げ
docker-compose up
# → API、データベース、フロントエンド、全部立ち上がる!

なるほど!用途によって使い分けるんですね。
実際の現場ではどう使い分けてる?

現場では組み合わせて使うことが多いよ。
パターン1:小規模開発(mise単体)
# 個人プロジェクトや小規模開発
cd my-blog-site
mise use node@20
npm run dev # 高速起動でサクサク開発
パターン2:組み合わせ使い(開発はmise、本番はDocker)
# 開発中:軽快に作業
mise use node@20
npm run dev
# 本番環境:確実にデプロイ
docker build -t my-app .
docker run my-app
パターン3:複雑なシステム(Docker中心)
# マイクロサービスな大規模システム
docker-compose up
# データベース、API、キャッシュサーバー、フロントエンド
# 全部が連携して立ち上がる

なるほど!どちらか片方じゃなくて、適材適所で使い分けるんですね。
まとめ:結局miseって何がすごいの?

miseの一番の価値は「考えなくても正しい環境で開発できる」ことだね。

どういうことですか?

今まで開発者は以下のようなことに時間を取られていたんだ!
●「このプロジェクトはどのバージョンだっけ?」
●「あれ?エラーが出る…バージョンが違うのかな?」
●「新しいメンバーの環境構築を手伝わなきゃ…」

でもmiseがあると、、、
●フォルダに入るだけで自動的に正しい環境になる
●エラーで悩む時間が激減
●新メンバーの環境構築が5分で完了

本来やりたい「プログラミング」に集中できるようになるってことですね!

その通り!開発者にとって「環境の問題」は本質的じゃない作業だからね。それを自動化して、クリエイティブな部分に集中できるようにするのがmiseの価値なんだ。
最後に:これから学ぶ人へのアドバイス

これからプログラミングを学ぶ人は、最初からmiseを使った方がいいですか?

最初は基本的なツールの使い方を覚えてからでもいいけど、複数のプロジェクトを触るようになったらmiseは必須だね。特に以下のような人は!
●フリーランスを目指す人:複数のクライアントで違う環境を使い分ける
●転職を考えてる人:新しい会社でスムーズに環境構築できる
●チーム開発する人:メンバー全員が同じ環境で作業できる

よし!今度実際にmiseを試してみます!

いいね!最初は一つのプロジェクトで試してみて、慣れたら他のプロジェクトでも使ってみるといいよ。きっと「なんで今まで使わなかったんだろう」って思うはずだから!
この記事が参考になったら、ぜひ実際にmiseを試してみてくださいね!
開発がもっと楽しくなるはずです!