どのバージョンでビルドされたかを記録するgit-commit-id-maven-pluginを使ってみる

# はじめに

個人開発や、CI/CDが整っていない開発運用環境だと、このライブラリって、どのGitの断面でビルドされたものなのだろう、、とわからなくなって困ったことは無いでしょうか？

旧時代的には、ビルド直後にMD5などでハッシュ値を取って、その番号をどのリリースバージョンか台帳などに記録、それによりこのライブラリはこのバージョンだね、とかしていました。

MevenCentralリポジトリでも、大体のライブラリはmd5ファイルも保管してあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/31bdf9ae-2a5d-20f2-9f1e-be5a278333c2.png)


ビルド後にライブラリが意図せず改変されていないことを確認するためには妥当だとは思いますが、自分でビルドしたものだとこの確認方法と管理はちょっとやりすぎ（大変）な感じがします。

そこでGitのブランチやコミットIDがライブラリ内にファイルとして含むことができるMavenプラグインである、git-commit-id-maven-pluginをご紹介します。

# git-commit-id-maven-plugin とは

以下のGithubリポジトリで公開されているOSSです。

https://github.com/git-commit-id/git-commit-id-maven-plugin

> git-commit-id-maven-plugin is a plugin quite similar to Build Number Maven Plugin for example but as the Build Number plugin at the time when I started this plugin only supported CVS and SVN, something had to be done. I had to quickly develop a Git version of such a plugin. For those who don't know the plugin, it basically helps you with the following tasks and answers related questions
 ・   Which version had the bug? Is that deployed already?
 ・   Make your distributed deployment aware of versions
 ・   Validate if properties are set as expected

DeepLで翻訳すると以下です。

> git-commit-id-maven-plugin は、例えば Build Number Maven Plugin とよく似たプラグインですが、このプラグインを始めた当時は Build Number プラグインは CVS と SVN しかサポートしていなかったので、何か手を打たなければなりませんでした。このようなプラグインのGit版を早急に開発する必要がありました。このプラグインを知らない人のために説明すると、基本的には以下のような作業を支援し、関連する質問に答えてくれるものです。
    ・どのバージョンにバグがあったのか？それはすでにデプロイされているのか？
    ・分散デプロイメントでバージョンを認識させる
    ・プロパティが期待通りに設定されているかどうかを検証する

Build Number Maven Pluginというのもあるのですね。知りませんでした。。。

git-commit-id-maven-pluginはMavenCentralリポジトリでも公開されています。

https://mvnrepository.com/artifact/io.github.git-commit-id/git-commit-id-maven-plugin

# 早速やってみる

Mavenを使ってビルドをしている場合には、pom.xmlに利用することを追記するだけで利用することができます。
```pom.xml
〜前略〜
      <build>
          <finalName>${project.artifactId}-${project.version}</finalName>
          <plugins>
〜中略〜
              <plugin>
                  <groupId>io.github.git-commit-id</groupId>
                  <artifactId>git-commit-id-maven-plugin</artifactId>
                  <version>5.0.0</version>
                  <executions>
                      <execution>
                          <goals>
                              <goal>revision</goal>
                          </goals>
                      </execution>
                  </executions>
                  <configuration>
                      <verbose>true</verbose>
                      <generateGitPropertiesFile>true</generateGitPropertiesFile>
                  </configuration>
              </plugin>
        </plugins>
      </build>
〜後略〜
```
generateGitPropertiesFileという設定箇所については、Git情報をファイルとして作成してライブラリ内に含むという設定となります。

この設定をした後、ビルド（``mvn package``)を実行すると、classesの中にgit.propertiesが生成されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/30e42bb9-6342-2dee-c85e-3bc72b99c358.png)

ここに入っているということは、jarファイルやwarファイルの中にも含まれますので、Git情報が書かれたファイルをライブラリ内に含むことができるというわけです。便利ですね。

git.propertiesの内容は以下となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113217/75e2aac9-3d57-9618-1d97-c0c6d4532981.png)

かなり詳細な情報が取れます。

## 注意事項

注意事項として、塗りつぶしているところがあるとおり、ライブラリに含むべきではないかなーと思う場合があります。その場合はこの情報は含む、含まないという設定をpom.xmlに追記することで決めることができます。詳細はusing-the-pluginを参照ください。

# 終わりに

GithubのStar数は1.4kとあまり多くはないのですが、Gitを使ってチーム開発をする場合には必須で入れておいてもよいMavenプラグインかなと思います。

ぜひ使ってみてください！

# リファレンス

プラグイン利用方法
https://github.com/git-commit-id/git-commit-id-maven-plugin/blob/master/docs/using-the-plugin.md

利用したソースコード
https://github.com/omix222/jeeuberjardemo