「あれっ…、このバグいつから発生してるんだ…?」
「テスターはいつのバージョンで試した結果なんだ?」
という状況ありますよね。
こういうときにバージョン番号やコミットIDが付いていると問題の特定が捗ります。
以前はバージョン番号を手動で変更していたのですが、デプロイするときにこれを自動的に付けるとすごく便利です。
バージョン番号を付ける習慣ができるとNPM、アプリ、プロジェクトなど色んな所が捗ります。
ポイント
ポイントがいくつかあります。
- Gitのタグでバージョン番号を付ける
- AndroidアプリやPWA、WordPressプラグインなどのバージョン番号と合わせる
- 小さい修正の場合でもバージョン番号を上げていく
スクリプト
echo $(git describe --abbrev=0 --tags) '-' | tr -d " \n"; git rev-parse HEAD | cut -c1-7 | tr -d "\n"; echo '-'$(date +%Y%m%d)
もしくはこの方法です
# @see https://stackoverflow.com/questions/4493205/unix-sort-of-version-numbers
TAG=$(git describe --abbrev=0 --tags)
COMMIT_ID=$(git rev-parse HEAD | cut -c1-7 | tr -d "\n")
コードはこちらです。 https://gist.github.com/yousan/34016e297cad5871b27a94135d5e4d43/
コマンド | 解説 |
---|---|
git tag | リポジトリに付けられたタグを出力 |
sort -V | 昇順に並び替え。-Vでバージョン番号を理解してソート(11などの二桁を文字列ではなく数字としてソートなど) |
tail -1 | 最後の1行を取得 |
tr -d " \n" | 空行削除 |
git rev-parse HEAD | 現在のコミットID取得 |
cut -c1-u7 | コミットIDを7文字に |
echo '-'$(date +%Y%m%d) | 日付を付与 |
使い方
version.sh
を呼ぶと出てきます。
$ bash version.sh | bash
v1.7.1-b599631-20181203
Gistのオンライン上のスクリプトをそのまま使うことも出来ます。
$ curl -s -L https://gist.githubusercontent.com/yousan/34016e297cad5871b27a94135d5e4d43/raw/46f5662225ffec4bcfc4bc720a42cbb74cd8c9b3/version.sh | bash
付与される情報と目的
上記のスクリプトでは v1.7.1-b591234-20181203
といった形で出力されます。
それぞれ | 目的 |
---|---|
バージョン番号 | エンドユーザ、テスターからの報告や開発のやりとりを簡易的にするため |
コミットID | コミットID決め打ちで再現させるため |
日付(YYYYMMDD形式) | ぱっと見で発生時期がわかるため |
上記のような目的で付けています。
テスターからバグ報告をもらう際にバージョン番号が入るようにすると一目瞭然なのでいい感じになります。
バージョン番号を打つために
バージョン番号を打つためにリリース用のGitのタグを打ちます。
Git-flow1に沿ってリリースを行うと、自動的にリリース用のタグが打たれます。
こんな感じです。
バージョン番号は数字のみ
か先頭にvを付けるか
に分かれていますが、最近はvを付ける派のほうが多そうなのでそちらにしています。(画像は少し前に作ったリポジトリなのでvが無いです)
今回付けたいそれ以外の情報、コミットIDと日付についてはプログラム側でまかないます。
バージョン番号を入れるタイミング
バージョン番号を入れるタイミングですが、初回リリース時(大体このときをバージョン1.0としています)から始めています。
というのも最初期はバージョンアップも非常にこまめに行っていて、バージョン情報が頻繁に更新され過ぎるのを防ぐためめです。
使い方の例
少し前ですがCakePHPで作ったプロジェクトの際の例です。
スクリプトを元にConfig
に書きだし、テンプレートで読み出ししています。
<?= Configure::read('Version') ?>
Gitで打ったReleaseバージョンをプログラム側で参照できるようにする
是非教えてください
これをつかった方法やもっと便利な方法があれば是非教えてください!開発プラクティスに飢えてます😜
参考記事
書いててほぼ網羅されている記事を見つけました、完璧ですね!
タグ付けデプロイの思想的裏付け
謝辞
コードは @ur0nくんに書いてもらいました。ありがとうございます!
-
Git-Flowなのかgit-flowなのかレターケースがいつも分からなくなります…w ↩