高速に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までお願いします.