콘텐츠로 이동

Task (go-task) - 현대적 작업 실행기 치트시트

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 Linuxsudo 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

작업 실행

명령어설명
taskdefault 작업 실행
task build이름 지정된 작업 실행
task test build여러 작업을 순서대로 실행
task --list (-l)설명과 함께 작업 나열
task --list-all모든 작업 나열 (no-desc 포함)
task --summary build작업의 세부 정보 표시
task VAR=value build변수 전달
task -- arg1 arg2CLI 인수를 작업으로 포워드 ({{.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: checksumtimestamp
status: [ ... ]최신 상태에 대한 사용자 정의 셸 확인

소스가 변경되지 않으면 Task가 명령을 건너뜀.

변수 & 템플릿

기능
작업/전역 변수vars: { NAME: value }
환경 변수env: { CGO_ENABLED: "0" }
Dotenvdotenv: ['.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

측면TaskMakejust
문법YAMLMakefilejust 레시피
언어Go (단일 바이너리)C (유비쿼터스)Rust
최신 상태 확인예 (소스/생성)예 (타임스탬프)아니오 (명령 실행기)
파일 감시내장 (--watch)아니오아니오 (watchexec과 페어링)
최고YAML 팬, 크로스 플랫폼고전 빌드 그래프간단한 명령 실행

명령-실행기 대안은 just를, 독립 실행형 파일 감시는 watchexec을 참고하자.

자료