このリポジトリには、Task についての自分用のメモが置いてあります。
directory | readme | taskfile |
---|---|---|
01.helloworld | README | Taskfile.yml |
02.cli-options | README | |
03.default-task | README | Taskfile.yml |
04.env | Taskfile.yml | |
05.dotenv | Taskfile.yml | |
06.include | Taskfile.yml | |
07.no-color | README | Taskfile.yml |
08.silent | README | Taskfile.yml |
09.os-specific | Taskfile.yml | |
10.variable | Taskfile.yml | |
11.cliargs | README | Taskfile.yml |
12.defer | README | Taskfile.yml |
13.internal-task | README | Taskfile.yml |
14.shopt | README | Taskfile.yml |
15.single-command-task | README | Taskfile.yml |
16.prompt | README | Taskfile.yml |
17.dryrun | README | Taskfile.yml |
18.preconditions | README | Taskfile.yml |
19.loop-over-static-list | README | Taskfile.yml |
20.loop-over-task-source | README | Taskfile.yml |
21.loop-over-variables | README | Taskfile.yml |
22.loop-rename-variables | README | Taskfile.yml |
23.loop-over-task | README | Taskfile.yml |
24.prevent-same-build | README | Taskfile.yml |
25.run-cmd-on-windows | README | Taskfile.yml |
26.global-taskfile | README | Taskfile.yml |
27.run-interactive-cli-app | README | Taskfile.yml |
28.remote-taskfile | README | Taskfile.yml |
29.platform-specific-tasks | README | Taskfile.yml |
Task(go-task) とは、make のような タスクランナーでありビルドツール。
Goで作成されているので、シングルバイナリとなっており、どの環境であってもインストールが簡単。
Windowsの場合でも scoop で以下のようにするとインストールできる。
scoop bucket add extras
scoop install task
Linuxの場合も、パッケージマネージャからインストール出来るようになっている。
brew install go-task/tap/go-task
また、Goで作成されているので、Goが入っていれば以下でもインストールできる。
go install github.com/go-task/task/v3/cmd/task@latest
Windowsの場合、デフォルトではmakeが存在しないので、makeを個別で入れる代わりにTaskを使ってもいいかもしれない。
以下にドキュメントを見ながら覚えていった内容をメモしておくことにする。
makeには Makefile
のように、taskの場合は Taskfile.yml
(Taskfile.yaml
) というファイルを使う。
Taskfile.yml
は、例えば以下のようになる。
version: '3'
env:
MESSAGE: helloworld
tasks:
default:
cmds:
- echo $MESSAGE
task --init
とすることで、カレントディレクトリに Taskfile.yml
を初期生成してくれる。
# https://taskfile.dev
version: '3'
vars:
GREETING: Hello, World!
tasks:
default:
cmds:
- echo "{{.GREETING}}"
silent: true
対象となる Taskfile.yml
が存在するディレクトリに移動して
# デフォルトのタスクが実行される
$ task
# タスク指定
$ task xxxx
とするか、ディレクトリは移動せずに
$ task -d /path/to/target
$ task -d /path/to/target task-name
としても良い。
タスク単位で環境変数を指定することが出来る。
version: "3"
env:
MYVARGLOBAL: myvar-global
MYVARDUP: myvar-global
tasks:
default:
cmds:
- echo $MYVAR
- echo $MYVARGLOBAL
- echo $MYVARDUP
env:
MYVAR: myvar-local
MYVARDUP: myvar-local
$ task -d 04.env/
task: [default] echo $MYVAR
myvar-local
task: [default] echo $MYVARGLOBAL
myvar-global
task: [default] echo $MYVARDUP
myvar-local
また、.env
などを指定することも出来る。この場合は dotenv:
を用いる。
MYVAR1=value1
MYVAR2=value2
MYVAR2=value2-2
MYVAR3=value3
version: "3"
dotenv: ["my.env", "my2.env"]
tasks:
default:
cmds:
- echo $MYVAR1
- echo $MYVAR2
- echo $MYVAR3
$ task -d 05.dotenv/
task: [default] echo $MYVAR1
value1
task: [default] echo $MYVAR2
value2
task: [default] echo $MYVAR3
value3
他のタスクファイルを取込み(include)することが可能。
取込むには、トップレベルで includes:
を指定する。
存在しない場合でも処理を止めたくない場合は、optional: true
を指定する。
$ tree 06.include/
06.include/
├── other
│ └── Taskfile.yml
├── other2
│ └── othertaskfile.yml
└── Taskfile.yml
2 directories, 3 files
version: "3"
tasks:
task:
cmds:
- echo 'task1'
version: "3"
tasks:
task:
cmds:
- echo 'task2'
version: "3"
includes:
other1: ./other
other2: ./other2/othertaskfile.yml
other3:
taskfile: ./other3/Taskfile.yml
optional: true
tasks:
default:
cmds:
- task: other1:task
- task: other2:task
$ task -d 06.include/
task: [other1:task] echo 'task1'
task1
task: [other2:task] echo 'task2'
task2