【GitHub】コード検索機能なんで使ってないの？

# はじめに
開発をするとき、GitHubのホームからPRやissueを毎回ボタンポチポチやスクロールをして頑張って開いてませんか？

また、開発をするときなどに、『この技術はどう使うん？』と思って毎回ググってはいませんか？（GPT先生がいますが。。。🥺）

**そんなことはもうやめて、GitHubの検索機能を使うべき！！！**

ということで、

この記事では、GitHubの検索機能でPRやissue、ソースコードを検索することもいいよ！

ということを伝えます！

以下に記載する内容は以下の記事を参考にしています。

https://docs.github.com/ja/search-github

GitHubの自己満tipsもあるよーーーーーーーーーーー😏


# GitHubのソースコード検索の仕方

## コード検索できること

GitHubコード検索を使用すると、自分のコード、他人のオープンソースコード、チームのコード、コミュニティのコードを検索することができる。

**特定のキーワードを持つリポジトリ** や **Organizationの特定のファイルやissues**に素早くジャンプできるのが、生産性が上がり、嬉しさポイント！！！！😁

## 検索場所

### 1. GitHub コマンドパレット :  GitHub で `⌘ + k (Mac) / ⌃ + k (Windows)`


`⌘　+ k (Mac) / ⌃ + k (Windows)`でコマンドパレットを開くことができる

- この画面がでできて検索開始！
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/16b4a263-2c1d-d89c-829c-c0d7613931ba.png)


[公式ドキュメント　GitHub コマンドパレット](https://docs.github.com/ja/get-started/using-github/github-command-palette)

### 2. 通常検索（GitHub Code Search） : https://github.com/search

コード内の関数やクラスの定義を、`symbol: qualifier`形式で検索できる。

2パターンの検索方法がある。

- **a. GitHub.com の上部のナビゲーションにある検索バーをクリック!**
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/2989559a-2c24-8d62-7922-e78176218325.png)


- **b. ブラウザで`github search`で検索**
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/51fb8ad3-1486-b19f-ff5e-c8df2c9e0536.png)

[公式ドキュメント GitHub Code Searchの使用](https://docs.github.com/ja/search-github/github-code-search/about-github-code-search)




### 3. アドバンス検索 : https://github.com/search/advanced

- GUIでサクッと検索できる!
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/a92567b8-9153-c96b-c51b-2fa992f37dce.png)



## 検索対象

以下が検索できるよ〜

- **ユーザー**
- **リポジトリ**
- **トピック**
- **issues と PR**
- **ディスカッション**
- **コード**
- **コミット**
- **パッケージ**
- **Wiki**

## コード検索時の制約

ソースコードの検索には制約があります。
普通に検索する上ではあまり関係なさそうです🤔

> The current limitations on indexed code are:
>
>- Vendored and generated code is excluded
>- Empty files and files over 350 KiB are excluded
>- Lines over 1,024 characters long are truncated
>- Only UTF-8 encoded files are included
>- Very large repositories may not be indexed
>- We currently only support searching for code on the default branch of a repository.

現在の制限は次のとおりです。
- ベンダー化されたコードと生成されたコードは除外されます
- 空のファイルと 350 KiB を超えるファイルは除外されます
- 1,024 文字を超える行は切り捨てられます
- UTF-8 でエンコードされたファイルのみが含まれます
- 非常に大きなリポジトリにインデックスを作成できない場合があります




# 検索での構文

## GitHub コマンドパレットでの構文

- `「#」` issue、プルリクエスト、ディスカッション、プロジェクトを検索する
- `「!」` プロジェクトを検索する
- `「@」` ユーザー、組織、およびリポジトリを検索する
- `「/」` リポジトリスコープ内のファイルを検索する
- `「>」` コマンドモードに入る
    - New repositoryなどを簡単に作成できる

[Command palette beta | GitHub Changelog](https://github.blog/changelog/2021-10-27-command-palette-beta/)

## 通常検索での構文(コード検索)

**ソースコード（ファイルの内容）**または**ファイルのパス**がヒットする

```
http-push
```
上記のクエリは、
用語 `http-push` がコード含まれているファイルをすべて検索します。
加えて、用語 `http-push` がコードに含まれていなくても、 ファイル `docs/http-push.txt` と一致して、ヒットすることもある。


**Q ： 例えば、DockerでGoを動かしたいんだけど、どう書くんだっけ？？**

`FROM golang:1.20-alpine`で検索した結果がこちら（例）

![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/2709d4f2-5260-f40d-1114-d81b6b4786e5.png)

検索でヒットしたコードを読んで、勉強🤔

GitHub上には、いろんなコードがあるんだから、脳死で、`Docker Go`でググるのはやめにしませんか？？（スターの多いリポジトリが信頼度高めかも）



## 通常検索での構文(リポジトリ検索)

### 1.  `>`、`>=`

ある値より大きい、以上、より小さい、および以下の値を検索できる

スターが20個より多い新卒研修の”キーワード”が入ったリポジトリ検索
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/f2f15767-5675-5651-88ff-5fd2f8a7746e.png)
`新卒研修 stars:>20`


### 2.  `YYYY-MM-DD`日付のクエリ

2022 年 1 月 1 日以前に作成された "hackathon" が入ったリポジトリ検索

![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/86d477fc-7c20-4f4d-431a-35821426d740.png)
`hackathon created:>2022-01-01`


### 3.  **`is:issue`、`is:pr`**

自分がアサインしたpull requestsを検索

![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/b83bfbb5-465e-2da1-279b-b7b6c7cec10e.png)
`is:pr assignee:@me`

自分がアサインしたissuesを検索

![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/83a6591f-a1b7-118b-ca56-92d218073207.png)
`is:issue assignee:@me`

- **実際の調べ方**
    自分がアサインしたpull requestsで　`hoge`のキーワードが入っているPRを検索
`is:pr assignee:@me hoge`

    このpull requestsで検索でヒットしたものを確認！！
    ![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/fe82b781-d170-27ce-42b0-d6914860532f.png)



### 4. `saved:`

毎回、こんな長いクエリを毎回検索時に打ってられないと思いましたが、、、しかし

**`saved:` で検索クエリ(検索条件)を保存できる**

〜試しに、自分がアサインしたpull requests検索する検索クエリをやってみる〜

step1    `is:pr assignee:@me`で検索

step2  右上のSaveボタンをクリック
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/79e5aa74-bbd0-e58b-a02d-d597883d8195.png)
step3 Nameを決めて、`Create saved search`へ
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/6e83b78b-2bb6-58a4-a652-9d0ffe06e050.png)
そうすれば、検索の**Saved queries**に`saved:`クエリが登場！！
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/93695fd5-f8fc-0205-dfcf-5fb86f7c180c.png)



### 5.  他には...　こんなクエリがあるよー

- **`path:パス`**
- 検索結果のソート
- 空白のあるクエリに引用符を使う
- 特定のキーワードを含む結果を除外する
- 修飾子に一致する結果を除外する


[公式ドキュメント 検索構文を理解する](https://docs.github.com/ja/search-github/getting-started-with-searching-on-github/understanding-the-search-syntax)

## 検索結果のソートと絞り込み

**ソートについて**

クエリでもソートできるが

右上に検索結果のソートの**ドロップダウンリスト**からソートしたほうがいい

![スクリーンショット 2023-06-19 午後00.54.16 午前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/5aa49985-c1bd-2afb-0696-2fb86acf9ae3.png)

**絞り込みについて**

ここから言語の絞り込みできます〜

![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/75f7d421-63b3-320f-46f9-3d1caac82bf9.png)


UIが新しくなって、RepositoriesやPaths、Advanced（Owner, Symbol, Exclude archived）の絞り込みがGUIでできるように！

# UIが変わったので、調べやすくなったかも

UIが変わったので、違和感しかないですが、、、

PRやissueが調べやすくなっとるじゃん！！！

左から、issue, PR, notificationsらしいです！
![スクリーンショット 2023-06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/31108bb1-7564-b79a-c881-831a47a6eee1.png)

# 個人的な効率の良い調べ方

長々と説明したが、、、

:::note 
**コマンドパレットで、issueやPRを検索し、日々の開発の生産性を上げ**
:::
- issue、PRを素早く検索できる（ボタンをポチポチするのは卒業）
- リポジトリ検索はかなり早く検索できる

:::note 
**通常検索で、オープンソースコードやチームのリポジトリの検索に使う**
:::
- 意外と自分が得たい情報かつ、＋アルファで情報を得ることができる



# TIPS

### **Gitに関して**

- **サル先生のGit入門**

https://backlog.com/ja/git-tutorial/
    
- **GitHub CLIのコマンドおすすめ（gh pr createらへんよく使います！）**
    
https://qiita.com/ryo2132/items/2a29dd7b1627af064d7b

    
https://cli.github.com/manual/gh_pr

- **git-tips**
    
https://www.npmjs.com/package/git-tip

https://github.com/git-tips/tips

- ****issue と Pull Request (commit) の紐づけとか、、、その他****
    
https://qiita.com/umi/items/31f71330bedc54c05940

- **GitHub 通知**

https://zenn.dev/siketyan/articles/you-are-not-using-github-correctly

- ****lazygit(コミットログを楽に整形できるのが最強！！！！)****

https://github.com/jesseduffield/lazygit
    
- ****GitHubのプルリクエストのdiffやpatchをして差分を見る****
    
https://qiita.com/hshimo/items/f038ed1291114dee7b69
    
- **GitHubプロフィール（出来るエンジニア感だそう💪）**
    
https://zenn.dev/a_ichi1/articles/0411396e6b887d
    

- **GitHubのページで「`.`」を打てば起動する。ブラウザで、`github.dev`で検索しても開けるよ〜〜**
    
https://docs.github.com/ja/codespaces/the-githubdev-web-based-editor
    
https://qiita.com/ku_suke/items/07deb49dba04bdc36216

- **Codespaces（GitHub が Visual Studio Code の環境をホストしてくれるサービス）**
    
https://github.co.jp/features/codespaces
    
https://zenn.dev/dzeyelid/articles/5485cdeb2a1ada
    
https://qiita.com/uikou/items/1feb83865f9d638807ad

- **GitHub Copilot（ゴイスーです👀）**

https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/

https://qiita.com/kihaya-tech/items/8e530de6d8078f1b134c
    
https://qiita.com/zackey2/items/1726d2b0901c7b7e38e4
    

https://twitter.com/voluntas/status/1647224026492813312

- **Trending GitHub Repositories の bot(最もスターの多い GitHub リポジトリが知れる)**

[Trending GitHub Repositories](https://twitter.com/trending_repos)


# まとめ

どれが正しいとかは全くないですが、開発者にとっては、日々のGitHubの操作は、直接仕事の成果とはあまり結び付かず効率化できるものが多いと思います。

自分のリポジトリ内やチームのリポジトリ内で、「先日のissueや新しく作成したPRどこかなー💦」と探す時間を取られるぐらいだったら、検索をバシッと決め、効率化し、たくさんコードを書くべきだと駆け出しエンジニアながら、学んできました。

**そんな時に、GitHubの検索機能は素晴らしく、生産性を上げてくれると思います！！！**

また、検索機能を使って他の開発者さんなどのオープンソースのコードを検索してみると、多くの気づきがありそうです🤔

実際にGitHubの検索機能は、

- **コマンドパレットで、自分のリポジトリ内やチームのリポジトリ内issueやPRを検索**
- **通常検索で、オープンソースコードの検索**

すると便利かもですね！！

その他、GitやGitHubには面白い機能などがあるので、この記事をきっかけに色々調べてみると面白いかもですね〜