🎄gitmojiでコミットメッセージを彩ろう⛄️

## はじめに
こんにちは、Webエンジニア目指して学習中のさばと申します🐟（X：@saba7678pg）
【[RUNTEQ Advent Calendar 2023 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/runteq)】**13日目**として参加させていただきました。

テーマは「初めて学んだ技術」！

クリスマスだし、ちょっとワクワクするような、コミットが楽しくなる面白機能を紹介してみようと思います。

:::note warn
内容について、引用元を確認したり、手元で動作を確認しながら書かせていただきましたが、
万が一誤りや補足情報等ございましたら、お手数ですがコメント・DM等でお知らせ頂けますと幸いです。
:::

## 今回の記事の対象者
- `git commit`のコメントを適当に書いている人
- コミットメッセージを彩りたい人

## そもそもコミットメッセージ、どのように書いていますか？

本題に入る前に、そもそもコミットメッセージが重要視される理由をおさらいしておきます。

[![Image from Gyazo](https://i.gyazo.com/7d25a4d8171ce4bcf71647ef3c6019d2.png)](https://gyazo.com/7d25a4d8171ce4bcf71647ef3c6019d2)

上記は私が勉強で用いているプライベートリポジトリのコミットメッセージです。
何をしたのか、ザックリ書いてはいますが、
もしこれがチーム開発だったらシバかれているかもしれません。

**👹「なんでアイキャッチ画像の位置変えたの？」
😈「なんで.processed削除したの？」
👹😈「バグが起きてる箇所を探りたいけど、どこでどんな仕様変更してるのか見にくい！」**

こんな印象を抱かれているかもしれません…🎣

### コミットメッセージを丁寧に書くべき理由

- レビューしてもらう人にコミット・修正の意図を端的に分かりやすく伝える
- 適切なコミットメッセージを残すことで、後のメンテナンスや過去のコードの再確認時の効率が上がる（開発の効率化に寄与）

できるだけレビューしてもらう人や後からコードを振り返る人が、意図や目的を汲み取りやすい記載にしましょう。
個人開発だとしても、今の自分が未来の自分に送るメッセージだと考えて、丁寧にコミットメッセージを書く癖をつけるとよいかもしれません。

## どのように書けば良いのか

とはいってもどう書けば良いのか、正解が分からない！
そもそも書き方はプロジェクト次第だし…

そこで、まずはよく見かける記法・略語を真似てみるのをオススメします。

[Semantic Commit Messages](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716)

上記はコミュニティ主導で開発された慣習の1つで、
コミットメッセージを意味のあるものにし、変更履歴を読みやすいように、と提案されたものです。

### フォーマット：`<type(prefix)>: <subject>`

上記がコミットメッセージでよく見かける形状です。
`"#38 Fix: 投稿画面でループ処理が起きている不具合を修正"`
のようにコミットメッセージを見たときになぜ修正が行われたか、他の人や未来の自分が見たときにイメージできるような書き方をしてみましょう。

### `type(prefix)`　：どんなコミットなのか分かるように、種別を書く
- `Feat:` 機能やファイルの追加
  `Add:` どちらが主流かは現場次第かもしれませんが、この記載も機能・ファイルの追加としてよく見かけます。
- `Fix:` 修正作業
- `Docs:` ドキュメントの更新

等々…
コミットメッセージのタイトルにこのコミットはどういった種別なのかをざっくり書いておきます。
GitHubで確認した際にバグ修正したファイルを探したい、変更を加えたファイルを探したい、というときに探索しやすくなります。

プロジェクトによって意味合いや使用するPrefixは異なるので、
個人開発の場合はよく見かけるPrefixを何種類か採用して自分のプロジェクト内で統一するとよいのかなと思います。

### `subject`: 変更内容
- なぜそのファイルを変更したのかを記載
- Whyを意識して書くとよいとされています。
（WhereやHowはコード比較をみれば分かるため）
- Issueを紐づける方法を採用しているところもあるようです。

:::note info
- より詳細に書く方法として、改行を行い2行目（もしくは3行目など）に具体的な情報や補足情報を入れる手段もあります。
:::

### コミットメッセージに`issue`を加える。
テンプレートには記載がありませんでしたが、コミットメッセージにissueを加えることもできます。
subjectや２行目以降に詳細を書いても良いかもしれませんが、
issueと紐づけることによってどのタスクに関連した操作なのかが明確になります。

[![Image from Gyazo](https://i.gyazo.com/ac2c8aeaba519f272e9f5085e93b0844.gif)](https://gyazo.com/ac2c8aeaba519f272e9f5085e93b0844)

記載方法はとても簡単、コミットメッセージ内に`#1`のように`#にissue番号`をつけて書くだけです。
`git commit -m '#1 Add: ログイン機能の実装'`
[![Image from Gyazo](https://i.gyazo.com/4a4a4c9b856a3b40bcf9d328d1b3a5bf.png)](https://gyazo.com/4a4a4c9b856a3b40bcf9d328d1b3a5bf)

### コミットメッセージには絵文字も使える

なんとコミットメッセージには絵文字を入れることができます👀
必ずしも必要な要素ではないのですが、
**個人的にあったら楽しい**ので個人開発には導入してみようと思いました。

`:bug:`と入力するとコミット先で`🐛`に変換されたり、
`:memo:`と入力すると`📝`と表示されたり。

いろんな種類のgitmojiがあるので以下のサイトから絵文字と用途の一例を参考にしてみてください。

https://gitmoji.dev/

注意点として、Prefix、issue番号、gitmojiの書く順番によってgitmojiが認識されず、そのまま出力されてしまうことがあります。
（`Add: :memo: 本文`という書き方や`:memo: Add: #1 本文`、`Add: :memo: #1 本文`という書き方はNGでした。）

`:memo: #1 Add: test`や`#1 :memo: Add: test`はいけたので、
Prefix以降にはコミットメッセージ本文のみを記載するのがよさそうです。（先にgitmojiとissueを書いてからPrefixを書く）
[![Image from Gyazo](https://i.gyazo.com/83105f18eed5f792959d7f236d546655.png)](https://gyazo.com/83105f18eed5f792959d7f236d546655)

## gitmoji覚えるのが大変！

ここまででコミットメッセージの書き方を確認してきましたが、
Prefixを覚えたりgitmojiを覚えたり少し面倒だな、という方に`gitmogi-cli`を紹介します。

こちらは`git commit -m '~~~'`を`gitmoji-c`に置き換えて対話式で絵文字、title、message（2,3行目に該当）を入力できるようになるCLIツールてす。

[![Image from Gyazo](https://i.gyazo.com/226f1f67b7454f6fc066f8b0a4923b5c.gif)](https://gyazo.com/226f1f67b7454f6fc066f8b0a4923b5c)

この入力の後にいつも通り`git push`を行うと、

[![Image from Gyazo](https://i.gyazo.com/1dd72178178feb8aadb658a256b02dca.png)](https://gyazo.com/1dd72178178feb8aadb658a256b02dca)

このようにコミットメッセージが反映されます！
慣れたら普通に`git commit`した方が早い気もしますが、こういったツールを使うのも楽しいかもしれません。

### 導入方法
### gitmoji-cliをインストールする

gitmoji-cliはnpmパッケージとして配布されています。

[gitmoji](https://github.com/carloscuesta/gitmoji)
[gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli)

``` zsh
# ターミナルでnpmパッケージをインストール
npm i -g gitmoji-cli

# アンインストールしたい場合
npm uninstall -g gitmoji-cli
```
[![Image from Gyazo](https://i.gyazo.com/6f4904ee8c1cf0326c3ae6a6191b7a4b.gif)](https://gyazo.com/6f4904ee8c1cf0326c3ae6a6191b7a4b)
[![Image from Gyazo](https://i.gyazo.com/d7c552b8642ae5f1613c40567a32aff3.png)](https://gyazo.com/d7c552b8642ae5f1613c40567a32aff3)

その後、いつもの手順通りファイルの編集後に`git add`を行い、
`git commit`を以下に置き換えて実行します。

``` zsh
gitmoji -cli 

もしくは

gitmoji -c
```

[![Image from Gyazo](https://i.gyazo.com/ac2602bd1da1ed46084d06a5d1246574.png)](https://gyazo.com/ac2602bd1da1ed46084d06a5d1246574)

すると上記のようにgitmojiを選ぶように指示されます。
キーワードで探すこともできますし、上下で選択スクロールすることもできます。

後はtitleにIssue→Prefix→subjectの順番で記載、
messageは必要に応じて使ってください。（messageは空欄でもOKです。）

最後に`git push`を行うと

[![Image from Gyazo](https://i.gyazo.com/941782e764196313585dc4e8318e5417.png)](https://gyazo.com/941782e764196313585dc4e8318e5417)
[![Image from Gyazo](https://i.gyazo.com/420f467a71a07f95475e389e653ef30f.png)](https://gyazo.com/420f467a71a07f95475e389e653ef30f)

絵文字のついたコミットメッセージを作成することができました👏

自分もまだまだ模索中ではあるので、このような方法がいいよ、こういうPrefixもあるよなどあればご指摘・ご教授頂けますと幸いです。

ここまで読んでいただきありがとうございました🐟💨

## 引用
https://gitmoji.dev/

[Semantic Commit Messages](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716)

https://zenn.dev/itosho/articles/git-commit-message-2023

https://www.tam-tam.co.jp/tipsnote/program/post16686.html

https://suwaru.tokyo/%E3%80%90%E5%BF%85%E9%A0%88%E3%80%91git%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%83%BB%E4%BD%9C%E6%B3%95%E3%80%90prefix-emoji%E3%80%91/