【アースリー】

Earthly とは?

💡 環境差異という魔物を封じ込める、コンテナ製のビルド装置
📌 このページのポイント
Earthly — コンテナ隔離ビルドフロー Earthfile +build コンパイル +test テスト実行 +docker イメージ作成 コンテナ隔離 各ターゲットはDockerコンテナ内で実行 → ローカル / CI で同じ結果 キャッシュを共有してリビルドを高速化 GitHub Actions / CircleCI などから earthly +target で呼び出し可能
Earthlyのビルドターゲット連鎖とコンテナ隔離のイメージ
ひよこ ひよこ

Earthlyって名前のツール、何をするものなの?

ペンギン先生 ペンギン先生

DockerfileとMakefileを合体させたようなビルド自動化ツールだよ。`Earthfile`というファイルに`+build`や`+test`というターゲットを書いていくんだ。

ひよこ ひよこ

Makefileみたいなものなんだね!でも何が違うの?

ペンギン先生 ペンギン先生

一番の違いはコンテナの中でビルドを実行することだよ。だからローカルPCでもCIサーバーでも同じ結果になるんだ。「自分のPCでは動いたのに…」という問題が起きにくくなるよ。

ひよこ ひよこ

それは嬉しいね!どんなふうに書くの?

ペンギン先生 ペンギン先生

たとえば`+build`ターゲットでアプリをビルドして、`+test`でテストを実行して、`+docker`でDockerイメージを作る、という流れを`Earthfile`に記述するんだよ。ターゲット同士は依存関係を持てるんだ。

ひよこ ひよこ

ビルドが遅い問題はどうなの?

ペンギン先生 ペンギン先生

キャッシュ機能があるから、変更のないステップはスキップされるよ。ローカルのキャッシュをCIと共有することもできるから、CI上でも高速に動くんだ。

ひよこ ひよこ

GitHub ActionsとかのCIとは一緒に使えるの?

ペンギン先生 ペンギン先生

もちろん。CIのYAMLから`earthly +test`というコマンドを呼び出すだけでいいんだよ。ビルドロジックをEarthfileに集約できるから、CIの設定がシンプルになるね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Earthly」って出てきたら「コンテナで再現性を保証するビルドツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Earthly」 = (地球上のどこでも同じ)再現可能なビルド
💬 「地球上のどこでも同じビルドを」という思想から名付けられているよ。コンテナを使うから環境差異が起きにくいんだよ。
← 用語集にもどる