【むーん】

Moon(ビルドシステム) とは?

最終更新:
💡 複数プロジェクトの作業順をそろえる、タスクの司令塔

Rust製のリポジトリ管理・タスク実行ツール。複数プロジェクトのタスク依存関係を管理し、並列実行やキャッシュで不要な再実行を減らします。

📌 このページのポイント
Moon:タスクの依存関係 共通ライブラリ アプリ src/ src/ build build 完了を待つ 先に実行 その後に実行 独立したタスクは並列実行できる キャッシュ判定は入力・設定などによる
共通ライブラリのビルドが終わってからアプリをビルドする設定例。言語別の連携範囲と入力・依存関係の設定を確認します。
ひよこ ひよこ
ペンギン先生、Moonは何をするツールなの?
ペンギン先生 ペンギン先生
アプリや共通ライブラリなどのプロジェクトで、ビルド・テスト・型チェックといったコマンドをタスクとして管理するんだ。モノレポの作業をまとめて実行するのに役立つよ。
ひよこ ひよこ
作業順も決めてくれるの?
ペンギン先生 ペンギン先生
たとえばアプリのビルドが共通ライブラリのビルドに依存すると設定すれば、ライブラリの完了を待つよ。依存関係のないタスクは並列に実行できるんだ。
ひよこ ひよこ
Rustでできているなら、必ずビルドが速くなる?
ペンギン先生 ペンギン先生
Rust製だけで速さは決まらないよ。Moonは入力・コマンド・設定・依存関係などからハッシュを作り、キャッシュが一致すれば結果を再利用できる。効果はタスクや設定によるね。
ひよこ ひよこ
どんな言語でも同じように管理できる?
ペンギン先生 ペンギン先生
複数言語のコマンドを扱えるけれど、依存関係の自動解析やツールの導入まで同じ範囲で対応するわけではないよ。環境に入れたコマンドをsystem経由で動かす方法と、言語別の組み込み連携を区別しよう。
もっと詳しく知りたい人へ

変更したファイルのあるプロジェクトだけを実行すれば十分?

依存先や利用側への影響も考える必要があるよ。moon v2のaffected判定では、ファイル・環境変数・グラフの関係を扱う。関係の判定は実行系コマンドでは既定で無効なので、必要に応じて--include-relationsを指定し、--upstream/--downstreamの探索範囲も確認しよう。タスクのinputsや依存関係を正しく設定することが前提だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Moon」って出てきたら「複数プロジェクトの作業順と再実行を管理するツール」と思えばだいたいOK!

参考資料

← 用語集にもどる