Task (go-task) - 현대적 작업 실행기 치트시트
Task (일명 go-task)는 더 간단한 Make 대체를 목표하는 작업 실행기이자 빌드 도구다. YAML Taskfile.yml에서 작업을 정의한다 — 의존성, 변수, 포함, 최신 상태 확인과 함께 — task <name>으로 실행한다. Go로 작성되어 있고 의존성이 없는 단일 바이너리로 제공되며, 크로스 플랫폼 동작과 내장 파일 감시를 가진다. 팀이 Make 문법보다 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 설치 | 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 | 모든 작업 나열 (no-desc 포함) |
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 |
| 최신 상태 확인 | 예 (소스/생성) | 예 (타임스탬프) | 아니오 (명령 실행기) |
| 파일 감시 | 내장 (--watch) | 아니오 | 아니오 (watchexec과 페어링) |
| 최고 | YAML 팬, 크로스 플랫폼 | 고전 빌드 그래프 | 간단한 명령 실행 |
명령-실행기 대안은 just를, 독립 실행형 파일 감시는 watchexec을 참고하자.
자료