[Golang]urfave/cliで簡単に素早くコマンドラインツールが作れた話

Goの学習にコマンドラインツールを作りました。

urfave/cli

このパッケージを使うと風速で作れたので、紹介します。Qiitaにも結構記事があったので、今回ぼくが作ったコマンドラインツールgo-edoを例に解説していきます。

go-edo by jyouj

go-edoは数字から江戸幕府の将軍の名前が表示されるコマンドラインツールです。

$ go-edo 1
徳川家康

導入

urfave/cliを導入します。

$ go get github.com/urfave/cli

それではgo-edoを作っていきましょう。

将軍のデータを用意

go-edo/main.goにまずは将軍のデータをマップで書いていきましょう。

package main

var shogunNameMap = map[string]string{
  "1": "徳川家康",
  "2": "徳川秀忠",
  "3": "徳川家光",
  // 省略
  "14": "徳川家茂",
  "15": "徳川慶喜",
}

長くなるので、そのほかの将軍のデータはソースコードを確認ください。

cli製作

準備ができたので作っていきます。 go-edo/main.goにこう記述します。

package main

import (
  "fmt"
  "os"

  "github.com/urfave/cli"
)

// Mapping
var shogunNameMap = map[string]string{
  // 省略
}

func main() {
  app := cli.NewApp()

  app.Name = "go-edo"
  app.Usage = "Display shogun Name in Edo Bakufu"
  app.Version = "0.0.1"

  app.Action = func (c *cli.Context) error {
    str := c.Args().Get(0)
    fmt.Println(shogunNameMap[str])
    return nil
  }

  app.Run(os.Args)
}

app.Actionに処理を記述しておきます。打ち込まれた数字をキーに将軍の名前を表示します。str := c.Args().Get(0)でコマンドラインに入力された文字を取得しています。How easy! How simple!

いざ実行

それでは試してみましょう。

$ go run main.go 2
徳川秀忠

build、installしたら終了ですね。

オプション付きコマンドラインツールの方も作りました。-sをつけると執権の名前が返ってくるgo-kamakuraの方をご覧ください。

go-kamakura by jyouj