綺麗にコミットしてますか??

はじめまして!Emojineerのnownabeです。グッドパッチではProttのサーバサイドエンジニアをやっています

本記事ではGitのコミットを綺麗に保つためにProttチームで導入しているEmoji Prefixを紹介します。

Emoji Prefixって何?

Emoji Prefixは「Gitのコミットメッセージの先頭にEmojiをつけよう」という一種のスタイルガイドです。
GitHubなどEmojiに対応しているGitホスティングサービスの利用を前提としています。

Emoji Prefixをつけてコミットすると、例えばGitHubならこのように表示されます。

Emoji Commits

基本はコミットメッセージの先頭にEmojiをつけるだけです。
ただし、EmojiはEmoji Prefixのルールに従って決める必要があります。
コミットの種類によってEmojiが決まる、という制約がEmoji Prefixのルールです。
例えば、バグ修正なら 、速度改善なら のように決められています。
世界標準のルールはないので、プロジェクトや組織毎に異なるEmoji Prefixが定義されています。

Emoji Prefixは

Atomのコントリビュートガイド

がきっかけで盛り上がったようです。
以前からEmojineerの間ではコミットにEmojiを使うことはありましたが、GitHub社製のエディタであるAtomが正式にEmoji Prefixをルール化したことで注目されるようになりました

何が嬉しいの?

Emoji Prefixを使うといろいろ嬉しいことがあります。

コミットが綺麗に

最も期待している効果は、コミットが綺麗になることです。
開発の現場では「インデントの修正と機能の修正を同じコミットにしないでください 」といった悲痛な叫びをよく耳にします。
Emoji Prefixのルールでは「インデントの修正と機能の修正」を同時に表すEmojiが定義されていないので、Emoji Prefixに従ってEmojiをつけるためにはコミットを分ける必要がでてきます。
このように適切に定義されたEmoji Prefixを使うことで、ごった煮コミットが作られにくくなり、ある程度機械的にコミットの粒度を揃えることができます。
コミットが綺麗になればコードレビューの時間を節約できたり、歴史を追いやすくなるのでとても嬉しいことですね

視認性の向上

コミットログの視認性が向上することも嬉しいことのひとつです。
上のスクリーンショットを見ていただければなんとなく感じていただけるのではないかと思いますが、Emoji Prefixをつけることでそのコミットがだいたい何をするかがひと目でわかるようになります 。
Prottチームはグローバルなメンバーが集まっていることもあり、コミットメッセージが日本語でも英語でもEmojiである程度理解できるのでコミュニケーションコストの削減にもつながっています。

コミット力の向上

その他にも、チームメンバーのコミット力向上が期待できます。
コミット力というのは、コミットを適切に分割したり適切なコミットメッセージを書く、つまり良いコミットを作る能力です。

Emoji Prefixによって「どうコミットすればいいのか?」ということを普段から考えざるを得なくなります。
普段からコミットについて考えることでコミット力が鍛えられ、本質的に良いコミットを作れるようになるはずです

ProttチームのEmoji Prefix

いろいろと良いことがあるのでProttチームでも先月からEmoji Prefixを始めました。
Prottチームで定義しているEmoji Prefixは次のようになっています。

  • 🐛 :bug: バグ修正
  • 👍 :+1: 機能改善
  • ✨ :sparkles: 部分的な機能追加(🎉レベルの機能を構成するひとつひとつの部品)
  • 🎉 :tada: 大きな機能追加(機能名がついてデプロイする単位)
  • ♻️ :recycle: リファクタリング
  • 🚿 :shower: 不要な機能・使われなくなった機能の削除
  • 💚 :green_heart: テスト落ちるの修正
  • 👕 :shirt: lintエラーの修正
  • 🚀 :rocket: パフォーマンス改善
  • ➕ :heavy_plus_sign: リソース・ライブラリの追加
  • ➖ :heavy_minus_sign: リソース・ライブラリの削除
  • 🆙 :up: リソース・ライブラリのアップデート
  • 🔒 :lock: 新機能の公開制限
  • 👮 :cop: セキュリティ関連の修正
  • 🎨 :art: スタイリングの修正
  • 📝 :memo: ドキュメント追加
  • ✅ :white_check_mark: テストの追加

先日、弊社フロントエンドエンジニアであるよしこ氏がEmoji Prefixについてツイートしたところ、なんと200以上もリツイートされていました。
Emoji Prefixに対する世論の高まりを感じますね

コミットテンプレート

ここでひとつEmoji Prefixを便利に使うための簡単なTipsを紹介します。

Gitにはコミットメッセージのテンプレートを用意する機能があります。
テンプレート機能を使えばコミット時にEmoji Prefix一覧を表示させることができるので、わざわざEmoji Prefixを覚える必要がなくなります。

テンプレートは2ステップで導入することができます。

まず、Emoji Prefixを書いたテンプレートを用意してください。
ここではリポジトリ内に.commit_templateというファイル名でテンプレートを作成しました。
そして、作成したテンプレートを次のようにgit-config コマンドで登録してください。

Commit Template

これで設定完了です。
うまく設定できていれば、次のようにテンプレートが適用されているはずです。


emojiprefix

こちらのテンプレートをgistに用意しました。ぜひお使いください。
https://gist.github.com/nownabe/85d8595fd142adc426fbfaf2bab015e0

Emoji Prefixをやってよかったこと

ProttチームでEmoji Prefixをはじめてまだ1ヶ月ちょっとですが早速効果を感じています。

まずはじめに、コミットに対する議論が生まれました。
この1ヶ月間、「こういうコミットにはどのEmoji使えばいいの?」という簡単なものから、「こういう場合にはどうコミットを分割するべきなのか?」といったものまで、コミットに関する様々な議論がありました。
チームのコミット力爆上がりの予感がします

そして何より、チームメンバーから「Emoji Prefix楽しい」という意見がでています。
新しいルールに従うことはストレスともなり得ますが、Emojiという楽しげなものをルールに組み込むことでストレスが緩和できているのではないかと思います。
理論だけではなく感情面でもメリットがあるというのは大変素晴らしいですね✨

今後やること

ルールは作って終わりではなく、定着させ、メンテナンスし続ける必要があります。

例えば、Emoji Prefixの定義は継続的に改善していく必要があります。
最初からすべてのコミットを表現できるようなEmoji Prefixルールを作ることは困難です。
そのためProttチームではEmoji Prefixの追加・削除をPull Requestベースで議論できるように、GitHubの社内スタイルガイドリポジトリで管理しています。
チームメンバーが違和感なく、ストレスなく使えるEmoji Prefixに逐次更新できるようにしています

メンバーへのフォローも引き続き必要になります。
新たなメンバーやまだ馴染めていないメンバーもいるので、なぜEmoji Prefixがあるのか、どうすればいいのか、などを説明する必要があります。

将来的にはEmoji Prefixの集計もしたいと考えています。
集計して可視化することで「いっぱいバグ修正をしてくれている人」とか「スピードアップが得意な人」とか「ゴミコードを消しまくってる人」みたいな傾向がわかるので評価やモチベーションにつなげることができるのではないかと考えています。

おわりに

コミットするという行為は、コードを読むチームメンバーのために情報を提供するという側面もあります。
つまりコミットとは「チームメンバーというユーザーに、情報を得るという体験を提供する」行為ともいえます

良いコミットを作ることでチームメンバーへのUXを高めていきましょう!

グッドパッチでは綺麗なコミットが大好きだというEmojineerを募集しています。

応募お待ちしております!
https://www.wantedly.com/projects/54185