devlights / try-gotask

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

概要

このリポジトリには、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) とは

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

Taskfile.yml の作り方

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

としても良い。

環境変数 (env, dotenv)

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

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: を用いる。

my.env

MYVAR1=value1
MYVAR2=value2

my2.env

MYVAR2=value2-2
MYVAR3=value3

Taskfile.yml

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

other/Taskfile.yml

version: "3"

tasks:
  task:
    cmds:
      - echo 'task1'

other2/othertaskfile.yml

version: "3"

tasks:
  task:
    cmds:
      - echo 'task2'

Taskfile.yml

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

About

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

License:MIT License


Languages

Language:Go 56.0%Language:C 44.0%