Skip to content
Latchkey

Earthly vs Make: 再現可能な build の比較

ほとんどのシステムでインストール不要な、依存関係を追跡する普遍的なタスクランナーが欲しいなら Make を選び、ローカルと CI で同じ挙動をするレイヤーキャッシュ付きのコンテナ化された再現可能な build が欲しいなら Earthly を選びましょう。

Make と Earthly はどちらも build ステップをオーケストレーションしますが、分離のレベルが異なります。Make はクラシックでほぼ普遍的な build ツールです。Makefile が target とファイル依存を定義し、最小限のコマンド集合を実行します。Earthly は各 build target をコンテナ内 (BuildKit を使用) で実行し、Dockerfile と Makefile のアイデアを融合した Earthfile 構文を持ち、マシン間および CI で再現可能な build を目指します。

EarthlyMake
分離target ごとのコンテナ (BuildKit)ホストの shell で実行
再現性高 (固定されたベースイメージ)ホスト環境に依存
キャッシュDocker のようなレイヤーキャッシュファイル target のタイムスタンプベース
インストールの負荷Earthly + Docker/BuildKit通常はプリインストール済み
構文Earthfile (Docker + Make 風)Makefile (tab に敏感)
移植性ローカルと CI で同じ buildホストのツールによって異なる

それぞれが本当に優れている点

Make は普遍性とシンプルさで優れます。ほとんどの Unix システムにすでに存在し、コンテナ要件がなく、そのファイル依存モデルはインクリメンタルなローカル作業に最適です。Earthly は再現性とキャッシュで優れます。各ステップが固定イメージのコンテナ内で実行されるため「自分のマシンでは動く」問題が減り、BuildKit スタイルのレイヤーキャッシュが繰り返しの build を高速にします。

CI では

Earthly はローカルと CI の build を同一にするよう設計されており、環境の drift により runner でのみ発生する種類の失敗を減らします。実行間で build キャッシュを共有し、変更のないレイヤーの再実行を避けられます。CI での Make はより軽量ですが (Docker 不要)、runner に Makefile が前提とするのと同じツールチェーンのバージョンがあることを保証しないと build が乖離します。

正直な注意点

Earthly は Docker/BuildKit を必要とし、コンテナのレイヤーを追加するため、単純なタスクはより重く、起動は素の Make より遅くなります。Make はよりシンプルですが、その再現性はホストに完全に依存し、tab に敏感な構文と限られたエラー処理が初心者を戸惑わせます。

結論

環境がすでに制御されている場面での、軽量でホストネイティブなタスク実行には Make を使いましょう。マシン間および CI での再現性に加え、コンテナスタイルのキャッシュが Docker への依存に見合う場合は Earthly を使いましょう。

関連ガイド