Posted at

GitHub のリポジトリ検索を使う時には「部分一致ではなく単語一致」「Clone して Grep する」の二点を意識する

More than 1 year has passed since last update.

GitHub のリポジトリ検索を結構使うのですが、「なんかいまいちヒットしないな」と思うことが多々あります。そこでその辺の挙動を簡単に調べ、どう対処すればいいかをまとめてみました。


リポジトリ検索とは

以下のことです。

トップページや自分のプロフィールページでは GitHub 内全域を検索できます。

また、リポジトリのページではそのリポジトリ内を検索できます。


結論


  • GitHub のリポジトリ検索は 部分一致ではない

  • GitHub のリポジトリ検索は 単語一致である (と思われる)

  • 部分一致で探したいなら素直に Clone してローカルで Grep とかしましょう


詳しく

stakiran/test_github_search というリポジトリを作って実験してみました。

リポジトリに hello.py というファイルがあるとします。

import sys

print('Hello.')
print('はろー')
print('こんにちは世界')

さてここでクイズです。以下の検索ワードのうち、hello.py にヒットするのはどれでしょう?


  • Q1. import

  • Q2. impor

  • Q3. はろー

  • Q4. こんにちは

  • Q5. こんにちは世界

  • Q6. ちは

  • Q7. "ちは"

正解(ヒットするもの)は以下です。


  • Q1. import

  • Q3. はろー

  • Q5. こんにちは世界

Q1 は import という単語に、Q3 は「はろー」という単語に、Q5 は「こんにちは世界」という単語に一致するため、ヒットします。Q2, Q4, Q6, Q7 は 部分一致はするが単語一致していない ためヒットしません。

ここで「単語一致とは何か」という話になりますが、詳しい仕様は私もわかりません :sweat: 見た感じでは「スペースやら "" やら '' やらで区切られた一繋がりの文字列」だなという印象です。この単語一致についても例を上げると、

print('こんにちは世界')

上記の日本語部分の単語とは「こんにちは」でも「世界」でもなく、「こんにちは世界」のみです。意味的(セマンティック)な単語ではなく構文的(シンタックス)な単語、とでも言えばいいでしょうか。


おわりに

軽く調べた程度の小ネタでしたが、GitHub のリポジトリ検索に関するモヤモヤが晴れて、少しだけ付き合いやすくなった気がします :smile: