Skip to content
Latchkey

Dagger vs Earthly: ポータブルなCIパイプライン比較

どちらもラップトップと任意のCIで同一に動くコンテナ化されたパイプラインを定義できます。DaggerはSDKを介してパイプラインをコードとして表現し、EarthlyはDockerfileとMakefileの構文を融合したEarthfileを使います。

DaggerとEarthlyは同じ痛みに取り組みます: CIでしか動かず、ローカルでは異なる挙動をするCIパイプラインです。どちらもキャッシュと再現性のためにBuildKitを基盤としますが、パイプラインの記述方法が異なります。以下は比較です。

DaggerEarthly
パイプライン定義SDK経由のコード(Go、Python、TS)+ Dagger FunctionsEarthfile(Dockerfile + Makefileスタイル)
エンジンBuildKitベースBuildKitベース
ポータビリティラップトップと任意のCIで同じラップトップと任意のCIで同じ
キャッシュ自動のレイヤー/opキャッシュ自動のレイヤーキャッシュ + cache mounts
メンタルモデルプログラム可能なDAG / 関数宣言的なtargets
最適な用途複雑なロジック、言語をまたいだ再利用シンプルで読みやすいbuild targets

コード vs 宣言的

Daggerはパイプラインを、本物の言語(Go、Python、TypeScriptなど)で書くプログラム可能な関数としてモデル化します。これはパイプラインのロジックが複雑または共有される場合に強力です。Earthlyは物事を宣言的に保ちます。EarthfileはビルドtargetsをもつDockerfileのように読め、素早く理解しレビューできます。プログラマビリティが欲しいか読みやすさが欲しいかで選びましょう。

キャッシュと再現性

どちらもBuildKit上で動くため、ビルドステップを内容でキャッシュし、変更されていない作業をスキップします。Earthlyは明示的なcache mountsとtargetレベルのキャッシュを公開し、Daggerはエンジン内で操作を自動的にキャッシュします。どちらも、ローカルでのグリーンな実行がCIでのグリーンな実行を意味するのが主な利点です。

CIでは

どちらもステップをコンテナで包むため、私の環境では動くという失敗を減らし、CIロジックをCIプロバイダーの外でテスト可能にします。CIがビルド間でレイヤーを再利用するように、永続的なBuildKitキャッシュとともにDaggerエンジンまたはEarthlyを実行しましょう。

結論

言語をまたいだ再利用ができる本物のコードとしてのパイプラインが欲しいなら: Dagger。読みやすくDockerfileに似たEarthfileでニーズが満たせるなら: Earthly。どちらもローカルとCIで同じように動く、ポータブルでキャッシュに優しいビルドを提供します。

関連ガイド