how to 上司にほめられるための git ~フックスクリプト編~

どうもこんにちは。エンジニアブログ編集部の久保田です。


もうすっかり寒くなってきましたね。
寒くなると心も体も寂しくなってきてしまいます。

ここ最近の僕は、家に帰っても慰めてくる人はおろか話し相手もおらず、大して面白くないテレビに大爆笑して寂しさを紛らわす毎日です。


もちろんそんなメンタルでは勉強も進みません。
このままではまずいと思い、僕はあることを閃きました。

それは、
 
「git commit のたびに、自分の開発を労ってくれるシステムを作ろう」

 
といういかにもエンジニアらしい画期的なアイディアです。
今回紹介するgitの機能は、「フックスクリプト」というものです。

こちらは、決まった形式でスクリプトを用意しておくと、
gitのあるアクションが行われたときにそのスクリプトが動いてくれる機能です。


フックスクリプトを動かすことのできるアクションはバージョンによっても違ってきますし、
説明してくれている記事もたくさんあるので、詳細は割愛します。
 

では早速実装して行きます。

フックスクリプトは、.git/hooks以下のファイルに手を加えることで動作します。

ファイルの種類はこんな感じです。

 
git_hook


今回は、赤で囲んである、commitした後に労ってほしいので、「post-commit」に処理を書いていきます。
(初期状態では、post-commit.sampleという風になっていますので、動作をさせたい場合は、.sampleを消してください。)


とりあえず、何かしゃべらせましょう。(rubyで書きますが、出力さえできればなんでもよいです。)

#! /home/yuki/.rbenv/shims/ruby
# coding: utf-8

puts 'お疲れさま!'


実行します。


git add hoge.txt
git commit -m 'hoge'


standard



・・・できてしまいました。

何でしょう、何かもっと寂しくなった気がします。。。
何かが足りませんね。。。

「にぎやかさ」かも知れません。
ということでにぎやかにしてみましょう。

僕の環境はcentOSなので、yumfigletを落として以下に書き換えます。
yum -y install figlet

にぎやかさがほしいので、英語でお疲れ様を言ってもらいましょう。
先ほどの4行目を、以下のように書き換えます。

exec('figlet You’ve gotta be tired !!')



figlet



惜しい!まだ少し、何かが足りない!
今度は絵を足してみましょう。

yumで、cowsayを落としてまた4行目を以下のように書き換えます。

system('cowsay -f dragon-and-cow お疲れ!')



cowsay_dragon_and_cow



なんか楽しくなってきましたね!


ただいつも同じでは楽しくないので、いくつかパターンを用意して、ランダムで表示を変えるようにしました。

#! /home/yuki/.rbenv/shims/ruby
# coding: utf-8

arr_praise = ['You’ve gotta be tired.', 'good job !!', 'You work hard today', 'Do your best!' ,'Thanks for your great work.' ]
arr_other = ['Work hard!', 'If today were the last day of my life, would I want to do what I am about to do today?' ]
cowsay_list = (`cowsay -l`).split[4..-1]

case rand(4)
when 0
   system("figlet #{arr_praise.sample}")
when 1
   system("cowsay -f #{cowsay_list.sample} #{arr_praise.sample}")
when 2
   system('cowsay -f vader NO, I AM YOUR FATHER...')
when 3
  case rand(11)
     when 10   
      system("sl")
     else 
      system("figlet #{(arr_praise + arr_other).sample}")
      system("cowsay -f #{cowsay_list.sample}")
     end 
end


case文のオンパレードになってしまいましたが、ランダムでいろいろ出てくるようになりました。こちら、ぜひお試しください。たまにダースベーダーがでます。 さらにもっとたまにSLが走ります。



今回はこうして自分を慰めてみましたが、
ほかにも、たとえば
 
pushしたらAPIでコミュニケーションツールに投稿
特定のブランチに直接マージできないようにする
コミットしたらlog以外にも記録して行く
上司のgitにこっそりしこんでびっくりさせる
同僚の誕生日にサプライズ
 
など、発想しだいで上司にほめられるようなシステムつくりからお遊びまで、いろいろできちゃいますね!


みなさんもぜひやってみてください!


では、よきgitライフを!