自作してたhosts管理ツールをバージョンアップさせました。 https://github.com/usk81/holster

holsterってなんぞやは、こちらで。
http://blog.code42.jp/holster/

今回やったこと

CLIフレームワークを変更しました。

今までは、codegangsta/cli を使用していました。

このフレームワークはCLIツールを作るときには直感的に作れるので重宝してて、redditstackoverflowなんかでもGoLangでCLI作りたいんだけど?的な質問には絶対と言っていいほど登場するフレームワークの一つです。

なのですが、

  • usage(使用方法)とdescription(説明)がごっちゃになっている
  • 概要と詳細説明が分かれていない
  • Helpとかをいじりたい時に黒魔術を唱える必要がある

などの問題がありました。

そんなある日、githubがgit-lfsの中でよさ気なフレームワークを使っているのを見つけました。

それが、今回切り替えたspf13/cobraです。

cobraはセットする処理は充実しているものの codegangsta/cli と違って、引数を参照したりする処理などゲットする処理は用意されていないためGolangに慣れていないと若干難しいかもしれません。
今回使わなかったのでよくわかりませんが、flagを取ってきたい時もFlag()メソッドで[]stringで格納されているflag一式取ってくる形になるかと思います。

e.g) codegangsta/cliの場合

app.Action = func(c *cli.Context) {  
  name := "someone"
  if len(c.Args()) > 0 {
    name = c.Args().First()
  }
  if c.String("lang") == "spanish" {
    println("Hola", name)
  } else {
    println("Hello", name)
  }
}

e.g) spf13/cobraの場合

&cobra.Command{
        Use:   "hello [name]",
        Short: "short description",
        Long:  "long description",
        Run: func(cmd *cobra.Command, args []string) {
  name := "someone"
  if len(args()) > 0 {
    name = args[0]
  }
  if c.String("lang") == "spanish" {
    println("Hola", name)
  } else {
    println("Hello", name)
  }
}

ですが、それ以外だったら充実していて

  • usage(使用方法)とdescription(説明)が綺麗に分かれている
  • 概要と詳細説明が分かれている
  • Helpとかをいじりたい時に変更するためのメソッドがある

など、作る人がカスタマイズしやすいように作られています。

超便利(*´艸`*)

updateをpushに変更しました

holster update default  

で、事前に用意してあるdefault.hostの内容に差し替える。 というのが ver1.0系だったのですが...

updateなのか?

チガクね?

と思っていたものの、いいメソッド名が思いつかず。

gitを使っているときにpushでいいじゃん!!

と思い、メソッド名を変えました。

この時点で後方互換が失われましたね... まぁいいか...

というわけで、ver2.0系は

holster push default  

となります。

appendなくしました

一時的にhostsに情報付け加えたいとかで、bullet(事前に準備した差し替え用のhosts)にだけで賄えない場合にhostsに直接追記する処理。

一生懸命作ったものの使わなかったので廃止。 (゚⊿゚)イラネ

変更は以上です(`・ω・´)ゞ