Task (go-task) - 最新タスクランナーチートシート
Task (別名 go-task) はタスクランナーおよびビルドツールで、よりシンプルなMake代替品を目的としています。YAML Taskfile.yml でタスクを定義 — 依存性、変数、インクルード、最新チェック — し、task <name> で実行します。Go で書かれ、単一の依存性のないバイナリとして出荷され、クロスプラットフォームの動作と組み込みファイルウォッチングを備えています。チームがMakの構文を超えてYAMLを好む場合は、強力な選択肢です。
インストール
| プラットフォーム | コマンド |
|---|
| スクリプト | sh -c "$(curl -sSL https://taskfile.dev/install.sh)" |
| macOS/Linux (Homebrew) | brew install go-task |
| Arch Linux | sudo pacman -S go-task |
| Go install | go install github.com/go-task/task/v3/cmd/task@latest |
| Windows (Scoop) | scoop install task |
| 確認 | task --version |
基本的な Taskfile
# Taskfile.yml
version: '3'
vars:
BINARY: myapp
tasks:
build:
desc: Build the binary
cmds:
- go build -o {{.BINARY}} ./cmd/app
test:
desc: Run tests
cmds:
- go test ./...
ci:
desc: Lint, test, build
deps: [test]
cmds:
- task: build
タスク実行
| コマンド | 説明 |
|---|
task | default タスクを実行 |
task build | 名前付きタスクを実行 |
task test build | 複数のタスクを順番に実行 |
task --list (-l) | 説明付きでタスクをリスト |
task --list-all | すべてのタスク (説明なし含む) をリスト |
task --summary build | タスク詳細を表示 |
task VAR=value build | 変数を渡す |
task -- arg1 arg2 | CLI引数をタスクに転送 ({{.CLI_ARGS}}) |
依存性 & 順序付け
| キー | 動作 |
|---|
deps: [a, b] | このタスク前にa と b を実行 (並行) |
cmds: [{task: x}] | ステップとして別のタスクを呼び出す (順序付け) |
deps 並列性 | デフォルトで依存性は並行実行 |
--parallel | 与えられたタスクを並行実行 |
最新チェック (不要な作業をスキップ)
tasks:
build:
sources:
- "**/*.go"
generates:
- myapp
cmds:
- go build -o myapp ./cmd/app
| キー | 効果 |
|---|
sources | フィンガープリント用の入力 |
generates | 予期される出力 |
| `method: checksum | timestamp |
status: [ ... ] | 最新用のカスタムシェルチェック |
ソースが変わらない場合、Task はコマンドをスキップします。
変数 & テンプレート
| 機能 | 例 |
|---|
| タスク/グローバル変数 | vars: { NAME: value } |
| 環境変数 | env: { CGO_ENABLED: "0" } |
| Dotenv | dotenv: ['.env'] |
| テンプレート | {{.NAME}}、{{.CLI_ARGS}}、Go テンプレート関数 |
| 動的変数 | sh: 計算用コマンド |
インクルード & ウォッチング
| 機能 | 方法 |
|---|
| インクルード | includes: { docs: ./docs/Taskfile.yml } → task docs:build |
| 名前空間 | インクルードされたタスクは namespace:task と呼ばれる |
| ウォッチモード | task --watch build (ソース変更時に再実行) |
-w | --watch の短形式 |
一般的なワークフロー
# プロジェクトが何ができるかを発見
task --list
# CI パイプラインとして正確にローカルで実行
task ci
# 反復:ソース変更ごとにリビルド
task --watch build
# 引数をパススルー
task test -- -run TestLogin
Task vs Make vs just
| 側面 | Task | Make | just |
|---|
| 構文 | YAML | Makefile | just レシピ |
| 言語 | Go (単一バイナリ) | C (ユビキタス) | Rust |
| 最新チェック | はい (sources/generates) | はい (タイムスタンプ) | いいえ (コマンドランナー) |
| ファイルウォッチング | 組み込み (--watch) | いいえ | いいえ (watchexecとペア) |
| 最適用途 | YAMLファン、クロスプラットフォーム | 古典的なビルドグラフ | シンプルなコマンド実行 |
just をコマンドランナー代替案、watchexec をスタンドアロンファイルウォッチングで参照。
リソース