Git logで出力されたものをGoogle Spreadsheetに持っていってグラフ化

## やること

[Gitのドキュメント](https://git-scm.com/book/ja/v2)を読んでいて、`git log`は好きなフォーマットで出力できるオプション(`--pretty`)があったことに気づいたので、それを利用してCSVとして出力してみました。

いったんCSVにしてしまえば、pythonやRなどいろいろな応用が効くと思います。

今回はGoogle Spreadsheetのグラフ機能を使って日ごとのコミット数をグラフにしました。

## git log

リポジトリを用意します。

今回はVue.jsのリポジトリを題材として使わせていただきました。

```bash
$ git clone https://github.com/vuejs/vue.git
```

`cd`コマンドでリポジトリの中に入ります。

```bash
$ cd vue
```

まず見出し行を用意したいと思います。

書式としてはこんな感じです。

```bash
$ echo '"見出し1","見出し2"' > "ファイル名.csv"
```

今回は日付、メッセージ、コミットした人、ハッシュを出力する予定なので、

```bash
$ echo '"date","massage","committer","hash"' > "gitlog.csv"
```

と打ちます。

続いてメインディッシュの`git log`です。

以下のような感じに命令します。

```bash
$ git log --pretty=format:'"%cd","%s","%cn","%H"' --date=format:'%Y/%m/%d %H:%M:%S' --branches  --remotes >> "gitlog.csv"
```

`--pretty=format:`でフォーマットを指定します。

フォーマットについては[Git - コミット履歴の閲覧](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E3%81%AE%E9%96%B2%E8%A6%A7)を参照ください。

`--date=format:`では日付のフォーマットを指定します。

こちらはなんとなく分かると思います（なげやり）。

`--branches`と`--remotes`はおまけで、ブランチに関わらず、リモートリポジトリを含めて出力するようになっているはずです。

それらを`>> "gitlog.csv"`の部分でさきほどの見出しだけのファイルに追記しています。

出力されたものが以下。

<img width="1425" alt="gitlog_screen.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/b32e1196-78cf-11e3-3678-2f2eeb440be5.png">

それらしく出ていると思います。

ちなみに5882行ありました（2019/10/30現在）。すごい…！

## Spreadsheetにインポート

`sheet.new`にアクセスして新しいスプレッドシートを作ります。

`ファイル -> インポート`から`gitlog.csv`をアップロードできます。

オプションとかは初期設定でいいはずです。

するとこんな感じになります。

<img width="929" alt="gitlog_spread.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/a03edf7d-a7ff-5f7a-fd3c-afdf4cb52a65.png">

これをグラフにしたいのですが、その際にDateにTimeが含まれているので（Datetimeやないかい）、

Timeまで見ると細かすぎるので、

そこをなんとかしようと思います。

言い訳するとログ自体はできる限り細かく取って、あとでデータを加工したほうがいいと思ったのですよ。

で、`1E`のところに`datetext`という見出しを入力します。

次に、`2E`のところに

```spreadsheet
=text(A2,"YYYY-mm-dd")
```

こんな感じの式を入れます。

そしてエイヤッとダブルクリックすると…

<img width="725" alt="gitlog_spread_text.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/0939c45c-b442-6e97-8da6-949337981806.png">

こんな感じでうまいこと年月日部分を取り出せました。

そしてE列を選択し、`挿入 -> グラフ`を命令すると、

<img width="978" alt="gitlog_graph.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/eef0e6b2-069f-7056-6a76-a2bb750374a2.png">

グラフができました！　Dateの進む方向が右へ行くにつれて昔になっています。

まず行１を固定（`表示 -> 固定`から）したあと、`データ -> 列Eを基準にA-Zでシートを並べ替え`をしてみます。

<img width="925" alt="gitlog_graph_az.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/a674b6ec-ef52-c4cc-59b7-982872eba3c3.png">

うまく取れてない行（たぶんカンマとかが入っちゃったのかと）があったので削除しちゃいます。

ちなみに先頭だけではなく、中間のほうにも２件ありました。

そして一日だけ妙にコミット数の多い日があったので、グラフの設定のほうから５０でリミットをかけます。

<img width="284" alt="gitlog_graph_minmax.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/c5a65cca-c59a-8a8b-8a7c-a5e372282f6e.png">

これにて完成！

<img width="953" alt="gitlog_graph_final.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92027/ac0bcdf4-6b97-ba46-7500-7d5186e4e1bc.png">

こうしてみると突出していた２０1５年の9月に加え、16,17,18年にも１回ずつぐらいピークの日があったようです。

しかし１０コミットに達する日が割とあるのは尊敬します。

## まとめ

git logのフォーマット機能を使ってCSVを出力してみました。

うまくすればCircleCIなどで自動化もできそうな感じがしないでもないですね。

じき試したい…。