[初学者向け]GitHubを使った個人的検索方法(サンプルコードを見つける場合)

# はじめに
私は、文系未経験のプログラミング初心者です。5月後半に始めたので今で大体5ヶ月弱が経ちました。
今個人アプリを開発していますが、その際に使っている検索方法をご紹介したいと思います。なぜこれを紹介したいと思ったかというと、初心者と`GitHub`にはそれなりに敷居の高さがある一方で、`GitHub`はバージョン管理以外でも有用で初心者の助けになることも多いと感じたからです。
初心者の方々だと、私ほどではないと思いますが詰まることもそれなりにあると思いますので、その検索に少しでも役立てていただいたら幸いです。尚、エラー解決がメインの使い方というわけではなく、公式ドキュメント等を見て「これってどんな書き方をすればいいんだろう?」とか疑問が湧いた時に使える方法です。

# 検索方法
手順はざっくりいうとこんな感じです。


**1. 調べたいことがあった際に、その調べたいもの関連の`特有のコード`を見つける**
**2. その調べたいコードを`GitHub`の検索ボックスに入れて入力する**
**3. 必要であれば、調べる際にその特有のコードに関連する`使用言語、特有のファイル名`を用いて検索をする**
**4. 見つかった検索結果から、自分の探したいものに近そうな物を発見したら、そのレポジトリを漁ってみる**


順を追って説明していきます。

# 1.特有のコードを見つける
プログラミングでは、各言語・フレームワーク・モジュールによって特有のコードが存在します。特有のコードが故に検索で引っかかりやすいというのを今回は利用します。
何か調べ物をする際、通常行うことは公式ドキュメントを見て、当該記事の説明を読むことでしょう。しかし、時に、特に初心者の方にとって、ドキュメントを見てもいまいち具体的なコードの書き方が分からないという様な事例があるかと思います(これが私だけだったら焼き土下座でもなんでもします)。
実例を交えて説明してみます。私が、`Django`の`django-allauth`で`username`のValidationをしたいとします。そこで、公式ドキュメントで以下の様な記述を見つけました。

>
ACCOUNT_USERNAME_VALIDATORS (=None)
A path ('some.module.validators.custom_username_validators') to a list of custom username validators. If left unset, the validators setup within the user model username field are used.
Example:

```
# In validators.py

from django.contrib.auth.validators import ASCIIUsernameValidator

custom_username_validators = [ASCIIUsernameValidator()]

# In settings.py

ACCOUNT_USERNAME_VALIDATORS = 'some.module.validators.custom_username_validators'
```

いまいち何を書けば想像がつかなかったとします。そこで、この説明の中の**特有のコード**使って調べ物をします。今回は`ACCOUNT_USERNAME_VALIDATORS`をターゲットとして調べたいと思います。

# 2 `GitHubで検索する`
2は非常にシンプルです。
![Screen Shot 2020-10-10 at 20.58.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676004/463180a5-94fb-190d-f63f-a023caf26665.png)
`GitHub`の左上の方に検索ボックスがあります。そこに先ほどターゲットにした特有のコードをコピペするだけです。一つ注意するとするなら、検索対象を`All GitHub`にしておくということだけでしょうか。

# 3 言語、ファイル名を指定して検索する
検索結果が表示されたら、左のボックスの`Code`という項目を選択してみてください(エラー修正の場合ここで`Issues`の方をみてもいいかもしれません)。
![Screen Shot 2020-10-10 at 21.27.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676004/27ab59f2-700d-0c53-f370-d39c93ee8927.png)
この時点である程度は絞り込めているとは思いますが、まだ候補が多い場合も十二分にあります。そこでもう少し調べたいものに近づけるためにAdvanced Searchを使います(このボックスのあるページ左側の最下部にあります)。
オプションはいろいろありますが、今回は私がよく使っている(タイトル通りの)言語とファイル名を使った検索方法を紹介します。

### 言語でのフィルター
まず、言語でフィルターをかけていきます。
![Screen Shot 2020-10-10 at 21.30.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676004/8c0186cf-1194-88b2-4271-6ecaf19d85f1.png)
`Advanced options`の一番下の`Written in this language`を使います。ここで、特有のコードが書かれている言語を指定します。今回の私の事例ですと、`Python`を選択するといった感じです。

### ファイル名でのフィルター
続いては特有のコードが書かれているであろうファイル名を使って検索を行います。プログラミングでは、慣例的なファイル名が使われる事例が多々あります。[1]の特有のコードの時点でも充分絞り込めているとは思いますが、特有のコードが慣例的名前のファイルに書き込まれている場合、検索の精度は上がると思われます。

![Screen Shot 2020-10-10 at 21.31.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676004/a76acfbc-eeb7-1c30-97fd-2d8da270994d.png)

`Code options`の一番下、`With this file name`という項目を使います。私の例の場合、`ACCOUNT_USERNAME_VALIDATORS`が書かれているのは、`settings.py`という名前を入力すればよいことになります。

以上言語とファイル名でフィルターをかけた上でもう一度検索をしてみます。

# 4.検索結果内のレポジトリを調べてみる
検索した結果、探したいものはある程度調べられました。[1]で選んだコードが調べたい部分の直接のコードではない場合も多々あるでしょう。私の例の場合だと、`ACCOUNT_USERNAME_VALIDATORS`は特有のコードではあるけど、実装したいものそのものを表現しているコードではないという様な感じです(私の例だと`validators.py`にありそうですね)。

そんな時は、検索結果で表示されたレポジトリを漁ってみましょう。ここまで絞ってヒットしたものなので、その機能が実装されている可能性が高いでしょう。プラスの方法として、更新された順とかで順番を変更してみるのも場合によっては有効です。

# まとめ
以上が、私が使っている検索法です。初心者のうちはドキュメントを見てもちんぷんかんぷんになる場合は往々にありますし、なかなかにそれはストレスがたまります。この記事がそのストレスを軽減したり、エンジニアに重要な検索力の向上に役立てば幸いです。
`GitHub`を使った他の検索法や、`GitHub`以外でもおすすめの検索方法があれば、コメントで教えていただきたいです。

拙い文章ではございますが、ご覧いただき誠にありがとうございました。