YAMLベースのタスクランナーroboを試してみたメモ

[Simple YAML-based task runner written in Go.](https://github.com/tj/robo) なroboを試して見たメモ。README.mdに記述してあるものをそのまま試してみただけ。

```console:Terminal
$ go get github.com/tj/robo
```

`go get`でインストールできる。[各OS向けのバイナリ](https://github.com/tj/robo/releases)も用意されているので`go`コマンドがなくてもすぐにインストールできる。

とりあえず`robo`コマンドを実行してみる。

```console:Terminal
$ robo

  error loading configuration: open robo.yml: no such file or directory

```

`robo.yml`ないです。あっ、はい。

とりあえず`--help`つけて実行してみる。

```console:Terminal
$ robo --help

  Usage:
    robo [--config file]
    robo <task> [<arg>...] [--config file]
    robo help [<task>] [--config file]
    robo variables [--config file]
    robo -h | --help
    robo --version

  Options:
    -c, --config file   config file to load [default: robo.yml]
    -h, --help          output help information
    -v, --version       output version

  Examples:

    output tasks
    $ robo

    output task help
    $ robo help mytask

```

とりあえず`robo.yml`を書いてみる。

```yaml:robo.yml
hello:
  summary: print "hello"
  command: echo 'hello'
```

テキトーにコマンドを実行してみる。

```console:Terminal
$ robo

  hello – print "hello"

```

helloの`summary`が出力された。helloサブコマンドを実行してみる。

```console:Terminal
$ robo hello
hello
```

`command`が実行されて`hello`が出力された。

helloworldサブコマンドを追加してみる。

```yaml:robo.yml
hello:
  summary: print "hello"
  command: echo 'hello'

helloworld:
  summary: print "hello world"
  command: |
    echo 'hello'
    echo 'world'
```

`summary`が増えてる。

```console:Terminal
$ robo

  hello – print "hello"
  helloworld – print "hello world"

```

`helloworld`サブコマンドを実行してみる。

```console:Terminal
$ robo helloworld
hello
world
```

2行で`hello world`が出力された。

スクリプトのファイルが指定できるみたいなので指定してみる。

```yaml:robo.yml
test:
  script: ./test.sh
```

```sh:test.sh
#!/bin/bash

echo 'test'
```

```console:Terminal
$ robo test
test
```

スクリプトが実行されて`test`が出力された。

`usage`を指定すると引数が渡せるっぽい。

```yaml:robo.yml
echo:
  command: echo
  usage: "[string]"
```

```console:Terminal
$ robo echo

$ robo echo 123
123
```

おー。

`examples`を指定すると例を表示できるっぽい。

```yaml:robo.yml
echo:
  summary: print arguments
  command: echo
  usage: "[string]"
  examples:
    - description: print "hello"
      command: echo hello
    - description: print "world"
      command: echo world
```

```console:Terminal
$ robo help echo

  Usage:

    echo [string]

  Description:

    print arguments

  Examples:

    print "hello"
    $ echo hello

    print "world"
    $ echo world

```

表示された。例示には良いかも。

`variables`を指定して`{{ }}`を記述すると変数を扱えるみたいだ。

```yaml:robo.yml
hello:
  summary: print hello
  command: echo {{.hello.string}}

variables:
  hello:
    string: hello
```

```console:Terminal
$ robo hello
hello
```

`variables`の`hello.string`が出力された。

`templates`を指定すると`help`の出力を変更できるっぽい。

```yaml:robo.yml
task1:
  summary: task1
  command: echo task1
task2:
  summary: task2
  command: echo task2
task3:
  summary: task3
  command: echo task3

templates:
  list: |
    {{range .Tasks}}
      name: {{cyan .Name}}
      summary: {{.Summary}}
      usage: {{.Usage}}
    {{end}}
```

```console:Terminal
$ robo help

  name: task1
  summary: task1
  usage:

  name: task2
  summary: task2
  usage:

  name: task3
  summary: task3
  usage:

```

---

YAMLで簡単に書けるので使いどころを間違えなければとても良いかも。