はじめに

今回は gitrev パッケージと optparse-simple パッケージを使ってアプリケーションに Git の情報を含めてみようと思います!

利用者の多いアプリケーションだと、バグ報告時にどのコミットでビルドしたものなのか知りたい場合に便利です。

表示されるバージョン情報はこんな感じになります。

以下のアプリケーション等でも利用されているように、実用度はとても高めです。

また、実装コストもそれほどかからないため、オススメです!

gitrev パッケージ

gitrev パッケージは Template Haskell の機能を使ってコンパイル時に以下の情報を取得可能です。

  • ブランチ名および、タグ名
  • コミット数
  • コミット日
  • コミットの describe
  • コミットのハッシュ

そのため、表示する情報を自分の好きなようにカスタマイズしたい場合に便利でしょう。

サンプルアプリケーション

以下のコードは Hackage に載っているコードです。

実際に実行してみましょう。

現状は git のコミットが無いため、全て UNKNOWN として表示されています。

実際に git リポジトリを作ってコミットしてみましょう。

こんな感じで git の情報を自由に組み合わせることができます。

optparse-simple パッケージ

あまり書式を気にせず、定形で良い場合はもっと簡単な方法があります。

それは optparse-simple パッケージの simpleVersion を使う方法です。

simpleVersion では git の情報だけでなく、アプリケーションのバージョンも一緒に表示することができます。

simpleVersion

simpleVersion の定義は以下のようになっています。

$gitHash$gitDirty を見ればわかる通り、内部的に gitrev パッケージを利用して git の情報を取得しています。

また、第一引数の Version 型は base パッケージの Data.Version で定義されている型です。

以下のように makeVersion :: [Int] -> Version 関数を使って Version 型の値を作ることができます。

適当にプロジェクトを作って、上記の内容を実行してみましょう。

まだ git で管理していないため、バージョン情報のみが表示されます。

では、先ほどの例と同様に git リポジトリを作ってコミットした結果を見てみましょう。

このようにちゃんとリビジョンが表示されるようになりました。

アプリケーションのバージョンを自動的に更新する

アプリケーションのリリースごとに makeVersion を使って更新する作業はとても面倒ですし、いつか間違えてしまうかもしれません。

これを解決するためには .cabal ファイルからバージョン情報を自動取得して simpleVersion 関数に渡してあげるようにすれば良いのです。

Paths_XXXXXXXX はアプリケーション名 (cabal ファイルの name の値) を指定します。これで cabal ファイルのバージョン情報を直接取得できるようになります。

表示される結果はこんな感じです。

めちゃめちゃ簡単なのでオススメの方法です。

まとめ

自分のアプリケーションがとてもカッコよくなるので是非ためしてみてください!

以上です。