質問

アプリケーションやライブラリを開発・リリースする上での作業を補助するユーティリティが欲しいと思っています。Perl に限定されたオーサリングツール以外知らないのですが、できるだけ汎用的なものがいいです。

この質問においてオーサリングツールとは 「リリース時に毎回やる git tag && git pushの実行 や バージョン名、ChangeLogの入力を補助するもの」として考えています(回答を受けて変わるかもしれませんが現状はこう考えています)。

端折った言い方ですが「Perl の Minilla 内の、Perl に限らない汎用的な部分を抜き出したもの」がイメージに近いです。

Minilla 参考: http://blog.64p.org/entry/2013/05/14/080423

特定の開発環境に依存しない、比較的汎用性の高めなオーサリングツールにはどのようなものがあるでしょうか。

詳細な希望は後述しますが、それによく合うものがあれば乗り換えも考えていますが、 完全には合わない場合はそれを参考に自分で開発することも考えています。

特定言語・特定フレームワーク・特定環境下ではこういったオーサリングツールがあるよ、というような以下の要件を満たさないような参考回答も歓迎します!

望むものの詳細

特定の開発言語・フレームワークの開発に限らない、リリース準備を楽にするユーティリティの集合であると望ましい。(雑にいうと、フルスタックフレームワークではなく小粒のライブラリ集を利用したい、というイメージ)

PerlではMinillaがあり、前述の通りこのMinillaの「Perl に限らない汎用的な部分を抜き出したもの」を求めています。

自分がどんなものが欲しいのかを考えるために、自分が欲しいと考えるツールのドラフトを以下に作成しました。現時点ではドキュメントのみで実装が無い状態です。

https://github.com/ichigotake/App-Release

以下に出てくる project コマンドを利用した実行イメージは、こういった物がほしいというイメージとして読んで下さい。

バージョン名を入力する対話式UI

### 実行イメージ。次期バージョンの入力を確定すると、入力したものが標準出力へ吐かれる
$ project version
Next Release?[1.0.1]: (ここに次期バージョンを入力)

例えば、 "1.0.0" のようなバージョン名のみが記載された app/VERSION というテキストファイルでバージョン名を管理しているプロジェクトがあったとします。

そのプロジェクトに対する次期バージョンの入力を $ project version > app/VERSION のような形で簡単に利用出来ると嬉しい。

ChangeLog の管理

### 実行イメージ。changes を実行すると、チェンジログを編集するエディターが立ち上がる。
### 編集を完了させると、自動的にコミットされる。

$ project changes

Changes というファイルで ChangeLog を管理しているとして、その ChangeLog を $EDITOR を利用して編集する。

このような編集 UI をスクリプトで呼び出せるようにする事で、リリーススクリプトの実行途中で ChangeLog を入力したり最終確認を目視でしたり、といったフローが作りやすくなる。

ファイル名は設定ファイル等で任意に変更出来るようにする。

以下は、編集直後のコミットイメージはこちらです

git tag から git push まで

引数としてバージョン名 x.y.z を渡すと git tag x.y.x && git push origin x.y.z:x.y.z && git push origin -u master をやってくれるようなもの。

ポータビリティの高さ

Gradle Wrapper のような、git clone をした直後に開発ツールを別途インストールする手間がいらないようなポータビリティがあると嬉しいですね。

上記で示した App-Release では、Perl の App::FatPacker というモジュールを利用して依存ライブラリを1つのスクリプトへまとめる事で、実行ファイルが外部ライブラリへ依存しない形で配布される事を期待しています。

質問の意図(再掲)

欲しいもののイメージとして 作成した App-Release をこれから作る前提で書いてますが、上記の要件を満たすものや目指すゴールやポリシーに合致するような汎用のオーサリングツールや代替手段があれば、それに乗っかるかもしくは参考にしたいです。

そして、世の中にどんなオーサリングツールがあるのかをあまりよくわかっていないので、この質問によってそれらを知る機会としたい思いもあります。