Make vs just: build ツールかコマンドランナーか?
Make はファイルの依存関係とタイムスタンプを追跡する build ツール。just はプロジェクトのレシピを整理・実行するだけのコマンドランナーです。
Make はファイルのタイムスタンプと依存関係グラフに基づいて成果物をコンパイル・再ビルドします。強力ですが、タブに敏感な構文とシェルの癖を伴います。just は Makefile に似た構文を借りつつ build のセマンティクスを捨て、引数、.env サポート、より明快なエラーを備えた、プロジェクトコマンド(build、test、lint、deploy)向けのより健全なタスクランナーです。Make はインクリメンタルな build 向け、just は使い勝手のよいコマンド実行向けです。
| Make | just | |
|---|---|---|
| 主な役割 | インクリメンタル build | コマンドランナー |
| 依存関係追跡 | ファイルのタイムスタンプ | なし |
| 構文 | タブに敏感、癖がある | よりきれい、親しみやすい |
| 引数 / .env | 扱いにくい | 第一級 |
| 最適な用途 | C/C++ などのコンパイル | プロジェクトのタスクスクリプト |
CI では
Make のインクリメンタルな再ビルドグラフ(C/C++ で一般的)に依存するなら Make が正しいツールです。Makefile を名前付きコマンドのリストとしてしか使わないなら、just は build のセマンティクスと格闘することなく、より明快な構文と優れた引数処理を提供します。多くのリポジトリはコンパイルに Make を残し、開発/CI のタスクの入口として just を採用します。
高速化
インクリメンタルな build とタスクがウォームな状態で始まるよう、build 出力と依存関係を cache しましょう。どちらも CI runner 上で動作し、より高速なマネージド runner はコンパイルとタスクの手順を短縮します。
結論
依存関係追跡を伴う本格的なインクリメンタル build(C/C++ など)をするなら Make。きれいな構文と引数でプロジェクトコマンドを整理・実行するだけなら just。両者はうまく共存します - build には Make、親しみやすいコマンドの入口として just。