いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Task (go-task) メモ-25 (loop over variables, ループ機能, 変数の値をループ)

関連記事

Task (go-task) メモ-23 (loop over static list, ループ機能, 静的なリストをループ) - いろいろ備忘録日記

Task (go-task) メモ-24 (loop over task's source, ループ機能, タスクソースをループ) - いろいろ備忘録日記

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

これまでの Task に関する記事は上の関連記事をご参照ください。

v3.28.0 から待望のループ機能が追加されました。これは嬉しいです。

ドキュメント上での記載は以下となります。

いろいろなやり方が記載されていますが、今回は変数の値をループするやつを。

一番利用する頻度が高いであろうものですね。

基本形は以下のようになります

task-name:
  cmds:
    - for: loop-source
      cmd: command {{ .ITEM }}

ループ中の項目は {{ .ITEM }} で参照できます。

サンプル

# https://taskfile.dev

version: "3"

silent: true

vars:
  VAL1: Hello World
  VAL2: HELLO,WORLD
  VAL3:
    sh: find ../ -name '*.yml' -type f

tasks:
  default:
    cmds:
      - task: use-val1
      - cmd: echo '--------------------------------------'
      - task: use-val2
      - cmd: echo '--------------------------------------'
      - task: use-val3
  use-val1:
    cmds:
      - for: { var: VAL1 }
        cmd: echo {{ .ITEM }}
  use-val2:
    cmds:
      - for: { var: VAL2, split: "," }
        cmd: echo {{ .ITEM }}
  use-val3:
    cmds:
      - for: { var: VAL3 }
        cmd: wc -l {{ .ITEM }}

実行すると以下のようになります。

$ task --version
Task version: v3.28.0 (h1:PGYGwevlGQdYrqhO6lLCYylC7YuGoQLlVwHkO42gf0I=)

$ task
Hello
World
--------------------------------------
HELLO
WORLD
--------------------------------------
11 ../.gitpod.yml
20 ../01.helloworld/Taskfile.yml
9 ../03.default-task/Taskfile.yml
15 ../04.env/Taskfile.yml
10 ../05.dotenv/Taskfile.yml
14 ../06.include/Taskfile.yml
6 ../06.include/other/Taskfile.yml
6 ../06.include/other2/othertaskfile.yml
6 ../07.no-color/Taskfile.yml
17 ../08.silent/Taskfile.yml
9 ../09.os-specific/Taskfile.yml
5 ../09.os-specific/Taskfile_linux.yml
5 ../09.os-specific/Taskfile_windows.yml
18 ../10.variable/Taskfile.yml
8 ../11.cliargs/Taskfile.yml
25 ../12.defer/Taskfile.yml
24 ../13.internal-task/Taskfile.yml
37 ../14.shopt/Taskfile.yml
22 ../15.single-command-task/Taskfile.yml
13 ../16.prompt/Taskfile.yml
15 ../17.dryrun/Taskfile.yml
13 ../18.preconditions/Taskfile.yml
13 ../19.loop-over-static-list/Taskfile.yml
16 ../20.loop-over-task-source/Taskfile.yml
33 ../21.loop-over-variables/Taskfile.yml

コマンドの実行結果を変数に格納しておき、それをループするやり方が一番利用すると思います。

以下のようにやります。

vars:
  変数名:
    sh: コマンド

以降は、 {{ .変数名 }} で使えます。

例としては以下のような感じ。

$ ls -1
Taskfile.yml
go.mod
main.go

$ cat Taskfile.yml
# https://taskfile.dev

version: '3'

tasks:
  default:
    vars:
      items:
        sh: find . -type f  \( -name '*.go' -o -name '*.mod' \)
    cmds:
      - echo '{{ .items }}'
    silent: true

$ task
./go.mod
./main.go

bash - How to combine 2 -name conditions in find? - Unix & Linux Stack Exchange

参考情報

taskfile.dev

github.com

engineer.retty.me

zenn.dev

zenn.dev


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。