【GitHub】ソースコード検索したい。

#はじめに
WebAPIなどの実装時、他の人がどのように実装しているか気になりませんか？
ただ、書き方のお手本にしたいなぁと思っても、私が出来るのはGitHub左上の検索フィールドで足掻くぐらい。笑（↓）
もそっと効率上がらないかな…と言うことで検索方法について調べてみました。
[![Image from Gyazo](https://i.gyazo.com/85511290ef466762e7271b08df8411a9.png)](https://gyazo.com/85511290ef466762e7271b08df8411a9)

※因みに、このQiita見るより↓ら辺のGitHubヘルプ見る方が手っ取り早い説あります(笑)
・[GitHub での検索について](https://help.github.com/ja/articles/about-searching-on-github#searching-using-a-visual-interface)
・[検索構文を理解する](https://help.github.com/ja/articles/understanding-the-search-syntax)
・[コードの検索](https://help.github.com/ja/articles/searching-code)
#ソースコードの検索
目標はWebAPIなどで提供されている機能の実装サンプルを探してみようーです。
このQiitaではGUI検索とprefixを使って、ソースコードを検索します。

お題：「recaptcha」と言うWebAPIの「verify_recaptcha」機能を使っているRubyファイルを探す！
##GUIによる検索
とりあえず初心者なのでGitHubがGUI付きで提供してくれている高度検索の機能を利用します。

**[通常検索]**
https://github.com/search
※prefix例などのリンクも貼ってあって非常にありがたい

**[高度検索]**　← こちら
https://github.com/search/advanced
[![Image from Gyazo](https://i.gyazo.com/1f38a8a000ce7b7f3daba123a5f2a605.png)](https://gyazo.com/1f38a8a000ce7b7f3daba123a5f2a605)

※今だに画面からどうやって行けばいいか分からない情弱者です(笑)
 なのでリンクを貼ってカバー。

###検索項目の指定
Rubyと言う言語のファイルを探そうと思った時、高度検索の検索項目では以下の２つが使えそうです。

言語指定(Advanced options内）
[![Image from Gyazo](https://i.gyazo.com/e9459385ae28ee49cb8d466332ac8d36.png)](https://gyazo.com/e9459385ae28ee49cb8d466332ac8d36)

拡張子指定（Code Option内）
[![Image from Gyazo](https://i.gyazo.com/08c0345628625400a354b218ade96993.png)](https://gyazo.com/08c0345628625400a354b218ade96993)

##in修飾子によるキーワード指定
高度検索の項目には、ソースコード内の特定キーワードを検索できるような項目がありません。ですが、修飾子を直接指定することで実現できるようです。

|修飾子名|使い方              |
|:-------|:------------------|
| in:file|'キーワード' in:file<br>例）verify_recaptcha in:file |


ただし、googleの様にダブルクォート("")でくくって完全一致をさせることはできないみたいです。２キーワードを指定した場合は、１単語ずつOR検索されてる感じですかね。
（もしかすると、googleからGitHubサイト指定でソースコード探す方が手っ取り早いのか？！とも思う笑）

###コード検索における注意事項
ソースコードの検索には沢山の制約があります。
以下、ヘルプを抜粋しました。
>コードの検索は複雑なため、検索の実行には一定の制限があります。
・ すべてのパブリックリポジトリにわたってコードを検索するには、サインインしなければなりません。
・ フォークのコードは、親リポジトリより Star が多い場合に限って検索可能です。 親リポジトリより Star が少ないフォークは、コード検索ではインデックスされません。 親リポジトリより Star が多いフォークを検索結果に含めるためには、クエリに fork:true または fork:only を追加する必要があります。 詳細は「フォーク内で検索する」を参照してください。
・　コード検索では、デフォルトブランチのみインデックスされます。 ほとんどの場合、これは、master ブランチです。
・ 384 KB より小さいファイルのみ検索可能です。
・ 500,000 より少ないファイル数のリポジトリのみ検索可能です。
・ サインインしているユーザは、すべてのパブリックリポジトリを検索可能です。
・ filename の検索を除き、ソースコードを検索する場合、常に少なくとも検索単語を 1 つ含める必要があります。たとえばlanguage:javascript は有効な検索ではありませんが、amazing language:javascript は有効な検索です。
・ 検索結果では、同一ファイルから取り出される部分は 2 つまでです。そのファイルはさらに多くの部分でヒットしている可能性があります。
・ クエリの一部として次のワイルドカード文字を用いることはできません:
 . , : ; / \ ` ' " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ] 検索では、これらのシンボルは単に無視されます。
出典：[GitHubヘルプ：コードの検索](https://help.github.com/ja/articles/searching-code)(2019/9/16時点)

制約だらけ（っ_x）

##検索結果
指定が完了した時点で、検索フィールドは下図の様な感じになっています。
これを直接指定すれば、いつもの検索フィールドでも同じことができる感じですね！
[![Image from Gyazo](https://i.gyazo.com/ecb7a5d63e005de944507571e9badcb3.png)](https://gyazo.com/ecb7a5d63e005de944507571e9badcb3)

検索に実行したらこんな感じ。わお。
[![Image from Gyazo](https://i.gyazo.com/f8b6192bca2d7f92091755e4603ffbc2.png)](https://gyazo.com/f8b6192bca2d7f92091755e4603ffbc2)

##絞り込もう
GitHubでは就職子にprefixとして``-``を指定することで、その修飾子にマッチする全ての結果を除外することができます。試しに”test”と"spec"をファイ名に持つファイルを除外してみましょう。
[![Image from Gyazo](https://i.gyazo.com/526b3a098e760c89e627c82d61b50c82.png)](https://gyazo.com/526b3a098e760c89e627c82d61b50c82)

ちょびっと減った笑
[![Image from Gyazo](https://i.gyazo.com/20a9800a7ffcdecc8cebd6f5e32bcd21.png)](https://gyazo.com/20a9800a7ffcdecc8cebd6f5e32bcd21)

あとはソート順を変えてみたり、絞り込み条件を試しながら、色々と遊んでみましょう。（投げた

# まとめ
コード例をサクッと探せる様になれば、もう少し世界が広がる…かも！（ホントか
最近、GitHubでソースコード読んでいて新しい発見をすることが多いので、上手く活用していけるようになればな、って思っています(>_<)

何か新たな発見や使いわすい技など見つけたら、改めてQiitaにまとめます。

#参考
[GitHubヘルプ](https://help.github.com/ja/articles/)
・[GitHub での検索について](https://help.github.com/ja/articles/about-searching-on-github#searching-using-a-visual-interface)
・[検索構文を理解する](https://help.github.com/ja/articles/understanding-the-search-syntax)
・[コードの検索](https://help.github.com/ja/articles/searching-code)