An open API service indexing awesome lists of open source software.

https://github.com/devlights/try-gotask

Task (go-task) [https://taskfile.dev/] の使い方についてのメモです。
https://github.com/devlights/try-gotask

Last synced: about 2 months ago
JSON representation

Task (go-task) [https://taskfile.dev/] の使い方についてのメモです。

Awesome Lists containing this project

README

        

# 概要

このリポジトリには、[Task](https://github.com/go-task/task) についての自分用のメモが置いてあります。

## リスト

| directory | readme | taskfile |
| ---------------------------------- | ------------------------------------------------------ | --------------------------------------------------------------- |
| 01.helloworld | [README](01.helloworld/README.md) | [Taskfile.yml](01.helloworld/Taskfile.yml) |
| 02.cli-options | [README](02.cli-options/README.md) | |
| 03.default-task | [README](03.default-task/README.md) | [Taskfile.yml](03.default-task/Taskfile.yml) |
| 04.env | | [Taskfile.yml](04.env/Taskfile.yml) |
| 05.dotenv | | [Taskfile.yml](05.dotenv/Taskfile.yml) |
| 06.include | | [Taskfile.yml](06.include/Taskfile.yml) |
| 07.no-color | [README](07.no-color/README.md) | [Taskfile.yml](07.no-color/Taskfile.yml) |
| 08.silent | [README](08.silent/README.md) | [Taskfile.yml](08.silent/Taskfile.yml) |
| 09.os-specific | | [Taskfile.yml](09.os-specific/Taskfile.yml) |
| 10.variable | | [Taskfile.yml](10.variable/Taskfile.yml) |
| 11.cliargs | [README](11.cliargs/README.md) | [Taskfile.yml](11.cliargs/Taskfile.yml) |
| 12.defer | [README](12.defer/README.md) | [Taskfile.yml](12.defer/Taskfile.yml) |
| 13.internal-task | [README](13.internal-task/README.md) | [Taskfile.yml](13.internal-task/Taskfile.yml) |
| 14.shopt | [README](14.shopt/README.md) | [Taskfile.yml](14.shopt/Taskfile.yml) |
| 15.single-command-task | [README](15.single-command-task/README.md) | [Taskfile.yml](15.single-command-task/Taskfile.yml) |
| 16.prompt | [README](16.prompt/README.md) | [Taskfile.yml](16.prompt/Taskfile.yml) |
| 17.dryrun | [README](17.dryrun/README.md) | [Taskfile.yml](17.dryrun/Taskfile.yml) |
| 18.preconditions | [README](18.preconditions/README.md) | [Taskfile.yml](18.preconditions/Taskfile.yml) |
| 19.loop-over-static-list | [README](19.loop-over-static-list/README.md) | [Taskfile.yml](19.loop-over-static-list/Taskfile.yml) |
| 20.loop-over-task-source | [README](20.loop-over-task-source/README.md) | [Taskfile.yml](20.loop-over-task-source/Taskfile.yml) |
| 21.loop-over-variables | [README](21.loop-over-variables/README.md) | [Taskfile.yml](21.loop-over-variables/Taskfile.yml) |
| 22.loop-rename-variables | [README](22.loop-rename-variables/README.md) | [Taskfile.yml](22.loop-rename-variables/Taskfile.yml) |
| 23.loop-over-task | [README](23.loop-over-task/README.md) | [Taskfile.yml](23.loop-over-task/Taskfile.yml) |
| 24.prevent-same-build | [README](24.prevent-same-build/README.md) | [Taskfile.yml](24.prevent-same-build/Taskfile.yml) |
| 25.run-cmd-on-windows | [README](25.run-cmd-on-windows/README.md) | [Taskfile.yml](25.run-cmd-on-windows/Taskfile.yml) |
| 26.global-taskfile | [README](26.global-taskfile/README.md) | [Taskfile.yml](26.global-taskfile/Taskfile.yml) |
| 27.run-interactive-cli-app | [README](27.run-interactive-cli-app/README.md) | [Taskfile.yml](27.run-interactive-cli-app/Taskfile.yml) |
| 28.remote-taskfile | [README](28.remote-taskfile/README.md) | [Taskfile.yml](28.remote-taskfile/Taskfile.yml) |
| 29.platform-specific-tasks | [README](29.platform-specific-tasks/README.md) | [Taskfile.yml](29.platform-specific-tasks/Taskfile.yml) |
| 30.loop-over-dependencies | [README](30.loop-over-dependencies/README.md) | [Taskfile.yml](30.loop-over-dependencies/Taskfile.yml) |
| 31.v338-cli_silent-cli_verbose | [README](31.v338-cli_silent-cli_verbose/README.md) | [Taskfile.yml](31.v338-cli_silent-cli_verbose/Taskfile.yml) |
| 32.joinpath | [README](32.joinpath/README.md) | [Taskfile.yml](32.joinpath/Taskfile.yml) |
| 33.completion-flag | [README](33.completion-flag/README.md) | [Taskfile.yml](33.completion-flag/Taskfile.yml) |
| 34.v341-taskdir | [README](34.v341-taskdir/README.md) | [Taskfile.yml](34.v341-taskdir/Taskfile.yml) |
| 35.v341-checksum-timestamp-in-cmds | [README](35.v341-checksum-timestamp-in-cmds/README.md) | [Taskfile.yml](35.v341-checksum-timestamp-in-cmds/Taskfile.yml) |

## Task (go-task) とは

[Task(go-task)](https://github.com/go-task/task) とは、make のような タスクランナーでありビルドツール。

Goで作成されているので、シングルバイナリとなっており、どの環境であってもインストールが簡単。

Windowsの場合でも scoop で以下のようにするとインストールできる。

```sh
scoop bucket add extras
scoop install task
```

Linuxの場合も、パッケージマネージャからインストール出来るようになっている。

```sh
brew install go-task/tap/go-task
```

また、Goで作成されているので、Goが入っていれば以下でもインストールできる。

```sh
go install github.com/go-task/task/v3/cmd/task@latest
```

Windowsの場合、デフォルトではmakeが存在しないので、makeを個別で入れる代わりに[Task](https://github.com/go-task/task)を使ってもいいかもしれない。

以下にドキュメントを見ながら覚えていった内容をメモしておくことにする。

---

## 最も大事なルール

makeには ```Makefile``` のように、taskの場合は ```Taskfile.yml```(```Taskfile.yaml```) というファイルを使う。

```Taskfile.yml``` は、例えば以下のようになる。

```yaml
version: '3'

env:
MESSAGE: helloworld

tasks:
default:
cmds:
- echo $MESSAGE
```

## Taskfile.yml の作り方

```task --init``` とすることで、カレントディレクトリに ```Taskfile.yml``` を初期生成してくれる。

```yaml
# https://taskfile.dev

version: '3'

vars:
GREETING: Hello, World!

tasks:
default:
cmds:
- echo "{{.GREETING}}"
silent: true
```

## 実行方法

対象となる ```Taskfile.yml``` が存在するディレクトリに移動して

```sh
# デフォルトのタスクが実行される
$ task

# タスク指定
$ task xxxx
```

とするか、ディレクトリは移動せずに

```sh
$ task -d /path/to/target
$ task -d /path/to/target task-name
```

としても良い。

## 環境変数 (env, dotenv)

タスク単位で環境変数を指定することが出来る。

```yaml
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

```

```sh
$ task -d 04.env/
task: [default] echo $MYVAR
myvar-local
task: [default] echo $MYVARGLOBAL
myvar-global
task: [default] echo $MYVARDUP
myvar-local
```

また、```.env``` などを指定することも出来る。この場合は ```dotenv:``` を用いる。

### my.env

```yaml
MYVAR1=value1
MYVAR2=value2
```

### my2.env

```yaml
MYVAR2=value2-2
MYVAR3=value3
```

### Taskfile.yml

```yaml
version: "3"

dotenv: ["my.env", "my2.env"]

tasks:
default:
cmds:
- echo $MYVAR1
- echo $MYVAR2
- echo $MYVAR3

```

```sh
$ task -d 05.dotenv/
task: [default] echo $MYVAR1
value1
task: [default] echo $MYVAR2
value2
task: [default] echo $MYVAR3
value3
```

## 他のタスクファイルを取込み

他のタスクファイルを取込み(include)することが可能。

取込むには、トップレベルで ```includes:``` を指定する。

存在しない場合でも処理を止めたくない場合は、```optional: true``` を指定する。

### ファイル階層

```sh
$ tree 06.include/
06.include/
├── other
│ └── Taskfile.yml
├── other2
│ └── othertaskfile.yml
└── Taskfile.yml

2 directories, 3 files
```

### other/Taskfile.yml

```yaml
version: "3"

tasks:
task:
cmds:
- echo 'task1'

```

### other2/othertaskfile.yml

```yaml
version: "3"

tasks:
task:
cmds:
- echo 'task2'

```

### Taskfile.yml

```yaml
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

```

```sh
$ task -d 06.include/
task: [other1:task] echo 'task1'
task1
task: [other2:task] echo 'task2'
task2
```