この記事は クソアプリ Advent Calendar 2021 の 5 日目の記事です 🎄✨
2019 年に参加してから 2 年ぶりの参加です。

作ったもの

GitHub 徘徊、英語ばっかりで辛い…。
面白いリポジトリはないかなーっと、ぼんやり眺めたいだけなのに、何でこんなに頭を使わないといけないの。
そんな日本語しか読みたくない人ための GitHub ランキングを作りました。
具体的には、Description と Readme 両方に日本語がある程度書かれているリポジトリを GitHub スター数で並べ替えたランキングです。

早速こちらからアクセス!
https://japan-github-ranking.zzzmisa.com

仕組み

システム構成

データの取得・整形・書き込みは全て IBM Cloud Functions でやっています。
毎日定期的に実行するのに FaaS が使いたかったのですが、メジャーと思われる AWS や GCP は従量課金の青天井なのでやめておきました。自分の性格を考えたら、やらかす未来しか見えない。

ランキングデータ

正確にランキングデータを出すなら、GitHub に登録されている全リポジトリをスター数で並び替えて、上から順に日本語で書かれているかどうかを確認していく必要があります。
日本語リポジトリの場合、1000 スターでもランキング上位ですが、GitHub 全体で見ると 1000 スター以上のリポジトリは 2021 年 11 月現在 3 万 2 千件以上もあります。
これを 1 件ずつ確認していくのは、できなくはないですが大変そうです。やりたくない。
GitHub Search API の利用制限は 1 分間に 30 リクエスト、Graph API は 1 時間に 5000 ポイントです。これらを考えつつ、IBM Cloud Functions のタイムアウト最大 10 分以内で処理を終わらせたいところです(複数のアクションを繋げれば 10 分以上の処理もできるけど面倒くさい)。

そこで今回は最初に Search API で簡易的にデータをふるいにかけることにしました。
正確なランキングでは無くなりますが、クソアプリなので良しとします。
具体的には 「の」や「を」 など日本語リポジトリに出てきそうな文字を検索キーワードに入れてデータをふるいにかけました。

From GitHub
From GitHub

ただこの方法だと、中国語圏で「的」や「之」の代わりに使われている「の」や、顔文字「(のワの)ノ」なども含まれてしまいます。
そこで本当に日本語で書かれているかは、ひらがな or カタカナが一定以上含まれるかも見て改めて判断しました。
なお、世の中には言語判定 API のような上等なものもありましたが、日本語の場合そこまでは必要ないと判断しました。

これらの工夫によって、50 位までのランキングを出すまでに掛かる時間は約 2 分に収まりました。

大まかな処理の流れはこんな感じですが、細かい部分はソース参照です。
簡易的に取得したデータで作ったランキングですが、感覚値には合っているので、ちょこっと眺める分には使えるのではないでしょうか。

まとめ

データは毎日更新されるのでブックマークもよろしくです!
https://japan-github-ranking.zzzmisa.com


【2021 年 12 月 8 日追記】
参考までに、日本語に限らず全リポジトリのランキングはこちらで確認できますよ。