俺俺git hooks (pre-push)

# はじめに
* 最近git-hooks(pre-push)を育てていて自分なりに試行錯誤し、まぁこれぐらいで一度使い続けてみようか思ったので残す
* pre-push以外も色々と試したが、自分的にはgithubにpushするタイミング(1日に数回程度)がちょうど良いと思ったのでpre-pushのみ

# 環境
* Mac OS X El Capitan
* git version 1.8.4
* 本流のブランチを masterとする

# pre-push
pushする前に自分のPCで稼働するスクリプト
## 設定した処理
### 1:masterブランチへpushする際はy/nの対話式で動く
* 仕事ではmasterブランチへのpushは禁止なんですが、個人的なレポジトリにはmasterにpushする機会が多いということで(y/n)を入力して実行するようにした

```
➜  git-tools git:(master) git push origin master
Are you ok to pushing master branch? [y/n] y
pushing master....
```

### 2:新規ブランチを作ってpushした時に心機一転スタートする気持ちにさせる
* 新規ブランチを切る時はだいたい新規のPRも立ててスタートする時です（だいたいね）。
* 毎日味気ないのでスタートなので、よしやるぞという気持ちになるように工夫してみたが、まぁしょうもいないです
* どうでも良いアスキーアートをランダムで出力してみた。

```
➜  test git:(test_branch) git push origin test_branch
 _________________________________________
< Grow the Well Pull Request(this branch) >
 -----------------------------------------
   \         ,        ,
    \       /(        )`
     \      \ \___   / |
            /- _  `-/  '
           (/\/ \ \   /\
           / /   | `    \
           O O   ) /    |
           `-^--'`<     '
          (_.)  _  )   /
           `.___/`    /
             `-----' /
<----.     __ / __   \
<----|====O)))==) \) /====
<----'    `--' `.__,' \
             |        |
              \       /
        ______( (_  / \______
      ,'  ,-----'   |        \
      `--{__________)        \/
Counting objects: 5, done.
Writing objects: 100% (3/3), 263 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
```

### 3:ブランチを育てるcommitを繰り返しpushする際に意識を上げるメッセージの表示と最適なレビューアーを表示する
* 新規ブランチ（新規PR）を立てたらmergeしてもらうまで育てる必要があります
* issueにもよるが、長いこと育てる必要がある場合もあり、心が折れそうになったりする。。。
* そこで意識高い系のメッセージとねぎらいのメッセージを表示
* 変更ファイルからgit blameで関係しているauthorをカウントして最適なレビューアーを表示します

```
➜  makuake git:(feature/590_aws_sqs) git push origin feature/590_aws_sqs
  .oooooo.                              .o8         o8o            .o8       .o.
 d8P'  `Y8b                            "888         `"'           "888       888
888            .ooooo.   .ooooo.   .oooo888        oooo  .ooooo.   888oooo.  888
888           d88' `88b d88' `88b d88' `888        `888 d88' `88b  d88' `88b Y8P
888     ooooo 888   888 888   888 888   888         888 888   888  888   888 `8'
`88.    .88'  888   888 888   888 888   888         888 888   888  888   888 .o.
 `Y8bood8P'   `Y8bod8P' `Y8bod8P' `Y8bod88P"        888 `Y8bod8P'  `Y8bod8P' Y8P
                                                    888
                                                .o. 88P
                                                `Y888P
======================================= One Essay =======================================
API設計の黄金律 "http://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/API%E8%A8%AD%E8%A8%88%E3%81%AE%E9%BB%84%E9%87%91%E5%BE%8B"
======================================= recommend reviewer ==============================
author:AAA...1937pt author:BBB...842pt author:CCC...682pt author:DDD...417pt author:EEE...271pt author:FFF...65pt
=========================================================================================
```
* one essayは[https://www.oreilly.co.jp/books/9784873114798/] から達人プログラマーたちのお言葉をランダムに表示して、言葉の解説のリンクを表示
  * item2の新しいやつ（多分Build2.1.4）を使うと[command]を押しながらクリックするとそのままブラウザで立ち上がるよ 
* recommend reviewerはAAAという人が1937ptで一番最適なレビューアーという意味。その次は842ptでBBBさんが最適なレビューアー


公開してるのでリンクを貼っておく
https://github.com/nakamura-tsuyoshi/git-tools


# おまけ
* `/usr/local/share/git-core/templates/hooks`に下記のファイルを置いておくと、次回以降gitプロジェクトを新規作成した際(git cloneした時も)に自動で設定される（macの場合）
  * pre-push(permissonを755へ)
  * cowsay.rb
  * essay.rb
  * reviewer.rb

# まとめ・雑感
* まぁそんなに大した話ではないですね。
* 日々行うコーディングのレベルを意識によって少しでも上げられれば良いなと
* 最適なレビューアーの算出は、削除された変更は考慮されないのでイマイチかなぁと感じてきた
  * こっちのがいいかも。　https://github.com/facebook/mention-bot