このサイトのコミット統計を取得したかったのですが、npmパッケージで良さそうなものがなかったので作ってみました。

動機


前述の通りなのですが、少し補足して書きます。

以前からこのサイトの更新情報をGitHubのようなコミットグラフで表示したいと思っていました。しかし、このサイトはHexoという静的サイトジェネレータを使用して作成しているため、更新情報などをデータベースに持たせることはできません。

そこで、コミット時にデータを生成してそれを取得して表示させることにしました。が、このコミットの統計的なデータを取得できるnpmパッケージがなかったので自作したという経緯です。

できること


下記のような切り口でgitのコミット情報を統計で取得できます。

  • 年別
  • 月別
  • 曜日別
  • 日別(1~31日)
  • 時間別
  • 曜日×時間別

詳しくはREADME見てください。

実装


実装については相変わらずアレなのですが、gitログ叩いてパースしてるだけです。ただ、gitログは一回で全部取得してるので数十万コミットのリポジトリでたたいたりすると落ちると思います。数万くらいなら動くけど。期間指定とかできるようにしてるので、まあ、その辺でなんとかしてくださいという感じですね。そもそも私の用途でそこまでいかないし。という感じです。

クラス使ってる割には実行都度ログをパースしてたり(これは一応、事情があってしてます)コード全体的にも設計はまあいつも通りお察しなんですが、自分の用途は実現できたのでええかな。という感じです。

Hexo向けのラッパーライブラリも作った


実際にはHexoの生成時にコミット情報も生成する必要があるため、そのためにgit-commit-statisticsをラップしたHexo向けのパッケージも作りました。hexo generateの時に指定した情報を指定したファイル名でjson形式で作成します。

グラフ化した


これらを使ってコミット情報をグラフ化しました。こっちの記事に詳しく書いてます。