GitHubで使われている実用英語コメント集

  • 2291
    いいね
  • 4
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事はリクルートライフスタイル Advent Calendar 2015 - Qiita の17日目です。

こんにちは。現在、ホットペッパーグルメのエンジニアをやっている敷地です。

gitで英語のコミットメッセージどう書けばいいの?

と思ったことはありませんか?
英語で書きたいなーって思っても、いざ書くとなると躊躇しますよね。
ネイティブはどう書いてるのでしょうか。
そこで、github上で実際に使われているコメントを解析し、
よく使われている例をまとめてみました。

解析したデータ

github上で1万スター以上を獲得している169リポジトリのコミットメッセージを対象としました。
bootstrap、jquery、react、d3、docker、node、tensorflowなどの有名なプロジェクトばかりなので、良いコメントが期待できます。

解析するコミットメッセージは、全部で134万8703行にもなりました。
世界中の一流エンジニアたちは、どんなコメントを書いているのでしょうか。

頻出英単語TOP100

コミットメッセージ中の頻出英単語順にワードクラウド表示した結果がこちらです。

word_cloud_Verbal.png

動詞と名詞に限定して表示しています。
add、fix、remove、useあたりがよく用いられているみたいですね。

コミットメッセージを書くのに重要なのは動詞です。
動詞を見ていきましょう。

頻出動詞TOP20

順位 英単語 意味 出現回数
1 fix/fixed/fixes 修正する 165084/35773/19813
2 add/added 追加する 141711/35282
3 remove/removed 取り除く 81124/12528
4 use 用いる 75767
5 update/updated 更新する 57004/11761
6 support サポートする 43808
7 merge マージする 34762
8 make 作成する 31425
9 move 移動させる 22208
10 don't しない 21431
11 check チェックする 16882
12 change 変更する 14594
13 allow 許す 14352
14 cleanup/clean 一掃する 12217/8405
15 set セットする 13132
16 convert 変換する 11633
17 rename リネームする 10703
18 do する 10028
19 revert リバートする 9268
20 avoid 避ける 8822

シンプルな単語が多いようです。
modifyが入っていないのは意外でした。20位以降は、improveや、handle、replaceなどの動詞が続きます。

しかし、動詞が分かっただけでは、英語でコメント書けませんよね。
これらの動詞とセットでよく用いられる単語を分析してみます。

頻出動詞とセットでよく用いられている単語とコメント集

頻出動詞とセットで用いられた単語、それぞれTOP10を解析し、
その中から、有用な組み合わせと実際のコメントを列挙していきます。

1位.fix

単語のセット 代表例 意味 実際のコメント
fix,in Fix A in B Bの箇所のAを修正 Fix typo in docs
fix,for Fix for A Aに対する修正 fix for #4183
fix,to Fix A to B BへのAを修正 Fix link to the spec
fix,of Fix A of B BのAを修正 fix location of favicon

fixは、いろいろな前置詞と用いられています。
fixだけではないのですが、forの後には、issueのIDなどがよく用いられています。

2位.add

単語のセット 代表例 意味 実際のコメント
add,to Add A to B BにAを追加 add .js to import
add,for Add A for B B用にAを追加 Add test for bug #3116

addは、toがよく用いられています。

3位.remove

単語のセット 代表例 意味 実際のコメント
remove,from Remove A from B BからAを除去 Remove Debug from tests
remove,in Remove A in B Bの箇所のAを除去 Remove duplication in render function
remove,unused Remove unused A 不必要なAを除去 Remove unused code

unusedはremoveに限らず使えそうです。

4位.use

単語のセット 代表例 意味  実際のコメント
use,to to use A Aを用いるために Change syntax to use dots
use,of Use A instead of B Bの代わりにAを用いる Use ++ instead of += 1
use,in Use A in B Bの箇所のAを用いる Use stub in testing.
use,for Use A for B BのためにAを用いる use Ruby for mocking
use,remove Remove use of B Bを用いるのを除去 Remove use of deprecated method

useは、不定詞として用いられていていました。
また、名詞としても用いられていますね。instead ofは、useに限らず使えそうです。

5位.update

単語のセット 代表例 意味  実際のコメント
update,to Update to A
Update A to B
Aにアップデート
AをBにアップデート
Update to Unicode 6.3.0
Update Modernizr to v1.6
update,for Update A for B Bに対してAをアップデート update History.md for #1563

6位.support

単語のセット 代表例 意味  実際のコメント
support,add Add A support
Add support for A
Aサポートを追加
Aに対するサポートを追加
Add Travis CI Support
Add support for callbacks

supportは、名詞的にも使われていることが多いようです。

8位.make

単語のセット 代表例 意味  実際のコメント
make,of Make use of A Aを使用する make use of Ember.isNone explicit in Ember.isEmpty
make,it Make it A
Make it Aの比較級
Aにする
よりAにする
(Aには、possible,simple,easy,clearなど)
Make it possible to have IDs per request
Make it easy to check platform requirements in a command
Make it easier to debug the release script
make,sure Make sure to A
Make sure (that) A
必ずAするようにする Make sure to reset default_url_options
Make sure all packages rebuild.

make単体では、Make A Bといった、AをBにするという形式がよく用いられますが、
他の単語との組み合わせで見てみると、Make it possible,Make it easierなどの使い方がされています。

9位.move

単語のセット 代表例 意味  実際のコメント
move,from Move A from B BからAを移動させる Move fix_fname from buffer.c
move,to Move A to B AをBに移動させる Move strings to strings.js
move,in Move A in B B内のAを移動させる Move quotes in nav-main.html

10位.don't

単語のセット 代表例 意味  実際のコメント
don't,use Don't use A Aを用いない Don't use "assert_not_nil"

don'tは、様々な動詞と用いられますが、useが多く用いれていました。

11位.check

単語のセット 代表例 意味  実際のコメント
check,for Check for A Aに対するチェック Check for weak dependency correctly.
check,in Check A in B B内のAをチェック check ID in os-release instead
chcek,fix Fix A check Aチェックを修正 Fix html extension check
check,add Add A check Aチェックを追加 Add null check
remove,check Remove A check Aチェックを除去 remove useless nil check

checkは、結構名詞的な使われ方もしていて、if文の修正によく使われているようです。

12位.change

単語のセット 代表例 意味  実際のコメント
change,to Change A to B
Change to B
AをBに変更
Bに変更
Change copyright to 2013
change to lazy Unmount
change,for Chage A for B Bに対してAを変更 Change API for sending handles
change,in Change A in B B中のAを変更 change rm usage in docs

13位.allow

単語のセット 代表例 意味  実際のコメント
allow,to Allow A to B AがBするのを許す Allow the user to drag faster

15位.set

単語のセット 代表例 意味  実際のコメント
set,to Set A to B AをBにセット Set default kernel to Gaussian.
set,for Set A for B Bに対してAをセット Set release date for 0.10.1

16位.convert

単語のセット 代表例 意味  実際のコメント
convert,to Convert A to B
Convert to B
AをBに変換
Bに変換
convert time to string
convert to boolean

17位.rename

単語のセット 代表例 意味  実際のコメント
rename,to Rename A to B AをBにリネーム Rename hero.html to jumbotron.html

20位.avoid

単語のセット 代表例 意味  実際のコメント
avoid,to Avoid A to B
to avoid A
BするためにAを避ける
Aを避けるために
avoid method call to compact
Remove methods to avoid warnings.

動詞単体では, Avoid Aや、Avoid ~ingでよく用いられています。

18位のdoは、主にdo notで用いられていたため省略しています。
7位のmerge、13位のcleanup、19位のrevertはセットでよく使われている単語はあまり出てきませんでした。

解析方法

データの収集

github上のリポジトリから、一括でコミットメッセージを取得するのには以下のプログラムを参考にしました。
参考URL
https://github.com/minamijoyo/commit-crawler

github APIのアクセストークンを登録するだけで、一括でコミットメッセージを取得することができます。

解析と可視化

英語のコミットメッセージなので、日本語とは違いスペースで区切るだけで簡単に単語ごとに分解できます。
分解した単語の出現頻度をカウントするプログラムをpythonで書きました。
ただ単純に頻度の多い単語を分析していっても、aやtheなどの意味のない単語が多いので、ある程度絞る必要があります。自然言語処理のライブラリであるnltkを用いて、品詞の分析をし、名詞と動詞の抽出しました。抽出した結果のワードクラウド表示は、以下の参考URLで簡単にできました。

参考URL
英語前処理サーベイ
nltkとpytagcloudで英語のワードクラウド

感想

github上のコメントは解析してみると、シンプルな単語が用いられており、
小難しい単語はあまり見受けられません。
中学校で習う単語と文法ばかりですし、書くときは考えすぎずに書いてよさそうです。
ちなみに、「Yes」や、「Oops」だけのコメントもあったりします。笑

分析に関して

Merge BranchやMerge pull requestなどのgithubが自動で生成するようなコメントは除いています。しかし、リポジトリごとに特有のコミットメッセージが存在
また、useや、supportなどは名詞としても用いられるため、動詞の用法としての順位は変わってくる可能性が大いにあります。
今回は行いませんでしたが、形容詞や副詞に関して分析するのも面白そうです。
ということで、番外編に結果を載せたいと思います。

(番外編1)頻出形容詞TOP20

順位 英単語 意味 実際のコメント
1 new 新しい New URL.
2 unused 使用されていない Remove unused $$
3 static 静的な Build static executable.
4 empty 空の Add empty line
5 old 古い Fix old links
6 small 小さな Small typo
7 initial 最初の Initial commit
8 local ローカルの Updates local dev guide
9 wrong 間違った Fix wrong id
10 common 共通の Optimize the most common resolver case.
11 other 他の Change other example fields
12 dead 死んだ Remove dead link
13 rid (get rid ofで)
取り除く
get rid of EmptyComponent
14 possible 可能性のある possible regression fix
15 unneeded 不必要な Remove unneeded @
16 same 同じ Use same colors for disabled buttons
17 global グローバルの Fix global leaks
18 invalid 不正な Fix invalid timer test
19 specific 特定の Remove linux specific calls
20 extra 余分な Remove extra whitespace

簡単な英単語ばかりですね。
ridは、get rid ofでよく使われるようです(形容詞ではないですが)。
また、possibleは 「possible + (何か悪いこと、例えばcrashやmemory leakなど)を修正する」という文脈で使われていました。他にも、if possible (文末に付けて: 可能なら)や、as early as possible(できるだけ早く)、make it possible(可能にする)などで使われていました。

ちなみに、enable,variable,disable,clear,separateも入っていましたが、形容詞以外の使われ方の方が多いようなので除いています。

(番外編2)頻出名詞TOP20

名詞も並べてみます。タイポ多いですね。笑

順位 英単語 意味 出現回数
1 test/tests テスト 30306/20073
2 code コード 25839
3 error エラー 22700
4 function/functions ファンクション 14464/9640
5 driver ドライバー 14386
6 version バージョン 13231
7 typo タイポ 12167
8 docs ドキュメント 11865
9 bug バグ 11518
10 return リターン 11296
11 tag タグ 14352
12 default デフォルト 10556
13 device デバイス 10381
14 handling ハンドリング 10147
15 files ファイル 9195
16 type タイプ 9166
17 auto オート 9268
18 name 名前 8765
19 data データ 8511
20 warning 警告 8448