【OSS にプルリク送ってみた】 GitHub Trend を表示するコマンド「ght」の修正

GitHub Trend を表示するコマンドを作ろうと思い、既に作られていないか探したら「ght」というものがありました。
試しに使って見たら動かなかったので「ght」を修正することにしました。

GitHub Trend とは

GitHubリポジトリのトレンドを言語、期間(日、週、月)別にみることができるページです。

f:id:Doarakko:20191130122546p:plain

ght とは

Go 言語で作られた GitHub Trend を表示するコマンドです。
GitHub Trend を言語別に取得でき、実行するとリポジトリの URL と説明文がコマンドライン上に表示されます。

  • インストール
$ go get github.com/mattn/ght
  • 実行(修正後)

f:id:Doarakko:20191130122657p:plain

問題点

何も表示されない。

f:id:Doarakko:20191130122733p:plain

修正手順

1. Issues・Pull requests を確認

Issues・Pull requests を見て他の方がすでにバグの報告をしていないか、修正中かどうか確認します。
今回は特にありませんでした。

OSS によっては Issue を立てたりプルリクエストを送る際のルールがあるので注意します。
README.mdCONTRIBUTING.md に記載されていることが多いです。

上記ファイルはもちろんですが、他の方の Issue やプルリクエストも参考にします。

2. リポジトリをフォーク

f:id:Doarakko:20191130122814p:plain

Fork を押すと自分のリポジトリ一覧にフォークしたリポジトリのコピーができます。

3. フォークしたリポジトリをローカルに落とす

$ git clone https://github.com/<your account>/ght

4. ソースを読んで原因調査

以下 3 つから、GitHub Trend ページの HTML が変更されたことによりデータをうまく取得できていないことが原因ではないかと予想しました。

  • ght コマンド実行時にエラーが表示されない
    • 使用しているライブラリのバグではない可能性が高い
  • ght の最終更新が 4 年前
  • プログラム上で HTML のタグやクラスを指定している
    • API を叩いてる訳ではない
doc.Find(".repo-list-item").Each(func(_ int, s *goquery.Selection) {
    if href, ok := s.Find(".repo-list-name a").First().Attr("href"); ok {

予想を元に Chromeデベロッパーツールを使って .repo-list-item を検索したところヒットしませんでした。

f:id:Doarakko:20191130122855p:plain

原因が特定できたので、現在の GitHub Trend ページにあわせてプログラムを修正します。

5. 修正

GitHub Trend の HTML はそこまで変更されていなかったため、タグ・クラスを現在のものに変えるだけで OK でした。

f:id:Doarakko:20191130122913p:plain

ローカルで試しに実行してきちんと動作することを確認します。

f:id:Doarakko:20191130122928p:plain

6. 自分のリポジトリに反映

$ git add main.go
$ git commit -m 'fix selector' main.go
$ git push

7. プルリクエス

修正内容を本家 ght に反映してくれるようリクエストします。

f:id:Doarakko:20191130122945p:plain

動かなかった原因を書いて修正前後のスクショを貼りました。
開発者は日本人の方ですが GitHub は海外の方も見るので英語で書きました。

8. マージ

f:id:Doarakko:20191130123007p:plain

開発者の方がマージすると本家 ght に反映されます。

f:id:Doarakko:20191130122657p:plain

動いたー!

おわりに

Issue を立てたりプルリクエストを送ることで、その OSS を使う多くのユーザの助けになります。
それはとても意義があり大切なことです。

ただ、私は単純に自分のプルリクエストがマージされるのがすごく嬉しいです。
よくわからないけどすごく嬉しいです。

まだまだタイポなどのちょっとしたことしかできていません。
これからはより OSS 開発に力を入れていきます。