All Articles

リリースバージョンを管理するやつをGoで書いた

Go製のアプリのリリースバージョンを管理する

Goで書いたアプリをバイナリで配布するケースはよくあると思うけど、そのアプリのバージョンをどうするか、やっぱやるならsemverだよなぁってことで、管理するアプリを作った。先にリポジトリのリンクを貼っておく。使い方もそちらに。

gov / Golang versioning tool

なお、vendoring toolではないです。

リリースバージョンの管理と埋め込み

gov initってやると .versions というファイルを作り、そこにバージョン情報を書き込んでいく。ファイル自体はMakrdown崩れみたいなやつで、 一応バージョンに対するメモも残せるのでリリースノート的な使い方もできる。

普段はnodeで開発しているので、コマンド体系はnpmと同じにした。

$ gov [major|minor|patch] [-m memo]

でバージョンを更新し、masterにコミット作成、タグを打つ、.versionsに追記ってところまでを一気にやる。 で、後は --follow-tagsとかでまとめてリモートにあげちゃう感じ。npmのライブラリ作ってるときと同じような操作感にした。と思う。

そしてGoで開発してるとビルドするバイナリにバージョン情報を埋め込むことがあるけど、このコマンドの結果を使えば簡単になる。 Makefileだとこんな感じ:

all:
  go build -ldflags "-X main.version=$(shell gov)"

引数なしで gov ってやると現在のバージョンが戻るので、それを埋め込むことで簡単になる。 CircleCIでやるなら $CIRCLE_TAG を使えばいいけど。

まとめ

シングルバイナリなのでGoアプリに限らず使えると思う(大体の言語はnpmだったりcargoだったりで管理できるけど)。 バージョンは最初から溜めていくのでリリースノートと履歴の管理には良いと思う。

とりあえず自分はGoアプリで使いたかったので書いたら楽になったので良かった。

現場からは以上です。