0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub のリポジトリ一覧をグループ化する Chrome 拡張を作った

0
Posted at

GitHubはリポジトリが増えてきたときにフォルダ分けする方法がないのが不便ですよね。。。

2022 年から要望が出ていて 400 以上の賛成が付いていますが、まだ実装されていません。

GitLabには便利なフォルダ機能があるのですが、さすがにそのためだけにお引越しするのも辛い。

リポジトリの数が増えてきて、ネーミングルールみたいなもので解決するのがしんどくなってきたので、リポジトリ一覧に開閉できるグループを付ける Chrome 拡張を作りました。

グループを開いたり閉じたりしている様子

Repository Groups for GitHub(無料・オープンソース)

基本機能

  • GitHub の一覧の見た目のまま、グループを開いたり閉じたりできる
  • どのグループにも入れていないリポジトリは Ungrouped にまとまる
  • GitHub の検索・Type・Language・Sort は、そのままグループ表示にも効く
  • Original を押せば、いつでも GitHub の元の一覧に戻る(重要)

Grouped と Original を切り替えている様子

作るときに気にしたこと

実は似たことをする拡張はいくつかありました。ですが調べてみると、それぞれ惜しいところがありました。

  • 見た目は理想に近いが、グループ分けを別の PC に引き継げない(PC買い替え時に困る)
  • 同期はできるが、フォルダ式ではなくタブで切り替える見た目(これは好みの問題です)
  • GitHub の画面を読み取って動くので、GitHub が画面を変えたら突然使えなくなるかもしれないのが嫌だ(絶対いつか起きそう)
  • グループとリポジトリ名を開発者のサーバーに預ける方式もある(外部にデータ送信したくない)

特に、ある日突然使えなくなるのが一番ストレスなので、この拡張は次の形にしました。

この拡張
見た目 なるべくGitHub の一覧のまま、開閉できるグループ
グループの保存先 自分のブラウザ(Chrome の同期で別の PC にも)
リポジトリ一覧の取り方 GitHub の公式 API(画面は読まない)
GitHub への書き込み しない
開発者のサーバー なし

その代わり、GitHub App のインストールが必要です。
画面を読まない代わりにAPIを使うために必要だからです。
これは使い始めに立ちはだかるハードルになるのはわかりきってるのでとても迷ったのですが、画面のレイアウト変更に弱いほうが怖かったのでこの方式にしました。

仕組み

構成図

データを置いている場所は 3 つだけです。

  • 認証情報: この PC のブラウザの中(chrome.storage.local)。GitHub のページ側からは読めません
  • グループ: Chrome の同期領域(chrome.storage.sync)。持っているのはグループ名とリポジトリの ID だけです
  • 一覧の一時保存: ブラウザを閉じると消える領域(chrome.storage.session)

GitHub の API に送るのは GET だけです(/user、/user/repos、/orgs/{org}/repos、/user/installations の 4 つ)。ほかに通信するのは、サインインとトークン更新のときの GitHub のログイン用 URL だけです。書き込む処理はコードに存在しません。解析やトラッキングもありません。

使い方

1. ストアから追加する

Chrome ウェブストアで「Chrome に追加」を押します。

2. GitHub でサインインする

拡張の設定画面で Sign in with GitHub を押すと、短いコードが出ます。github.com/login/device でコードを入れて承認します。

サインイン用のコード

3. GitHub App をインストールする

GitHub は、private リポジトリの一覧を、インストールされたアプリにしか渡しません。画面を読み取る方式ならこの手順は要りませんが、GitHub の画面が変わると壊れます。長く安心して使えることを優先して、公式 API を使う方を選びました。

求める権限はメタデータの読み取りだけです。コードは読めず、何も変更できません。対象は「すべてのリポジトリ」か「選んだリポジトリだけ」から選べます。

権限は Read access to metadata だけ

4. グループを作る

リポジトリ一覧の New group で名前を付けて、入れるリポジトリを選びます。空のグループを先に作っておくこともできます。

New group

あとから各リポジトリの Move to… で移せます。

Move to…

グループの「…」から、まとめて追加・名前の変更・削除ができます。グループを削除しても、リポジトリは消えません(Ungrouped に戻るだけです)。

グループのメニュー

やめるとき

やめ方も書いておきます。

  1. 拡張の設定画面で Delete all groups…(Chrome の同期先からも消えます)
  2. 同じ画面で Sign out(ブラウザから認証情報が消えます)
  3. GitHub の Settings → Applications で、アプリの権限を外す
    • Installed GitHub Apps → Repository Groups → Configure → Uninstall
    • Authorized GitHub Apps → Repository Groups → Revoke
  4. chrome://extensions で拡張を削除

Installed GitHub Apps

Configure の一番下にある Uninstall

Authorized GitHub Apps の Revoke

同じ手順は拡張の設定画面にも書いてあります。

設定画面の「Stop using the extension」

おわりに

正直GitHub にグループ機能が来るまでのつなぎですが、、、早く公式来てくれ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?