Pull request でごはんにカレーをかける

僕が働いている 会社 では、今期の目標や実績などの評価資料を Markdown で書いて、GitHub Enterprise の規定のリポジトリに pull request を送ることで管理しています(エンジニアだけでなく、デザイナーや、一部の部署ではマネージャーやディレクターも pull request で提出している一風変わった会社です)。どうしてこんなことをしているのかは CTO の記事 を参照いただければと思いますが、僕はデザイナーだし pull request も自己アピールの場だなと思って、コミットメッセージで絵を描くことにしました。

FIGlet は文字をアスキーアートへ変換するツールです。コマンドラインで実行できるので、開発環境ごとに ssh ログインしたときに違うアスキーアートを表示させるようにしておくと、ログインしたサーバーを区別できて便利ですね。

$ brew install figlet
$ figlet shikakun
     _     _ _         _
 ___| |__ (_) | ____ _| | ___   _ _ __
/ __| '_ \| | |/ / _` | |/ / | | | '_ \
\__ \ | | | |   < (_| |   <| |_| | | | |
|___/_| |_|_|_|\_\__,_|_|\_\\__,_|_| |_|

さっそく僕のインターネットでの通り名の「shikakun」をアスキーアート化して、上から1行ずつ空コミットしてみました。

$ git commit --allow-empty -m '     _     _ _         _'
$ git commit --allow-empty -m ' ___| |__ (_) | ____ _| | ___   _ _ __'
$ git commit --allow-empty -m '/ __| '_ \| | |/ / _` | |/ / | | | '_ \'
$ git commit --allow-empty -m '\__ \ | | | |   < (_| |   <| |_| | | | |'
$ git commit --allow-empty -m '|___/_| |_|_|_|\_\__,_|_|\_\\__,_|_| |_|'

おもむろに push すると!

capture_commit_a.png

あれ…

残念なことに、GitHub の仕様上、コミットメッセージに半角スペースが連続すると省略されてしまうようです。これでは思うような表現ができません。

capture_commit_b.png

全角スペースも試してみましたが、環境や書体によっては意図した表示にならないことがわかりました。しかし、ここでひらめきました。スペースがダメなら、空白を意味する文字を挿入すればいいじゃないか。また、思い通りの書体で表示されないなら、どの環境でも同じ見た目の絵文字で表示すればいいじゃないか!幸い GitHub はコミットメッセージに :emoji: と書くと絵文字へ置換してくれる機能があります。

capture_commit_c.png

できた!

FIGlet では文字2種類を指定してアスキーアートを描く機能はないので、Photoshop で 28px × 28px(GitHub の pull request の画面でコミットメッセージの幅が最大 28 絵文字ぶんのため)のカンバスを用意してドット絵を用意しました。

capture_photoshop.png

完成したドット絵を見ながら、上から 1px ごとに塗られているかどうかで 0 と 1 を入力していきます…。このあたりを自動化する便利なツールないかなぁ。

0000000000000111000000000000
0000000000000111000000000000
0001111111111111111111111110
0001111111111111111111111110
0001100000110000011000000000
0001100000110000011000000000
0001100000110000011000000000
0001111111111111111111111100
0001111111111111111111111100
0001100000110000011000001100
0001100000110000011000001100
0001100000110000011000001100
0001100000110000011000001100
0001111111111111111111111100
0001111111111111111111111100
0001100000000000000000000000
0001100011000000011000000000
0001100011000000011000001100
0001000011111110011001111110
0011000011111110011111111100
0011000011000000011111000000
0011000011000000011000000000
0011000011000000011000000010
0111000011001110011000000011
0110111111111110011000000011
1110011111111110011111111110
0010011110000000001111111110

アスキーアートができたら、1行ずつ絵文字に置換してコミットしていくのはめんどうなので、以下のような Rakefile を書きました。

require 'rake'

@messages = [
'0000000000000111000000000000',
'0000000000000111000000000000',
'0001111111111111111111111110',
'0001111111111111111111111110',
'0001100000110000011000000000',
'0001100000110000011000000000',
'0001100000110000011000000000',
'0001111111111111111111111100',
'0001111111111111111111111100',
'0001100000110000011000001100',
'0001100000110000011000001100',
'0001100000110000011000001100',
'0001100000110000011000001100',
'0001111111111111111111111100',
'0001111111111111111111111100',
'0001100000000000000000000000',
'0001100011000000011000000000',
'0001100011000000011000001100',
'0001000011111110011001111110',
'0011000011111110011111111100',
'0011000011000000011111000000',
'0011000011000000011000000000',
'0011000011000000011000000010',
'0111000011001110011000000011',
'0110111111111110011000000011',
'1110011111111110011111111110',
'0010011110000000001111111110'
]
@emoji_zero = ':rice:'
@emoji_one = ':curry:'

task :commit do
@messages.each do |message|
message.gsub!(/0/, @emoji_zero)
message.gsub!(/1/, @emoji_one)
`git commit --allow-empty -m #{message}`
end
puts 'commit complete successfully!'
end

task :default => :commit

好きな絵文字に置換できるので、0 と 1 をごはんにカレーがかかってるかどうかで表現することにしました。

0:rice:
1:curry:

実行すると!

capture_commit_d.png

やった〜。

もちろん業務時間中にはこんなことやってませんが、こんな評価資料を提出しても「インターネットが好きで好きでたまらないという気持ちが溢れでています。」とコメントしてもらえて、楽しい会社だなぁと思いました。