このリポジトリには、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 |
| 30.loop-over-dependencies | README | Taskfile.yml |
| 31.v338-cli_silent-cli_verbose | README | Taskfile.yml |
| 32.joinpath | README | Taskfile.yml |
| 33.completion-flag | README | Taskfile.yml |
| 34.v341-taskdir | README | Taskfile.yml |
| 35.v341-checksum-timestamp-in-cmds | README | Taskfile.yml |
| 36.v342-init-option | README | Taskfile.yml |
| 37.taskfile-for-c | README | |
| 38.cli-args-list | README | Taskfile.yml |
| 39.uuid | README | Taskfile.yml |
| 40.randint | README | Taskfile.yml |
| 41.common_core_utility | README | Taskfile.yml |
Task(go-task) とは、make のような タスクランナーでありビルドツール。
Goで作成されているので、シングルバイナリとなっており、どの環境であってもインストールが簡単。
Windowsの場合でも scoop で以下のようにするとインストールできる。
scoop bucket add extras
scoop install taskLinuxの場合も、パッケージマネージャからインストール出来るようになっている。
brew install go-task/tap/go-taskまた、Goで作成されているので、Goが入っていれば以下でもインストールできる。
go install github.com/go-task/task/v3/cmd/task@latestWindowsの場合、デフォルトではmakeが存在しないので、makeを個別で入れる代わりにTaskを使ってもいいかもしれない。
以下にドキュメントを見ながら覚えていった内容をメモしておくことにする。
makeには Makefile のように、taskの場合は Taskfile.yml(Taskfile.yaml) というファイルを使う。
Taskfile.yml は、例えば以下のようになる。
version: '3'
env:
MESSAGE: helloworld
tasks:
default:
cmds:
- echo $MESSAGEtask --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=value2MYVAR2=value2-2
MYVAR3=value3version: "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 filesversion: "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