被依存数から探す GitHub 検索

star では埋もれる、
実際に使われている OSS を見つける。

gem-hunter は、GitHub のキーワード検索に加えて、被依存数 のわりに star が少ない OSS を毎日 5 件提示する検索ツールです。被依存数とは、 そのリポジトリを実際に依存関係へ入れているパッケージの数のこと。 スマートフォンのブラウザで開くだけ、アプリのインストールも登録も要りません。

  • 登録不要
  • 無料
  • 広告・トラッキングなし
  • MIT ライセンス
スマートフォンで表示した gem-hunter の検索結果画面。「react」で検索し、検索欄の下に関連度・star 数・更新日時の並び替えと 20 / 50 / 100 件の表示件数の切り替えが並び、その下に「この検索語の Gem 候補を一覧で見る」導線がある。react/react のカードにはオーナーのアバター画像と Gem バッジが付き、リポジトリ名・説明・主要言語・star 数・最終更新日・トピックが縦に積み重なっている。

スマートフォンで「react」を検索した実際の画面です(検索結果は GitHub API から取得しています)。 一部のカードに付いている Gem の印については「仕組み」で説明しています。

キーワードの例(クリックでそのまま検索)

画面幅

PC でも、そのまま使えます。

同じ URL を PC のブラウザで開くと、縦に積み重なっていた要素が横に並び替わります。 スマートフォン用と PC 用でアプリを使い分ける必要はありません。

PC の画面幅で表示した gem-hunter の検索結果画面。「react」で検索し、各カードにオーナーのアバター画像とリポジトリ名が並び、react/react のカードに Gem バッジが付いている。上部には関連度・star 数・更新日時の並び替え、20 / 50 / 100 件の表示件数の切り替え、「この検索語の Gem 候補を一覧で見る」導線がある。

PC の画面幅で「react」を検索したところです(検索結果は GitHub API から取得しています)。

課題

star は「注目度」であって、「使われている証拠」ではない。

star は誰でも 1 クリックで押せます。だから star 順に並べるほど、 地味だけど本当に使われているライブラリは下に沈んでいきます。

star の多い順に見ると

すでに有名なリポジトリが上位を占めます。人気の指標としては正しくても、 「自分の実装に使えるか」の判断材料にはなりません。

約 600 万 研究が「偽の疑いあり」と判定した star 数 18,600 その star が集まっていたリポジトリ数

被依存数から見ると

「実際に import されている数」は水増ししにくい指標です。star が少ないのに 多くのパッケージから使われているものが、見つけたかった OSS です。

25 star debug_inspector の star 数 111,000+ そのリポジトリに依存する OSS の数

出典: He et al. Six Million (Suspected) Fake Stars on GitHub(ICSE 2026)ほかの調査まとめ。実例に挙げた debug_inspector は RubyGems の パッケージで、25 star に対し 111,000 以上の OSS プロジェクトから依存されています。

仕組み

やることは 3 つだけ。

アカウントも設定もいりません。開いて、打って、読むだけです。

  1. キーワードで GitHub を検索する

    関連度 / star 数 / 更新日時で並び替え、20・50・100 件から表示件数を選べます。 検索条件は URL に載るので、そのまま共有・ブックマークできます。

  2. キーワードなしで開いて「今日の Gem」を見る

    キーワードを入れずに開くと、被依存数のわりに star が少ないリポジトリを 毎日 5 件だけ提示します。前回の訪問になかったものには「新着」が付きます (初回は「初回として全件を表示しています」と出て、個別の新着マークは 2 回目の訪問から付きます)。

  3. 詳細画面で README まで読む

    star / watcher / fork / open issue の 4 指標と README 本文をその場で表示します。 読み終わって戻れば、検索条件はそのまま残っています。

Gem Index の並び順

Gem Index = 被依存数の順位 − star の順位

どちらも Ecosyste.ms の 0〜100 のパーセンタイル順位(0 が最上位)です。値が小さいほど 「使われ方に対して star が少ない」= 過小評価されている、という意味になります。 例えば被依存数が上位 0.1(= 上位 0.1%)で star が上位 7(= 上位 7%)なら Gem Index は −6.9。実際のデータでもこのあたりが最上位帯です。

この値は 3 つの場所で使っています。「今日の Gem」では、この値が小さい上位 60 件を 母集団に、日付から決まる順序で毎日 5 件を選び、その 5 件をこの値の順に並べています。 検索結果では、この候補プールに載っているカードに Gem バッジを付けます (検索結果の並び順は変えません)。検索語から開ける「Gem 候補を一覧で見る」画面では、 集まった候補をこの値の順に並べます(一覧の中身は全件が Gem 候補なので、 キーワード検索と違って順位が意味を持ちます)。

健全性スコア(OpenSSF criticality_score など)は この値に足し込みません。足すと「健全だが有名」なリポジトリが 上位に戻ってきて、結局 star 順のランキングに退化するからです。 判断の経緯は ADR 0009 に残してあります。

できること

いま動いている機能。

これから作るものではなく、いま開いて触れるものだけを載せています。

今日の Gem

被依存数のわりに star が少ないリポジトリを、毎日 5 件だけ入れ替えて提示します。 「利用パッケージ数」と star 数を並べて出すので、そのギャップがひと目でわかります。

ある日の 1 位: rollup-plugin-peer-deps-external — 利用パッケージ数 26,633 に対して star は 111 (2026-08-21 時点の一例。顔ぶれは毎日入れ替わります)

gem-hunter の「今日の Gem」セクションの上部。1 位の rollup-plugin-peer-deps-external が利用パッケージ数 26,633・star 111、2 位の rollup-plugin-commonjs が利用パッケージ数 41,102・star 501 と表示されている。

スマートフォンで取りこぼさない

検索まわりのボタンは指で押しやすい大きさにしてあり、入力欄をタップしても iOS で画面が勝手に拡大されません。 画面幅が変わっても、同じ機能がそのまま縦に積み替わるだけです。

  • タップしやすい
  • 自動ズームなし
  • そのまま縦積み

検索結果でも Gem に気づける

キーワード検索の結果のうち、被依存数のわりに star が少ないカードには Gem バッジが付きます。並び順は変わりません。 バッジが付かないことは低評価を意味しません。

検索結果の上にある「この検索語の Gem 候補を一覧で見る」から、 その検索語に合う Gem 候補だけを Gem Index 順に見られます (対象は 12 のパッケージレジストリ・約 6.2 万リポジトリ)

gem-hunter の Gem 候補一覧画面の上部。見出し「「react」の Gem」と「669 件」の下に、Gem Index が小さい順(過小評価されている順)で上位 4 件のカードが並び、各カードにオーナーのアバター画像・リポジトリ名・パッケージ名・レジストリ名・star 数・利用パッケージ数・Gem Index の数値が表示されている。

詳細画面と README

star / watcher / fork / open issue と README 本文を同じ画面で読めます。 独立した URL なので、共有もブラウザバックも素直に動きます。

渡すものが何もない

アカウント登録は要りません。広告も、アクセス解析のトラッキングも入れていません。 検索したキーワードをサーバーに保存する仕組みも持っていません (データベースを 1 つも接続していないので、保存しようがない、が正確です)。

  • 登録なし
  • トラッキングなし
  • 保存なし

キーボードだけで完走できる

検索から詳細閲覧までマウスなしで到達できます。Lighthouse の 100 点は 下限として運用しています。それだけでは拾えないコントラストやフォーカスの 見え方は、別のテストで実測しています。

  • WCAG 2.2 AA
  • コントラスト実測
  • フォーカス可視

日本語 / English

画面右上でいつでも切り替えられます。切り替えはリンク遷移なので、 JavaScript を切っていても動きます。

つくり

中身を全部見せています。

使ってもらう相手が開発者なので、「何を根拠に並べているか」「どう作ったか」を 隠さないことを信頼の代わりにしています。

1,062 ケース ユニット・結合 953 / E2E 109。テスト戦略
Accessibility 100 Lighthouse の必須ゲート。下回ったらリリースしない
ADR 16 本 意思決定と却下案をすべて文書化
JavaScript 0 行 このページはページ内 JavaScript も外部 CDN も使っていません
  • Next.js 16 / React Server Components
  • Cloudflare Workers
  • Tailwind CSS v4 + shadcn/ui
  • Vitest + Playwright + axe
  • MIT ライセンス

先に言っておく制約

  • 出てくる 5 件は毎日入れ替わります。ただし元になる被依存データは定期的に取り直した スナップショットなので、GitHub の最新値や詳細画面の表示とは差が出ることがあります (画面に生成時刻を出しています)。
  • 共有の API レート枠で動いています。混み合う時間帯は検索が一時的に失敗することが あります。少し時間をおいてから試してください。
  • Gem Index は「今日の Gem」と「Gem 候補の一覧」(検索結果から開けます)の並び順、 それに検索結果カードの Gem バッジの判定に使っています。キーワード検索の結果自体は GitHub の検索結果をそのまま並べており、バッジが付いても並び順は変わりません。 Gem の印は限られたデータにもとづく参考値なので、優劣の評価ではありません。

FAQ

よくある質問

GitHub の検索と何が違いますか?
キーワード検索の並び順そのものは GitHub の検索結果です。足しているのは stars: のような条件では書けない「使われ方に対して star が少ない」 という観点で、検索結果カードの Gem の印、キーワードなしで開く「今日の Gem」、 検索語から絞り込む「Gem 候補の一覧」の 3 か所に出します。並び順を変えるのは 「今日の Gem」と「Gem 候補の一覧」だけで、キーワード検索結果の並び順は変えません。
検索結果に付いている Gem の印は何ですか?
被依存数のわりに star が少ないリポジトリの目印です。12 のパッケージレジストリから 集めた候補プールに載っているカードに付き、検索結果の並び順は変えません。 限られたデータにもとづく参考値なので、付いていないことが低評価という意味には なりません。
「被依存数」とは何ですか?
そのリポジトリを依存関係に入れている(実際に使っている)パッケージの数です。 gem-hunter は Ecosyste.ms が算出したパーセンタイル順位を使い、star の順位との差を 「過小評価されている度合い」として扱っています。
対応しているエコシステムは何ですか?
キーワード検索は GitHub 全体が対象で、言語もエコシステムも問いません。 一方「今日の Gem」と Gem の印が使う被依存数は、 npm・PyPI・crates.io・RubyGems・Packagist・Go Modules・Maven・CRAN・Hex・CPAN・NuGet・pub.dev の 12 のパッケージレジストリ(約 6.2 万リポジトリ)を対象にしています。
アカウント登録は必要ですか?
不要です。ログインなしで、検索・詳細表示・「今日の Gem」のすべてが使えます。
データはどのくらい新しいですか?
検索結果とリポジトリ詳細はアクセスのたびに GitHub API から取得しています。 「今日の Gem」の被依存データは定期的に取り直したスナップショットで、 画面に生成時刻を表示しています。
なぜ無料なのですか?いつまで使えますか?
個人プロジェクトとして無償で運用しています。現時点で収益化の予定はなく、 広告を入れることもありません。仮に運用を止める場合でも、ソースは MIT ライセンスで GitHub に残るので、自分の環境で動かし続けられます。
広告やトラッキングはありますか?
ありません。アクセス解析のトラッキングも入れていませんし、 検索したキーワードをサーバーに保存する仕組みも持っていません。
自分の環境で動かせますか?
動かせます。MIT ライセンスなので、 リポジトリ を clone して npm ci → npm run dev で起動できます。 環境変数はすべて任意で、1 つも設定しなくても検索と詳細表示は動きます。

探しているのは、たぶん star の下にあります。

キーワードを 1 つ入れるところから。登録も設定もありません。

  • 登録不要
  • 無料
  • 広告・トラッキングなし
  • MIT ライセンス