プログラムのネーミングに迷ったら GitHub でコード検索すると参考になる説

# TL;DR

- プログラムのネーミングで迷ったら GitHub でキーワードを検索して、ヒットした件数が参考になるのでは？
- 複数キーワードを検索して結果の一覧を表示する CLI 作りました
  - https://github.com/kyoshidajp/ghkw

# ネーミング迷いますよね？

みなさん、コードを書いていて変数やメソッド名のネーミングって迷いますね。

こんな時に自分たちはチームを横断して「こういう名前考えたんだけど、これってどうかな？」という確認を Slack 上で行っています。先日、この Slack チャンネルを見ていて考えました。

「**GitHub で検索すれば世の中のコードでどのぐらい使われているかざっくり分かるので参考になるのでは？**説」

**GitHub で検索できる**という条件付きではありますが、コードの規模からするとある程度期待できそうです。

# GitHub で検索

例えば「**除外条件**」を表す変数名として `exclude_condition` と `exclusion_condition` を比較します。

まず、おもむろに
https://github.com/
を開き、検索ボックスにキーワードを入力します。

![search_keyword.png](https://qiita-image-store.s3.amazonaws.com/0/36122/9da69b68-9437-d13e-cfaf-0920e9683c1c.png)

出てきた検索結果はこちらの**274**件。

![search_keyword2.png](https://qiita-image-store.s3.amazonaws.com/0/36122/7c524c98-bdf5-9c21-84db-649d8ee2cb3f.png)

対して `exclusion_condition` は**66**件という事で、`exclude_condition` に軍配が上がる結果となりました。

![github_search.png](https://qiita-image-store.s3.amazonaws.com/0/36122/4b30f087-dda6-b24e-bad6-94cdb0f48737.png)

このぐらいの差であれば意見の分かれるところかもしれません。

また、「**GitHub 全体ではなく、実装先のリポジトリでどれぐらい使われているか知りたい！**」という場合はそのリポジトリのページに移動して検索。

![search_keyword3.png](https://qiita-image-store.s3.amazonaws.com/0/36122/982d9312-b30f-022e-b351-98515b36cf16.png)

もしくは検索キーワードに `repo:リポジトリ名` を追加します。

![search_keyword4.png](https://qiita-image-store.s3.amazonaws.com/0/36122/e3e4635e-ec1e-80ba-e470-dd3eb3e21ba3.png)

前提として、チームやプロダクトによって、こういう概念を表すにはコレ！という命名をすでにしていば混乱しないためにそちらを優先する方がよいと思います。

新たな名前を取り入れる場合には「GitHub でこのぐらいヒットした」というのは一つの指標になるのではないでしょうか。

# ブラウザでアクセスが面倒

ブラウザから複数キーワードを検索するのに、別タブを開いたり、結果一覧を確認するのが面倒なので CLI を作りました。

 - [kyoshidajp/ghkw: Search how many keywords in GitHub Code tool](https://github.com/kyoshidajp/ghkw)

次のように実行します。

```
$ ghkw exclusion_condition exclude_condition excluded_condition
| RANK |       KEYWORD       | TOTAL |
|------|---------------------|-------|
|    1 | exclude_condition   |   272 |
|    2 | exclusion_condition |    64 |
|    3 | excluded_condition  |     2 |
```

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">GitHub に samurai という名前が付くリポジトリ、900個もあるのね。non-japanese people は samurai 好き過ぎるな。</p>&mdash; コーテルイーナーホー (@mattn_jp) <a href="https://twitter.com/mattn_jp/status/956375284080504839?ref_src=twsrc%5Etfw">2018年1月25日</a></blockquote>

なるほど。

```
% ghkw ninja samurai bushi sensei senpai kohai
| RANK | KEYWORD |   TOTAL   |
|------|---------|-----------|
|    1 | ninja   | 3,374,938 |
|    2 | samurai |   730,748 |
|    3 | sensei  |   213,917 |
|    4 | senpai  |    26,786 |
|    5 | bushi   |    25,493 |
|    6 | kohai   |     2,195 |
```

結果は Markdown 形式なので、`pbcopy` 経由でエディタ等に貼り付ける事が出来ます。

ちなみにインストールは homebrew ユーザだと次の2ステップでOK。

```
$ brew tap kyoshidajp/ghkw
$ brew install ghkw
```

Go 環境を設定していれば `go get` でもOK。

```
$ go get -u github.com/kyoshidajp/ghkw
```

もしくは[リリースページから最新](https://github.com/kyoshidajp/ghkw/releases/latest)をダウンロードして、パスが通った場所に配置します。

GitHub API を使っていて、プライベートリポジトリも検索するため、初回起動時にログインが必要です。もしくは環境変数 `GITHUB_TOKEN` にリポジトリのアクセス権をもったトークンを指定するとそちらを優先します。

# 参考

- [Searching code \- User Documentation](https://help.github.com/articles/searching-code/)
- [Search \| GitHub Developer Guide](https://developer.github.com/v3/search/)