高速にGo言語のCLIツールをつくるcli-initというツールをつくった
cli-init
を使えば,Go言語コマンドラインツール作成時のお決まりパターンをテンプレートとして自動生成し,コア機能の記述に集中することができる.
デモ
以下は簡単な動作例.
上のデモでは,add
とlist
,delete
というサブコマンドをもつtodo
アプリケーションを生成している.生成結果は,tcnksm/sample-cli-initにある.
背景
Go言語で作られたコマンドラインツールを見ていると,codegangsta/cliというパッケージがよく使われている.
これは,コマンドラインツールのインターフェースを定義するためのライブラリで,これを使えば,サブコマンドをもつコマンドラインツールを簡単につくることができる(Usageを自動で生成してくれたり,bash補完関数をつくれたりするという便利機能もある).
これを使って,自分もGo言語でコマンドラインツールをいくか作ってみた(e.g., Dockerとtmuxを連携するdmuxというツールをつくった).で,自分で書いたり,他のプロジェクトを参考にしたりすると,codegangsta/cliを使ったプロジェクトは同様のパターンで記述されていることに気づいた.
このパターンを毎回記述するのはダルいので,それを自動生成することにした.
使い方
使い方は以下.
1
|
|
例えば上のデモの場合は以下のようにしている.
1
|
|
-s
でサブコマンドを指定し,最後に作りたいコマンドラインアプケーションの名前を指定するだけ.
生成されるファイル
例えば,上記のコマンドでは以下のファイルが生成される.
- todo.go
- commands.go
- version.go
- README.md
- CHANGELOG.md
まず,todo.goの中身は以下.
1 2 3 4 5 6 7 8 9 10 |
|
ここには,main()
関数が生成され,その中でアプリケーションの基本的な情報が記述される.Author
やEmail
は.gitconfig
,Version
はversion.goの値が使われる.Usage
の中身だけ自分で記述する.
次に,commands.goには,サブコマンドの定義が記述される.例えば,サブコマンドlist
に対しては,以下が生成される.
1 2 3 4 5 6 7 8 9 10 |
|
Usage
とDescription
,そして,doList()
関数(list
の実際の挙動)だけ自分で記述する.他のオプションなどは,codegangsta/cliのREADMEを参照.
あとは,README.mdとCHANGELOG.mdのテンプレートも生成される.
インストール
Go言語がインストールされていることを前提にしている.
1 2 |
|
まとめ
たいしたことはしていない.基本は,codegangsta/cliで記述するべきこと,パターンに沿ってファイルを生成しているだけ.それだけだが,かなり記述量を減らすことができる.
バグや意見は,GitHubのIssueもしくは,@deeeetまでお願いします.