Skip to content
Latchkey

Task vs Make: YAML タスクか古典的な Make か?

Task は依存関係と source チェックを備えたモダンな YAML ベースのタスクランナー。Make はファイルのタイムスタンプ追跡を備えた古典的で普遍的な build ツールです。

Task (go-task) は YAML の Taskfile で作業を定義し、変数、タスクの依存関係、変更のない作業をスキップできる sources/generates を備え、Make のタブに敏感でシェルの癖のある構文よりきれいな体験を提供します。Make は依然どこにでもあり、深く理解され、タイムスタンプによる本格的なインクリメンタル build に優れます。Task は可読性とクロスプラットフォームの一貫性で勝り、Make は普遍性と実戦で鍛えられた build のセマンティクスで勝ります。

TaskMake
設定YAML の TaskfileMakefile(タブに敏感)
最新性ロジックsources/generatesファイルのタイムスタンプ
移植性単一バイナリ、一貫プリインストール、GNU/BSD で異なる
学習曲線緩やか初心者には癖がある
最適な用途読みやすいタスクパイプライン古典的なインクリメンタル build

CI では

Make はほとんどの runner にプリインストールされており、本物のコンパイル・リンクのグラフに理想的ですが、GNU と BSD の違いがクロスプラットフォームで問題になることがあります。Task は1つのバイナリとしてインストールされ、OS 間で一貫して動作し、その source チェックは変更のない手順をスキップできます。本格的な build には Make、きれいで移植性のあるタスクのオーケストレーションには Task を選びましょう。

高速化

build 成果物と依存関係を cache しましょう。Task では sources/generates を使って変更のないタスクをスキップします。どちらも CI runner 上で動作し、より高速なマネージド runner はコンパイルとタスク実行を短縮します。

結論

古典的なインクリメンタル build をし、すでにどこにでもあるツールがほしいなら Make。読みやすい YAML タスク、一貫したクロスプラットフォームの挙動、組み込みのスキップチェックがほしいなら Task。多くのチームはコンパイルに Make を残し、より高レベルのパイプラインに Task を使います。

関連ガイド