Task vs Make: YAML タスクか古典的な Make か?
Task は依存関係と source チェックを備えたモダンな YAML ベースのタスクランナー。Make はファイルのタイムスタンプ追跡を備えた古典的で普遍的な build ツールです。
Task (go-task) は YAML の Taskfile で作業を定義し、変数、タスクの依存関係、変更のない作業をスキップできる sources/generates を備え、Make のタブに敏感でシェルの癖のある構文よりきれいな体験を提供します。Make は依然どこにでもあり、深く理解され、タイムスタンプによる本格的なインクリメンタル build に優れます。Task は可読性とクロスプラットフォームの一貫性で勝り、Make は普遍性と実戦で鍛えられた build のセマンティクスで勝ります。
| Task | Make | |
|---|---|---|
| 設定 | YAML の Taskfile | Makefile(タブに敏感) |
| 最新性ロジック | 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 を使います。