ランサーズ創業時から今まで12年分のコミットをビジュアライズしてみた

## はじめに

[ランサーズ AdventCalendar](https://qiita.com/advent-calendar/2019/lancers) 21日目担当の [@sayanet](https://twitter.com/sayanet) です。

ふだんはtoBの [LancersEnterprise](https://www.lancers.jp/enterprise) プロダクトの開発チームリーダーとして、プロジェクトマネジメントを行っています。最近プロダクトマネジメントもはじめました。

ハイ、さっそく本題にはいります！
私がランサーズに入社したのは2014年4月で、その頃はまだメンバーは50名に満たない規模でした。
今回、上場という節目においてここまでの軌跡をなにかの形で残しておきたいなと思い、主に [Lancers](https://www.lancers.jp) の開発を行っているリポジトリで創業から今までの約12年(2008-2019)にわたるすべてのコミットをビジュアライズしてみました。
今回は公開用として、創業者兄弟である秋好社長&聡さんと著者以外はイニシャルにしています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">主にランサーズ<a href="https://t.co/ROuI6QmWGB">https://t.co/ROuI6QmWGB</a>のプロダクト開発を行っているリポジトリで創業から今まで約12年(2008-2019)にわたるすべてのコミットをビジュアライズしてみました<br><br>創業者兄弟である秋好社長・聡さん以外イニシャルにしていますが過去の膨大なコミットが今に繋がっていることを再認識し感謝🙏 <a href="https://t.co/llnQfUsoNP">pic.twitter.com/llnQfUsoNP</a></p>&mdash; ぶなっしー(おかんエンジニア)🐟 (@sayanet) <a href="https://twitter.com/sayanet/status/1208606855422832641?ref_src=twsrc%5Etfw">December 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## つくりかた

### 1. コミットログの取得
`git shortlog`を利用してユーザーごとのコミット数を取得します。

例えば今月のコミットをユーザーごとにリストアップしたい場合はこんなかんじです。

```
git shortlog -sn --no-merges --since='date +%Y/%m/01' --until='date +%Y/%m/%d'
```
**オプション説明**
`-s`: ユーザー毎にサマライズ
`-n`: コミット数多い順にソート
`--no-merges`: マージコミットは除外
`--since`: 対象期間いつから
`--until`: 対象期間いつまで

**出力結果**
コミット数合計とユーザー名が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40767/c78b2256-9f65-508c-c70e-0838fbaaea65.png)

さてさて、今回は年ごとにサマった述べコミット数がほしいので、創業から今年まで年単位でループをまわします。
それぞれの年に過去合計値をセットしたいのでsinceオプションは2008年固定にしておくのがミソ。

```php

for ($year=2008; $year<=2019; $year++) {
    echo $year . "\n";
    $command = sprintf("git shortlog -sn --no-merges --since='2008/01/01' --until='%d/12/31'", $year, $year);
    system($command);
}
```

### 2. データを整形する
1で取得したユーザーごとのコミット数をスプレッドシートに貼り付けて整形。年とユーザー名をマトリクス表で表現していきます。

こちらがベースとなるデータ。年とユーザー名を結合させて下ごしらえ。
※ yosuke->秋好社長、satoshi->聡さん です。他の方はマスキング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40767/a0ff8aa9-1219-1098-808a-36857767489a.png)

年とユーザー名をもとにVLOOKUP使ってマトリクス表のシートにプロット。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40767/c91b5a27-d6d6-6c6f-3f46-92ee4268ec9e.png)
ここで予期せぬ事態。同一人物でもコミット時のユーザー名が異なることが多々あり、名寄せするのが大変でした。仕組み化するならメアドを使って名寄せするとかうまいことやりたい。

さて、ここまでできればデータ整形完了！
このタイミングでユーザー名をイニシャル化にしています。

### 3. ビジュアライズする

ビジュアライズにはFlourishのBar chart raceを使いました。
https://app.flourish.studio/@flourish/bar-chart-race/9

Dataにスプレッドシートの内容をそのまま貼ればOKというお手軽さ。職種で色分けしたかったのでカテゴリー追加しています。

Previewモードで件数や速さなど表示の設定ができます。
動きを確認しながら調整できてトテモ便利 :angel_tone2: 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40767/69b6844b-0d67-248f-0114-ad7ec5f66eaf.png)

デキアガリ＼(^o^)／

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40767/1642a179-6c16-ee83-420d-e56fb7a0b902.png)

APIも公開されていて捗りそうです :bar_chart:
https://app.flourish.studio/@flourish/bar-chart-race/9#api

## まとめ

後半のデザイナーT.Tさんの伸びがすごかったです。コミット数が多い方は総じて仕事のスピードが早いなという印象。ちなみにT.Tさんからは[プログラマーはプログラムを書くな！ 有能なプログラマーはプログラムを書かない](https://s8a.jp/programmers-do-not-write-the-code)リンクをそっと渡されましたがそれもまたひとつの謙虚スタイル。リスペクト。

エンジニア出身の社長が今でもTOP17に残っているのを見て、ほんとうに創業時はめちゃくちゃエンジニアフルコミットだったんだなと思ったり、私が入社した2015年頃にメンバーが一気に増えてベンチャーの勢いを感じたり、最近入社したメンバーがガンガンコミット伸ばしていることに気づけたりとなかなかの感慨深さがありました。

もちろん、コミットの単位は時期や実装者・チームによって異なるし、fix:typoなどもあるため多いからよいとは一概にいえませんが、純粋にこれだけコミットしたのすごいな〜という意味合いで見ています。

ソースコードは日々刷新されますがコミットに込めた気持ちとビジョンが受け継がれて今のランサーズがあるんだなと再認識。日々の積み重ねって偉大ですね。


年末なので、一年の振り返りとして月ごとに出してみても面白そうだし、毎日眺めてがんばったなーとムフフするのも楽しそう。


それではみなさん、良いエンジニアライフを！