バージョン管理で消耗してませんか?

ソフトウェア開発

皆さん、プロダクトのバージョン管理はどうしてますか?
開発言語や関連するビルドシステムの組み合わせでバージョン管理方法は様々です。

私は今でもJVM系の開発が多く、Gradleを利用しています。Gradleの場合は、project.versionというプロパティがあるので、そのプロパティをgradle.propertiesで管理する方法が一般的です。最初の頃は、手動でバージョンを書き換えていましたが、バージョンを変更するとgitのリリースコミットやリリースタグも作成する等、関連作業が増えてきたため、Gradleのカスタムタスクを作成し自動化するなど工夫していた時期もありました。

Type Scriptの開発の場合は、yarnを利用してます。yarnやnpmの場合は、package.jsonのversion属性で管理するのが一般的です。yarnの場合は、versionコマンドがあり、次のように実行すると対話形式でバージョンの変更が行われ、デフォルトではgitのリリースコミットとリリースタグの作成も同時に行われます。

$ yarn version
info Current version: 1.0.1
question New version: 1.0.2
info New version: 1.0.2
✨  Done in 9.42s.

あと、バージョン管理では Semantic Versioning を利用することが一般的です。yarnのversionコマンドは Semantic Versioning に準拠していることも優れている点です。

JVM環境でもyarn versionと同じようなコマンドが欲しくなって semver-gradle-plugin を作りました。
このプラグインは、yarn versionライクな仕様にしてます。

$ gradle semver
info Current version: 1.0.1
question New version: 1.0.2

> Task :semver

...

info New version: 1.0.2

yarn versionと同様に対話形式の他にもオプションでメジャーバージョンやマイナーバージョンをインクリメントしたり、gitのリリースコミットやリリースタグの作成も行います。また、独自の仕様としてgradle.propertiesの他にpackage.jsonもサポートしました。

このプラグインを利用することで、バージョン管理が楽になりました。
semver-gradle-plugin の使い方は https://github.com/rising3/semver-gradle-plugin#readme に書いています。

最後に semver-gradle-plugin を利用した簡単なカスタム方法を紹介します。
次のスクリプトではバージョン更新後にリリースコミットとリリースタグをリモートにプッシュします。このような機能を簡単に追加できるのはGradleの利点ですね。

コメント