✨ 自分流絵文字で綺麗なコミット

今日既にコミットした方、こんにちは。まだコミットしてない方もこんにちは。 R&Dチームの齋藤(@aznhe21)です。

皆さんはどのようにコミットメッセージを書いているでしょうか。 コミットメッセージの書き方には 色々 な 流派 がありますが、今回は最近流行り(?)の絵文字を使った書き方を紹介します。

f:id:optim-tech:20211214170546p:plain

🤔 なぜ絵文字を使うのか

コミットはある程度分類しておき見返しやすくするのが定石です。 こういった書き方のスタイルで有名なものとしては「Add hoge fuga」のように動詞を先頭に書くスタイルや 「feat: hoge fuga」のようにプレフィクスを付けるスタイルがありますが、 どちらも英語を前提にしており、日本語を使うと「feat: メッセージ」のようにどうにもちぐはぐになってしまいます。 これが絵文字なら「✨ メッセージ」と違和感はありません。

また絵文字はそれぞれ全く字形が異なるため、コミット履歴を見る時に内容が分かりやすいです。 実際のコミットログを抜粋します。

  • 🐎 UTF-8のバリデーションを排除
  • 📝 README.mdを更新
  • ✨ setメソッドを追加
  • 🎨 クライアントの処理をService/Handlerとして分離
  • 📝 CHANGELOG.mdを更新
  • 🐛 トレース時のログ内容を修正

あと単純に見た目に楽しいというのもあります。

📕 絵文字辞書で簡単入力

入力メソッド(IME)によっては絵文字を入力出来ないかもしれませんが、 この辞書を登録することでほとんどの絵文字を日本語から変換することが出来るようになります。 例えば✨は「:ほし」で、🐛は「:むし」で変換出来ます。 これにより、コミットメッセージを直感的に入力することが出来るようになるので入れておくと良いでしょう。

📝 コミットを書く時の絵文字

絵文字を使ってコミットメッセージを書く、と言ってもルールがないとどの絵文字を使えばよいのか分かりませんね。 今回はgitmojiAtomのスタイルガイドを参考に、 数が多いので抜粋しつつ、私の感性に合わない部分は勝手に変更して紹介します。 現場ではルールを決めて使ってください。

コミットメッセージを書く時は、原則として「✨ 新機能を追加」のように絵文字と概要の間に半角スペースを入れます。

ここで紹介する絵文字について、「よみ」は絵文字辞書より、「絵文字コード(ショートコード)」はEmojipediaより引用しています。

まとめ兼目次も置いておきます。絵文字クリックで該当項目に飛びます。

絵文字 用法 用例
必須の絵文字
これまでになかった機能や仕組みを新しく追加する時 ✨ 絵文字を入力する機能を追加
🐛 バグの修正時 🐛 間違った絵文字が入力される問題を修正
💥 互換性を破壊するような機能の変更・削除をする時 💥 私用領域の文字を削除
🎨 外部に影響のない変更時 🎨 重複した絵文字の定義を削除
あると嬉しい絵文字
テストコードの追加 ✅ 日本語で絵文字を検索するテストを追加
📝 文書の追加、更新 📝 README.mdを更新
👕 Lintツールなどの警告・エラーの除去 👕 PEP8に準拠
🆙 依存パッケージの更新時 🆙 npm-check-updates -u
🐎 パフォーマンスの改善時 🐎 絵文字の検索速度を向上
🔒 セキュリティに関するコミット 🔒 CVE-20XX-12345に対応
🎉 新しいバージョンをリリースする時 🎉 v1.2.3
💚 CIに関するコミット 💚 テスト対象にDebian bullseyeを追加
人やプロジェクトによっては便利な絵文字
♻️ リファクタリング時 ♻️ 絵文字の定義を別ファイルに分離
🚑 緊急のバグ修正時 🚑 絵文字が表示されない問題を修正
🚧 作業中で動くかどうかも分からないコミット 🚧 補完候補出すやつ
使わない方が良さそうな絵文字
🔥 ファイルやコードを削除する時 🔥 package-lock.jsonを削除
🐳 Docker・コンテナに関するコミット 🐳 ベースイメージをDebian bullseyeに更新
依存性を追加する時 ➕ @types/reactを追加

必須の絵文字 ✨🐛💥🎨

これだけあれば最低限の分類は出来ます。とは言え🎨が大量に登場することになるので実用には難しいかもしれません。

✨ 新機能の追加
:ほし :きらきら :すたー :ぴかぴか
:sparkles:
これまでになかった機能や仕組みを新しく追加する時。 「Add hoge fuga」や「feat: hoge fuga」に相当。
✨ 絵文字を入力する機能を追加
🐛 バグ修正
:むし :いもむし :けむし
:bug:
バグの修正時。 「Fix hoge fuga」や「fix: hoge fuga」に相当。
🐛 間違った絵文字が入力される問題を修正
💥 互換性のない変更
:しょうげき :しょうとつ :どんっ
:collision: :boom:
互換性を破壊するような機能の変更・削除をする時。 「Change hoge fuga」などに相当。
💥 私用領域の文字を削除
🎨 雑多な変更
:え :えのぐぱれっと :ぱれっと :びじゅつかん
:art: :artist_palette:
外部に影響のない変更時。コードの削除やリファクタリング等も含む。 「Remove hoge fuga」や「refactor: hoge fuga」、「chore: hoge fuga」などに相当。
🎨 重複した絵文字の定義を削除

あると嬉しい絵文字 ✅📝👕🆙🐎🔒🎉💚

必須とは言えないものの、これらの絵文字があるとコミットを俯瞰しやすくなります。

✅ テストの追加
:ちぇっく :ちぇっくまーく :きごう :しろぬきのちぇっく
:white_check_mark: :check_mark_button:
テストコードの追加。 「test: hoge fuga」などに相当。
✅ 日本語で絵文字を検索するテストを追加
📝 文書の更新
:めも :えんぴつとめも :かみとえんぴつ :ぶんぐ :ぶんぼうぐ
:memo: :pencil:
文書の追加、更新。 「docs: hoge fuga」などに相当。
📝 README.mdを更新
👕 警告の除去
:しゃつ :てぃーしゃつ :ふく
:shirt: :tshirt: :t_shirt:
Lintツールなどの警告・エラーの除去。 「style: hoge fuga」などに相当。
👕 PEP8に準拠
🆙 依存パッケージの更新
:あっぷ :こうしん :UP :UPまーく
  • 🆙::up: :up_button:
  • ⬆️::arrow_up: :up_arrow:
依存パッケージの更新時。 「Update hoge fuga」などに相当。
🆙 npm-check-updates -u
gitmojiでは⬆️が使われているが、これは(「:うえ :きた」など)に 異体字セレクタ「VS16」がくっついた文字。 そのため絵文字辞書になく、かつ似た文字として🔝(「:うえ :とっぷ」など)もあるため、 gitmojiに従う場合は変換ミスに注意。
🐎 パフォーマンス改善
:うま :けいば :じょうば :どうぶつ
:racehorse: :horse:
パフォーマンスの改善時。 「Improve hoge fuga」や「perf: hoge fuga」に相当。
🐎 絵文字の検索速度を向上
gitmojiでは⚡が使われているが、✨と勘違いしやすかったのでAtomで推奨される🐎を使いたい。
🔒 セキュリティ向上
:かぎ :じょう :せじょう :とじたじょう :ろっく
:lock: :locked:
セキュリティに関するコミット。
🔒 CVE-20XX-12345に対応
🎉 新バージョンのリリース
:くらっかー :ぱーてぃー :ぱーてぃーくらっかー :おいわい
:tada: :party_popper:
新しいバージョンをリリースする時。 「Bump hoge fuga」に相当。
🎉 v1.2.3
gitmojiでは🎉は「Begin a project.」として定義されており、 バージョンアップには🔖(「:しおり :ぶっくまーく」など)を使うことになっている。 個人的にはバージョンアップ時は気分を上げたいので🎉を使いたい。
💚 CI更新
:はーと :みどりのはーと
:green_heart:
CIに関するコミット。 「ci: hoge fuga」に相当。
💚 テスト対象にDebian bullseyeを追加
gitmojiではCIの修正には💚を、CIの追加や更新には👷を使うことになっているが、 👷の変種として👷‍♀や👷‍♂のように性別指定の文字もあり、間違えて入力すると検索出来なくなってしまう。 分ける意味も薄いと思うので💚に統一したい。

人やプロジェクトによっては便利な絵文字 ♻🚑🚧

使わなくても構わないものの、あったら便利な場合があったりなかったり。

♻ リファクタリング
:さいせい :さいりよう :りさいくる :りさいくるまーく
:recycle: :recycling_symbol:
リファクタリング時。 🎨と分ける意味が薄いかもしれない。
♻ 絵文字の定義を別ファイルに分離
gitmojiではに異体字セレクタ「VS16」がくっついた♻️で定義されている (♻と♻️は別の文字)。 ♻(異体字セレクタなし)は文字としては白黒で定義されているが、サービスによっては色付きで表示される。 また、♻️(異体字セレクタあり)が白黒で表示されるか、色付きで表示されるかはフォントによって異なる。 見る場所によって色が変わるのを避けるため🎨に統一しても良いかもしれない。
🚑 緊急のバグ修正
:きゅうきゅうしゃ :のりもの
:ambulance:
緊急のバグ修正時。 🐛や🔒と役割は被るものの、より緊急の対応であることを明示出来る。
🚑 絵文字が表示されない問題を修正
gitmojiでは🚑に異体字セレクタ「VS16」がくっついた🚑️で定義されている (🚑と🚑️は別の文字)。
🚧 WIP
:こうじちゅう :さいん :つうこうどめ
:construction:
作業中で動くかどうかも分からないコミット。 コミットはどうせあとで整理するし、わざわざ絵文字を付けるのも面倒なので「wip」とかで済ませがち。
🚧 補完候補出すやつ

使わない方が良さそうな絵文字 🔥🐳➕

コミットメッセージを考える時に分類で迷って無駄に時間を使ったり、 細かすぎる分類のために却って検索性が下がったりするなどデメリットの目立つ絵文字です。 他にもgitmojiにあってここにない文字は使うことはまず無いでしょう。

🔥 ファイル・コードの削除
:ひ :ふぁいあー :ふぁいやー :ほのお
:fire:
ファイルやコードを削除する時。 ♻️や🎨で十分なのでは。
🔥 package-lock.jsonを削除
🐳 Dockerfile等の更新
:くじら :しおふき :しおふきくじら :どうぶつ
:whale: :spouting_whale:
Docker・コンテナに関するコミット。 これを付け始めると🐧とか🤖とか付け始めて訳が分からなくなりがち (みたいな理由でgitmojiからは削除された)。
🐳 ベースイメージをDebian bullseyeに更新
➕ 依存パッケージの追加
:たす :たしざん :かさん :きごう :ぷらす
:heavy_plus_sign: :plus:
依存性を追加する時。 コミットを分割する意味を考えると使う場面が思い浮かばない。 依存性を削除する時の➖も同様。
➕ @types/reactを追加

🔬 絵文字のショートコードを使うべきか?

この記事は日本人(日本語話者)向けに書いているため直接入力をする前提で書いていますが、 欧米では「:sparkles:」のような絵文字コード(ショートコード)を使うことも多いです。

絵文字を直接入力する方法にはこのようなメリットがあります。

  1. 大抵の環境で絵文字として表示される

    今どきは端末エミュレータも絵文字を表示できるので、少なくとも開発環境で困ることはないでしょう。 逆に、絵文字コードの場合はgit logや一部IDEの履歴表示などではコードがそのまま表示されます。

    絵文字コードを使える環境であっても一部のコードがサポートされていないことがあるため、絵文字コードは環境依存文字(列)と言えます。

  2. 入力しやすい

    我々日本人(日本語話者含む)からすれば入力メソッドから絵文字を入力するのはとても簡単です。 大抵の環境なら「かお」を入力すれば「😃」などの絵文字が候補に出てくるでしょう。 絵文字辞書を使えば、この候補を強化することができます。 エディタだろうが端末エミュレータだろうが、どこでも豊富な入力候補を呼び出せます。

    絵文字コードを使う場合はテンプレートや補助ツールを用意するか、スペルミスが無いよう頑張って覚える必要があります。

  3. 誤爆がない

    絵文字を直接入力する場合は文字そのものが入力されるわけで、他の文字に化けることも、 他の文字を絵文字化することもあり得ません。 しかし絵文字コードでは容易に誤爆しますと言うかこの場合回避方法が無いので絵文字コードはさっさと滅びるべきです。

  4. 72文字制限に引っ掛かりづらくなる

    一般的に、gitのコミットメッセージは72文字以内に収めることが推奨されます。 この制限は自由に書く場合ですら苦労するというのに、 絵文字コードを使うと:white_check_mark:のように18文字(=25%)も専有する場合があって更に苦労することでしょう。

逆に、絵文字を直接入力する方法には以下のようなデメリットもあります。

  1. 他の候補に変換してしまうことがある

    「:けんせつさぎょういん」の変換では👷に変換できますが、加えて性別マークの付く👷‍♀👷‍♂にも変換できてしまいます。 一般的にはこれらの文字は検索では一致しないため、変換ミスに注意しなければなりません。 とは言え、出来るだけ混同しにくい文字を使うようにすることで対策できるでしょう。

  2. 絵文字を直接入力出来ない環境がある

    入力メソッドで絵文字を変換出来なかったり、あるいは入力メソッドのない環境もあったりします。 前者なら絵文字辞書を入れれば良いですし、 後者であっても補助ツールを使うなり専用の入力方法(WindowsならWin+;など)を使うなりで回避できるでしょう。

個人の好みの範疇なので、皆さんが好きな方を使ってください。

🏁 さいごに

絵文字を使ったコミットメッセージを書くことでレポジトリの履歴を見返しやすくなり、 かつコミットが楽しくなること請け合いです。 皆さんも是非絵文字を使ってコミットしてみてください。

オプティムでは楽しげなエンジニアを募集しています。

📄 謝辞・ライセンス表記