godzilというGoのオーサリングツールを作っている
https://github.com/Songmu/godzil
Goのモジュール作成と、リリースをサクッとできる君が欲しくて作っている。作りかけだけど、すでに便利に使ってはいます。インターフェースは結構変わる可能性はあります。名前の通りかなりMinillaインスパイアです。
モチベーションとしては以下。
- リポジトリ作る際に毎回適当な既存リポジトリからコピペするのに飽きた
- Go Modules時代になりツールじゃないライブラリもタグ管理した方が良さげになってきたのでリリース管理したい
今のところの使いかた
モジュールの作成
% godzil new github.com/Songmu/oreore
scaffoldingされて、git init && git add .
される。あとは適当にremoteリポジトリを登録して開発してください。今のところGitHub or GHEで開発する前提になってます。
リリース
% godzil release
semver形式でリリースバージョンを聞かれるので入力します。以下のことをやってくれます。
- バージョン番号のbump
- CHANGELOG.md 自動生成
- pull requestベースで開発して、マージコミットを作る形でマージしている場合
git tag
git push && git push --tags
逆にツールのビルドはおこなわないのでそこは適宜別の仕組みを利用する形です。リリースフックの仕組みなどは用意するかも知れません。
今後の展望
まだ、僕のオレオレツール感が強いのですが、試しに使って意見をいただけると嬉しいです。以下の機能追加などを考えています。
- scaffold時のテンプレートを選べるように
- 現状一パターンのみでかなり僕の色が強い
- ドキュメンテーション周り強化
- README.mdからdoc.goの自動生成とかやりたいけど表現力が違うので難しそう
- リリースバージョンの自動決定
- motemen/gompatible みたいなの使って、非互換だったらメジャー、機能追加だったらマイナー、それ以外はパッチ、などできるとかっこいい
余談
前のエントリで、取り上げたstatik
は、実はこのgodzil
で使いたかったというのがあります。ちなみに、godzil
内部で使っているScaffoding用のライブラリで gokoku
というものも作っています。
https://github.com/Songmu/gokoku
あるファイルツリーを元に、それ配下のファイルをGoのテンプレートに見立てて、一律指定位置に書き出してくれるものです。
そのために gokoku.Tmpl
っていうtypeを定義しています。今後は gokoku.Hojo
というのも定義したいですね。…はい。