弊社のGitHubは、500超のリポジトリと50超のプロジェクトを抱えています。プロジェクトのKanbanを見ながらあちこちのリポジトリを行ったり来たり、あれれ昨日見ていたIssueはどこいった?あのIssueはどこのリポジトリだっけ?なんてことがよくあります。

GitHubのサイトには検索機能が備わっていますが、もっと素早く検索したいと日々ハックを探し求めています。この記事では、私が日常的に使っている検索方法を紹介します。

  • macOSのショートカットで説明しています。
  • サンプルは個人のGitHubページのため、組織を対象にする場合は ownerorg に読み替えてください。

目次

  1. あのプロジェクトどこだっけ
  2. あのリポジトリの名前なんだっけ
  3. さっきコメントしたIssueどこだっけ
  4. package.jsonを全部みたい
  5. リポジトリでコード検索したい
  6. Issueタイトルを全部みたい

1. あのプロジェクトどこだっけ 🤔

GitHubでは Cmd + K でコマンドパレットを呼び出し ! をタイプするとプロジェクトの候補が表示されます。

GitHub Command Palette リファレンス | GitHub Docs

コマンドパレットでは、日本語変換のための Enter が「決定してジャンプ」として反応します。またリポジトリ横断で検索する時はOwner/Organizationのページでコマンドパレットを呼び出す必要があり、若干面倒です。

Chrome検索エンジンを使おう

GitHubでProjectsを検索します。

検索結果のURLには検索語句「テスト」が含まれます。このURLを利用してChrome検索エンジンに登録します。

https://github.com/ringtail003?query=is%3Aopen+テスト&tab=projects

検索語句を %s に置き換えます。

- https://github.com/ringtail003?query=is%3Aopen+テスト&tab=projects

検索エンジンに登録するURL
+ https://github.com/ringtail003?query=is%3Aopen+%s&tab=projects

chrome://settings/searchEngines Chrome 設定 > 検索エンジン

検索する

Chromeのオムニバーで proj + Space をタイプすると「GitHub Projectsを検索」という表示に変わります。つづけて検索語句を入力します。

GitHub Projectsの検索結果のページが開きます。

Chrome新規タブ → proj + Space の2ステップでリポジトリ横断のプロジェクト検索ができます。


2. あのリポジトリの名前なんだっけ 🤔

冒頭でも触れたとおり、弊社のリポジトリ数は500超です。onboading-angular-tutorial-ringtail003 なんて長い名前だと、数カ月後には「ええと確か自分の名前が入ってたような…」くらいの記憶しか残っていません。

GitHubでは「Repositories」に検索窓が用意されています。

私は面倒くさがりなので検索のたびに「Repositories」のページを訪れるのが手間に感じてしまいます。

Chrome検索エンジンを使おう

プロジェクトと同じように、リポジトリ検索結果のURLをChrome検索エンジンに登録します。

検索語句を %s に置き換えます。

- https://github.com/ringtail003/repositories?q=-archived%3Atrue+テスト

検索エンジンに登録するURL
+ https://github.com/ringtail003/repositories?q=-archived%3Atrue+%s

ショートカットを「repo」のように短くするとタイプ数が少なく済みます。

chrome://settings/searchEngines Chrome 設定 > 検索エンジン

検索する

Chromeのオムニバーで repo + Space をタイプして検索語句を入力します。

GitHub Repositoriesの検索結果のページが開きます。

{名前}-frontend {名前}-backend のように命名が揃っていると {名前} で関連リポジトリをリストアップできます。


3. さっきコメントしたIssueどこだっけ 🤔

あちこちのリポジトリを行き来していると「さっきコメントしたIssue」をよく見失います。

GitHubではショートカット / で検索バーを呼び出し commenterassignee などオプションで検索条件を指定できます。

Issue およびプルリクエストを検索する | GitHub Docs

commenter:自分 の検索結果を Recently updated でソートすると「さっきコメントしたIssue」が見つかります。

残念なことに私は commenter やら assignee やら、たくさんのオプションを覚えられません。ソートの選択肢も来月には忘れているでしょう。

Chrome検索エンジンを使おう

またまたChrome検索エンジンが活躍します。検索結果のURLを登録しましょう。

検索語句を %20+%s とします。

- https://github.com/search?q=owner%3Aringtail003+commenter%3Aringtail003+テスト&type=issues&s=updated&o=desc

検索エンジンに登録するURL
+ https://github.com/search?q=owner%3Aringtail003+commenter%3Aringtail003+%20+%s&s=updated&o=desc&type=issues

chrome://settings/searchEngines Chrome 設定 > 検索エンジン

検索する

Chromeのオムニバーで recent + Space をタイプすると「GitHub Recent Commentを検索」という表示に変わります。つづけて検索語句を入力します。

もしくは recent + Enter をタイプすると検索語句なしで「さっきコメントしたIssue」をリストアップします。

commenter で検索して Recently updated で並べ替えて…という複数の検索工程が recent + Enter というシンプルなショートカットに置き換わります。

補足 いくつかのデバイスに登録したのですが %20 が機能しないケースがあるようです。その場合は検索語句を入力してください 🙇


4. package.jsonを全部みたい 🤔

Angularを使っているリポジトリをすべて列挙してバージョンチェックがしたい、みたいなことがあります。

GitHubではショートカット / で検索バーを呼び出して path:"package.json" @angular/core のように検索条件を指定します。

バージョンチェックはそれなりに間隔が空くので、次回検索する時に「はて、オプションはなんだっけ…」とGitHubヘルプを漁る自分が目に浮かびます。

保存しよう

「Save」で検索条件を保存できます。

検索バーで saved: とタイプすると、保存した検索条件がリストアップされます。

他にも Node.js のバージョンだったり、READMEの特定の見出しだったり、いろいろ抽出して保存できます。


5. リポジトリでコード検索したい 🤔

GitHubではショートカット / で検索バーを呼び出して検索語句を入力します。

ところがどっこい、思いどおりにヒットしないことがあります。

VS Codeで開こう

GitHubのブラウザで . をタイプするとブラウザ上でVS Codeが開きます。

よく見るとURLが github.com から github.dev に変わっています。これはGitHubが提供するWebベースのエディター機能で、ショートカット . で呼び出しているという訳です。

github.dev Web ベース エディター | GitHub Docs

プロジェクト内検索は Cmd + Shift + F です。ファイル全体が見えるので文脈もわかりやすいです。

検索に続けてコードを編集した時は Source Control のメニューからコミットやプルリクエストの作成まで一貫して作業できます。

あちこちのリポジトリでコード検索して手直ししたい、そんな時に git clone したり git pull origin でメインブランチを最新にしたり、ローカルであれこれ作業する手間が省けます。


6. Issueタイトルを全部みたい 🤔

カタカナ表記と英語表記のちょっとした違いでIssue検索にヒットしない時は、タイトルをつぶさに眺めて探しています。

Issueがしこたま溜まっているリポジトリはひと苦労します。ページ送りで次のページを探して、また次のページを探して、という動作を繰り返すと手首が疲れます。

ghを使おう

タイトルのリストはターミナルが見やすいです。GitHub CLI(gh) コマンドをインストールしましょう。

https://cli.github.com/

初回のみログインが必要です。

gh auth login

git clone したディレクトリでIssueタイトルがリストアップできます。

gh issue list

> Showing 30 of 73 open issues in ringtail003/demo
> 
> #150  トップページが表示されない        about 22 hours ago
> #142  リンク先が間違っている           about 5 days ago
> #140  サービスのテストを追加           about 1 month ago
> #139  テストスイートをtestに揃える      about 2 month ago
> #121  テストランナーをJestに変更       about 1 month ago

リストの表示件数は -L オプションで指定できます。

gh issue list -L 100

さすがに100件のリストの目視はしんどいので絞り込みしたくなります。インタラクティブに絞り込みできる --jq オプションが用置されていますが、私はかんたんシンプルなpecoへのパイプを使っています。

https://github.com/peco/peco

gh issue list -L 100 |peco

QUERY > テスト
> #140  サービスのテストを追加           about 1 month ago
> #139  テストスイートをtestに揃える      about 2 month ago
> #121  テストランナーをJestに変更       about 1 month ago

探していたIssueが見つかったら browse サブコマンドを使って、ブラウザで開きます。

gh browse 139

issuepr にするとプルリクエストにも応用できます。

gh pr list

おわりに

GitHubはコードという資産の収納庫です。ちょっとした工夫で収納庫の引き出しが軽やかに開くと快適さが増します。この記事がみなさまの引き出しの潤滑剤となれば幸いです。