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

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

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


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