いろいろ備忘録日記

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

Task (go-task) メモ-45 (Wildcard arguments, タスク名にワイルドカードを付与)

関連記事

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

概要

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

Task には Wildcard arguments という機能があります。

これはタスク名の部分に * をつけることでこの部分にマッチする値を変数として受け取ることが出来る機能です。

Another way to parse arguments into a task is to use a wildcard in your task's name. Wildcards are denoted by an asterisk (*) and can be used multiple times in a task's name to pass in multiple arguments.

引数をタスクに解析する別の方法は、タスク名にワイルドカードを使用することです。ワイルドカードはアスタリスク(*)で示され、タスク名内で複数回使用することで複数の引数を渡すことができます。

例を上げると以下のような感じです。

  mytask:*:
    vars:
      VALUE1: '{{index .MATCH 0}}'
    cmds:
      - echo "value is '{{.VALUE1}}'"

上の mytask:*: としている部分がワイルドカードです。

このようにタスク名を設定した状態でコマンドラインより

$ task mytask:helloworld

と実行すると内部で VALUE1 にアスタリスクの部分の値が設定され、以下のように出力されます。

$ task mytask:helloworld
value is 'helloworld'

ワイルドカードは複数指定することが可能です。

  mytask:*:*:
    vars:
      VALUE1: '{{index .MATCH 0}}'
      VALUE2: '{{index .MATCH 1}}''
    cmds:
      - echo "value1 is '{{.VALUE1}}'"
      - echo "value2 is '{{.VALUE2}}'"

以下のように指定します。

$ task mytask:foo:bar
value1 is 'foo'
value2 is 'bar'

サンプル

# https://taskfile.dev

version: '3'

tasks:
  mytask:*:
    vars:
      VALUE1: '{{index .MATCH 0}}'
    cmds:
      - echo "value is '{{.VALUE1}}'"
  mytask-n:*:*:
    vars:
      VALUE1: '{{index .MATCH 0}}'
      VALUE2: '{{index .MATCH 1}}'
    cmds:
      - echo "values are '{{.VALUE1}}' and '{{.VALUE2}}'"

実行結果

$ task mytask:helloworld
task: [mytask:helloworld] echo "value is 'helloworld'"
value is 'helloworld'

$ task "mytask:helloworld"
task: [mytask:helloworld] echo "value is 'helloworld'"
value is 'helloworld'

$ task "mytask:hello world 11111"
task: [mytask:hello world 11111] echo "value is 'hello world 11111'"
value is 'hello world 11111'

$ task mytask:hello world
task: No tasks with description available. Try --list-all to list all tasks
task: Task "world" does not exist

$ task mytask-n:hello:world
task: [mytask-n:hello:world] echo "values are 'hello' and 'world'"
values are 'hello' and 'world'

$ task "mytask-n:hello:world"
task: [mytask-n:hello:world] echo "values are 'hello' and 'world'"
values are 'hello' and 'world'

$ task "mytask-n:hello world"
task: No tasks with description available. Try --list-all to list all tasks
task: Task "mytask-n:hello world" does not exist

参考情報

taskfile.dev


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

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