Task は Make に着想を得た、Go 製のクロスプラットフォームなタスクランナー兼ビルドツールです。YAML 形式のTaskfile.ymlにタスクを定義し、依存関係の解決やソース変更検知、並列実行を通じてビルド作業を自動化します。README によると「モダンなワークフロー向け」を掲げ、Windows・macOS・Linuxで単一バイナリとして動作します。
リポジトリ直下のtaskfile/reader.goとtaskfile/node_*.goがTaskfile.ymlの読み込みを担当します。ローカルファイルだけでなくGit・HTTP・stdin経由のTaskfileにも対応する構成です。taskfile/ast以下でタスク・変数・依存・for文・matrix・プラットフォーム条件などをASTとして表現し、compiler.goがテンプレート変数を展開します。internal/fingerprint配下のchecksumやtimestamp方式でソースファイルの変更有無を判定し、変更がなければタスクをスキップする仕組みです。executor.goとcall.goが依存グラフに沿ってタスクを実行し、concurrency.goがゴルーチンによる並列実行を制御します。コマンド実行自体はmvdan.cc/sh系ライブラリでシェル互換の解釈を行い、内部execext/coreutils.goが一部のUnixコマンドをGoで再実装してクロスプラットフォーム性を確保しています。
- STEP 01
install-task.sh または各OSのパッケージマネージャでtaskバイナリを取得し、taskコマンドを実行できる状態にします。
- STEP 02
プロジェクト直下にTaskfile.ymlを作成し、versionフィールドとtasks配下にコマンド列を書いて`task`だけを実行すると、defaultタスクが呼ばれます。
- STEP 03
`task <タスク名>`で個別タスクを実行すると、依存タスクが先に解決され、cmds内のシェルコマンドが順に流れる様子が確認できます。
- STEP 04
sourcesとgeneratesを指定したタスクを2回連続で実行すると、2回目はfingerprintチェックにより「up to date」としてスキップされる挙動が見られます。
- STEP 05
`task --list`や`task --summary`を試すと、summary.go・help.goが生成するタスク一覧や説明文が表示されます。
- STEP 06
並列度の高いTaskfileで複数タスクを同時実行すると、internal/outputのgroupやprefixed・interleavedモードでログの見え方が変わることを体験できます。
手元にはTaskfile.ymlを実行エンジンとする単一のtaskバイナリが残り、ビルド・テスト・デプロイなどの繰り返し作業をMakefile感覚で定義・再利用できるようになります。fingerprintベースの差分検知により、変更がないタスクの再実行を避けて時間を節約できる点が実質的な成果物です。
go.modの依存にAWS SDKやGoogle Cloud関連ライブラリ、Charm系TUIライブラリなど多数の間接依存が含まれており、ビルド時間やバイナリサイズに影響する可能性があります。
Remote Taskfiles(Git・HTTP経由)やMap Variablesなど一部機能はexperiments/配下のexperimental機能として管理されており、動作が将来変わる可能性がある点に注意が必要です。
README本文の技術的な詳細説明はfront部分に含まれておらず、実際の使い方は公式ドキュメントサイト(taskfile.dev)を参照する前提の構成になっています。
Makefileに代わる読みやすいYAMLベースのタスク定義と、ソース変更検知による賢いスキップ機能を求める開発者・DevOpsチームに向いています。Go言語製のソースコード構成(taskfile/ast・internal/fingerprint・executor.goなど)から、依存解決・キャッシュ判定・並列実行という主要機能が実装として裏付けられており、READMEの主張と乖離はありません。ただし機能の細部や設定例はドキュメントサイト側に依存するため、導入前に公式ドキュメントを合わせて確認することをおすすめします。