はじめに
- 最近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