🛠️

ツール・環境変数・タスク管理は mise に集約!

に公開

はじめに

新しいプロジェクトを立ち上げる際、開発環境のセットアップは避けて通れない作業です。しかし、ツールのバージョン管理、環境変数の設定、よく使うコマンドの管理など、さまざまな要素を別々のツールや仕組みで管理するのは煩雑ではないでしょうか。

この記事では、mise という開発ツール管理プラットフォームを紹介します。mise を使えば、これらの要素を mise.toml という一つの設定ファイルに集約でき、チーム開発での環境統一も容易になります!

mise とは

mise は、開発環境を統合的に管理するためのツールです。以下の3つの主要な機能を提供します

  1. ツール管理 Go、Node.js、Python などの言語ランタイムやCLIツールのバージョン管理
  2. 環境変数管理 プロジェクトごとの環境変数の設定
  3. タスクランナー よく使うコマンドをタスクとして定義・実行

これらすべての設定を 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と組み合わせて使うことできます。
https://mise.jdx.dev/ide-integration.html

チーム開発での利点

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:gocheck: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"]

この設定ファイル一つで、以下のことが実現できます

  1. ツールのバージョン管理 Go、pre-commit、golangci-lint
  2. 環境変数の設定 ENV_NAME や .env ファイルの読み込み
  3. タスクの定義 セットアップ、テスト、ビルド、リント、CI

新しいメンバーがプロジェクトに参加した際は、以下のコマンドを実行するだけで開発環境が整います

mise run setup

mise.local.toml での個人カスタマイズ

mise では、チームで共有する設定とは別に、個人専用の設定を定義できます。

mise.local.toml

mise.local.toml は、個人のローカル環境専用の設定ファイルです。このファイルは .gitignore に追加して、リポジトリにはコミットせずに利用します。

設定の優先順位

mise は以下の順番で優先して複数の設定ファイルが読み込みまれます。

  1. mise.local.toml - 個人専用設定
  2. 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