ツール・環境変数・タスク管理は mise に集約!
はじめに
新しいプロジェクトを立ち上げる際、開発環境のセットアップは避けて通れない作業です。しかし、ツールのバージョン管理、環境変数の設定、よく使うコマンドの管理など、さまざまな要素を別々のツールや仕組みで管理するのは煩雑ではないでしょうか。
この記事では、mise という開発ツール管理プラットフォームを紹介します。mise を使えば、これらの要素を mise.toml という一つの設定ファイルに集約でき、チーム開発での環境統一も容易になります!
mise とは
mise は、開発環境を統合的に管理するためのツールです。以下の3つの主要な機能を提供します
- ツール管理 Go、Node.js、Python などの言語ランタイムやCLIツールのバージョン管理
- 環境変数管理 プロジェクトごとの環境変数の設定
- タスクランナー よく使うコマンドをタスクとして定義・実行
これらすべての設定を mise.toml という一つのファイルで管理できるため、プロジェクトのセットアップが非常にシンプルになります。
これまでの課題
mise を使う前は、以下のような複数のツールや仕組みを組み合わせて開発環境を構築していました
- ツールのバージョン管理 ドキュメントで手動管理、または asdf などのバージョン管理ツール
- 環境変数の管理 direnv や .env ファイル
- タスクランナー Makefile など
それぞれのツールには設定ファイルが必要で、管理が煩雑になりがちでした。mise を使えば、これらを一つのファイルに集約できます。
機能紹介 1.ツール管理
mise を使えば、プロジェクトで使用するツールのバージョンを mise.toml で管理できます。
ツールの定義
mise.toml ファイルに [tools] セクションを追加して、必要なツールとバージョンを指定します
[tools]
go = "1.25.0"
node = "20.11.0"
python = "3.12.0"
ツールのインストール
定義したツールをインストールするには
mise install
または、個別にインストールすることもできます
mise install go@1.25.0
IDEと組み合わせて使うことできます。
チーム開発での利点
mise.toml をリポジトリにコミットすることで、チーム全員が同じバージョンのツールを使用できます。新しいメンバーは mise install を実行するだけで、必要なツールがすべて揃います。
機能 2. 環境変数管理
mise では、プロジェクトごとの環境変数を mise.toml で管理できます。
mise.toml に直接環境変数を定義できます
ENV_NAME = "develop"
API_ENDPOINT = "https://api.example.com"
.env ファイルの読み込み
既存の .env ファイルを読み込むこともできます
mise.file = ".env"
環境変数の使用
シェル統合を設定している場合、ディレクトリに入ると自動的に環境変数が設定されます。
シェル統合をしていない場合は、mise exec を使って環境変数を含めてコマンドを実行できます
mise exec -- printenv ENV_NAME
機能 3. タスクランナー
mise のタスクランナー機能を使うと、よく使うコマンドをタスクとして定義できます。より直感的で使いやすい設計になっています。
タスクの定義
mise.toml に [tasks.*] セクションを追加してタスクを定義します
[tasks.test]
description = "Run tests"
run = "go test ./..."
[tasks.build]
description = "Build the application"
run = "go build -o bin/app"
[tasks.lint]
description = "Run linter"
run = "golangci-lint run"
タスクの実行
タスクを実行するには mise run コマンドを使います
mise run test
選択式インターフェース
mise run を引数なしで実行すると、タスク一覧が選択式で表示されます
mise run
実行すると以下のような選択UIが表示されます
Tasks
Select a task to run
❯ test Run tests
build Build the application
lint Run linter
これにより、タスク名を覚えておく必要がなく、説明文を見ながら実行したいタスクを選択できて便利です!
タスクの依存関係
タスクは他のタスクに依存させることができます
例
[tasks.ci]
description = "Run CI tasks"
depends = ["test", "lint", "build"]
mise run ci を実行すると、依存するタスクが自動的に実行されます。
ワイルドカード実行
タスク名にプレフィックスを付けて、複数のタスクをまとめて実行できます
[tasks.check]
run = "mise run check:*"
[tasks.check:go]
run = "golangci-lint run"
[tasks.check:fmt]
run = "gofmt -l ."
mise run check を実行すると、check: で始まるすべてのタスク(check:go、check:fmt)が実行されます。
Makefile との違い
これまで、個人開発などではタスクランナーとして Makefile を利用していました。しかし、Makefile は本来ビルドツールとして設計されているため、タスクランナーとして使うのは本来の用途とは異なります。mise はタスクランナーとして設計されているため、より直感的に使えます。
実際の mise.toml の例
以下は実際の Go プロジェクトでの mise.toml の設定です
# 環境変数の定義
ENV_NAME = "develop"
# .env ファイルの読み込み
mise.file = ".env"
# ツールの定義
[tools]
go = "1.25.0"
pre-commit = "latest"
golangci-lint = "1.64.0"
# タスクの定義
[tasks.setup]
description = "Setup project"
run = "mise install && pre-commit install && go mod tidy"
[tasks.test]
description = "Run tests"
run = "go test ./..."
[tasks.build]
description = "Build the application"
run = "go build -o bin/app"
[tasks.check]
description = "Run all checks"
run = "mise run check:*"
[tasks.check:go]
description = "Run Go linter"
run = "golangci-lint run"
[tasks.check:fmt]
description = "Check Go formatting"
run = "gofmt -l ."
[tasks.ci]
description = "Run CI tasks"
depends = ["test", "check", "build"]
この設定ファイル一つで、以下のことが実現できます
- ツールのバージョン管理 Go、pre-commit、golangci-lint
- 環境変数の設定 ENV_NAME や .env ファイルの読み込み
- タスクの定義 セットアップ、テスト、ビルド、リント、CI
新しいメンバーがプロジェクトに参加した際は、以下のコマンドを実行するだけで開発環境が整います
mise run setup
mise.local.toml での個人カスタマイズ
mise では、チームで共有する設定とは別に、個人専用の設定を定義できます。
mise.local.toml
mise.local.toml は、個人のローカル環境専用の設定ファイルです。このファイルは .gitignore に追加して、リポジトリにはコミットせずに利用します。
設定の優先順位
mise は以下の順番で優先して複数の設定ファイルが読み込みまれます。
- mise.local.toml - 個人専用設定
- mise.toml - プロジェクト設定
mise.local.toml の設定は mise.toml の設定を上書きします。
使用例
例えば、個人的に使いたいタスクや、ローカル環境特有の設定を mise.local.toml に定義できます
# mise.local.toml
[tasks.local-dev]
description = "Start local development environment"
run = "docker compose up -d && mise run dev"
[tasks.debug]
description = "Start with debugger"
run = "dlv debug ./cmd/app"
これにより、個人で快適な開発環境を構築することもできます。
まとめ
mise を使うことで、開発環境の管理がシンプルになります。
mise に興味を持たれた方は、ぜひ実際のプロジェクトで試してみてください!
Discussion