見出し画像

Github : コミットメッセージにおけるタイトルの「文法」

Githubを使う際、何かと迷ってしまうのがコミットメッセージの形。ある程度スタイルを知っておかないと難しい部分であり、個人的には未だにちゃんとした使い方がわかっていなかった、、もっと早くに気づくべきだったと反省中。

プロの方々はそれぞれの会社や個人で一定のルールを決めているものだと思われ、様々なバリエーションが存在していることは間違いない。今回は、英語で表記する際のある程度基本的な原則について、その構造を中心にざっと調べてみた。

git commit -a -m "Add a new role for netlify-cms git gateway"
git commit -a -m "Add a new role for netlify-cms git gateway"
git commit --amend -m "Update roles for netlify-cms git gateway"

コミットメッセージといえば基本的にはこの様な形になっている。いかにも一定の記法がありそうな文だが、それらを簡潔にまとめたものがこちら。

Rules for a great git commit message style
Separate subject from body with a blank line
Do not end the subject line with a period
Capitalize the subject line and each paragraph
Use the imperative mood in the subject line
Wrap lines at 72 characters
Use the body to explain what and why you have done something. In most cases, you can leave out details about how a change has been made.

https://gist.github.com/robertpainsi/b632364184e70900af4ab688decf6f53より

色々とルールがある模様だが、注目すべきは4つ目「命令法を使うこと」。要するに、英語であれば原形で書けということなのだろう(英語は動詞の命令形と原型の形が同じ)。ただし、その働きが命令を示しているわけではもちろんない。この点については以下で記述する。

次に、こちらのページを見てみる。より具体的な構造が示されており、全段で見たルールのいくつかが適用されている様子がうかがえる。

時制やアスペクトは明示されず、現在時制 (present tense) が無標の形となる。先程見た「命令法」よりもこちらの方がしっくりくる説明だ。これは、コミットメッセージが持つ特性に起因するものだと考えることができるだろう。一つ一つのコミットはまとまった作業内容のサマリーとしての役割を担っており、それぞれが「完了した一つの事態・動作」の総体を表していることが多い。つまり、それらがどのような状態にあるのか、いつ行われたものなのかといった補助的な情報をコミットメッセージの1行目で明示する必要は無いのだ。詳細を含めたい場合は、先程のルール内にあった様に"body"部分を使用することが推奨されている。

また、コミットメッセージはその目的上、誰が見てもすぐに内容を把握できるよう、極限までシンプルかつ分かりやすい形で書かれなければならない。こうした理由から、不要な情報の省略が文法的なルールとして定着しているのだと思われる。

主語が明示されない理由も同様であると言って良いだろう。コミットにはそれを行なったユーザ、プッシュされた時間やブランチ名をはじめとした情報が自動的に含まれ、表示される。つまり、情報機能の観点から見た場合、コミットメッセージにわざわざ主語を含む必要は全くないと言える。また、ここでいう主語は「特定の人間」であるとは限らないため、あくまでそのコミットを追加したユーザー、もしくはアカウントを指すと考えておくのが良いだろう。

動詞は基本的に他動詞であり、「状態」ではなく「行為」を示す。先程も触れた様に、あくまで行なった作業に関するサマリーであるため、「AをBした」という形が基本となっている。また、その属性を表す情報 (Type) については"feat : ..."の様な形で文頭に示すのが一般的であるようだ。

こうした解釈が的を射た物かどうかは分からないが、ひとまず原則を覚えることができたので一安心。このテーマに関するちゃんとした記事及び論文があればぜひ読んでみたいところだ。

この記事が気に入ったらサポートをしてみませんか?