GitHub Trendingを毎日見てると同じリポジトリが頻繁に出るので、まだ見たことないリポジトリだけ表示されるビューワーを作った

GitHub Trendingでは特定のリポジトリが流行ると数日ずっとTrendingに乗っていたり、有名どころのリポジトリが頻繁にTrendingに乗っていたりします。 トレンドを知りたい、という意味ではそれで問題ないのですが、個人的には「最近流行ったやつの中で自分がまだ見たことないやつ」を見たいなーと思っていたので、見たことあるやつは表示されなくていいやという気持ちがありました。 なので、ビューワーを作りました。

何ができるのか

基本的にはただのGitHub Trendingのビューアーなのですが、以下のような特徴があります。

  • 自分の興味のあるプログラミング言語を保存しておいて、すぐに1ページでまとめて参照できる
  • 一度も表示したことのないリポジトリだけにフィルターできる

大雑把に以下の雰囲気で動作します。

使い方

GUIは現在macOSのみに対応しています。本記事ではGUIについてのみ記載していますが、CLIについてはこちらを参照ください。

インストール

GitHubのリリースページから Treview_darwin_amd64_vX.X.X.zip をダウンロードして解凍してください。 解凍したファイルを実行するとアプリが起動します。

操作

デフォルトでは、GitHub Trendingのリポジトリ一覧が表示されます。

  • ① 言語の選択が可能です。ここで選択した言語は保存され、次回以降は起動時に選択された状態となります。
  • ② 今日のトレンド、今週のトレンド、今月のトレンドが選択できます。
  • ③ Newcomer Onlyのチェックを外すと、過去表示したことのあるリポジトリも全て表示されます。

アンインストール

アプリケーションは実行ファイルを削除すればアンインストール可能です。 いくつかのファイルが ~/.treview に永続化されるので、こちらを削除すると本アプリで作成されるファイルが全て削除できます。

実装について

基本的にGoで書いてlorcaでGUIを作成しています。

lorcaとは

A very small library to build modern HTML5 desktop apps in Go. It uses Chrome browser as a UI layer. Unlike Electron it doesn't bundle Chrome into the app package, but rather reuses the one that is already installed. Lorca establishes a connection to the browser window and allows calling Go code from the UI and manipulating UI from Go in a seamless manner.

HTML、CSS、JavaScriptで書いた画面と、Goでかいたコードを連携するためのライブラリです。 JavaScriptの関数にGoの関数をバインドしたり、GoからJavaScriptのコードを実行することができます。

コードでいうとこの辺りで使用しています。

ui.Bind("updateConfig", updateConfig)

こんな感じでJavaScriptでupdateConfig関数を呼び出した際にGo側のupdateConfigを呼び出したり、

ui.Eval("vm.condition.Langs = " + string(val[:]))

このようにGoからJavaScriptのコードを実行することができます。

現状macOS用にビルドしたバージョンしかリリースしていないのですが、このスクリプトを参考にこのパッケージをビルドすると多分動くと思います。

その他

ほぼ初めてのGo言語でまあまあ雰囲気で書いてるので変な挙動があったりあんまり良くない書き方があったりしたら教えてくれると嬉しいです。

私からは以上です。