just vs make:command runner vs build system
just はプロジェクトのタスクを保存して実行することに焦点を当てた command runner です。make は build system で、その中核となる機能は依存関係に基づいてファイルを再ビルドすることです。
両者は似て見えます(名前付きレシピのファイル)が、異なる問題を解決します。make はファイルのタイムスタンプを追跡して変更されたものだけを再ビルドします。just はあえてそれを捨て、人間工学的でクロスプラットフォームなタスク実行に焦点を当てています。
| just | make | |
|---|---|---|
| 主な目的 | 名前付きのプロジェクトコマンドを実行 | 依存関係からファイルを build |
| ファイルの依存関係の追跡 | なし(設計上) | あり(タイムスタンプベース) |
| 構文の落とし穴 | 寛容、明確なエラー | タブ、.PHONY、shell の癖 |
| レシピへの引数 | 第一級 | 扱いにくい |
| クロスプラットフォーム | 一貫している | make/shell により異なる |
just が優れている点
「プロジェクトのタスクを実行する」(lint、test、build、deploy)用途では just の方が快適です。レシピは引数をきれいに受け取り、エラーは明確で、タブ対スペースの罠も意図しないインクリメンタルな挙動もなく、プラットフォームをまたいで一貫して振る舞います。command runner として目的に特化して作られています。
make が優れている点
本当にインクリメンタルな build が必要な場合(変更されたソースだけをコンパイルし、入力が変わったら出力を再生成する)、make のタイムスタンプベースの依存グラフこそが要点であり、just はそれを置き換えません。make はほとんどどこにでもインストールされているため、追加のプロビジョニングも不要です。
CI では
「build」のステップが実際にはタスクのエイリアスなら、just の方がすっきりした pipeline になります。インクリメンタルな再ビルドに依存しているなら、make(または本物の build system)を残しましょう。just のプロビジョニングはインストールのステップを 1 つ増やします。make は通常すでに存在しています。
結論
プロジェクトのタスク向けに人間工学的な command runner が欲しいなら just を、ファイルベースの本物のインクリメンタルな build やインストール不要の普遍性が必要なら make を使いましょう。両者は直接の代替品ではありません。