GitHubはリポジトリが増えてきたときにフォルダ分けする方法がないのが不便ですよね。。。
2022 年から要望が出ていて 400 以上の賛成が付いていますが、まだ実装されていません。
GitLabには便利なフォルダ機能があるのですが、さすがにそのためだけにお引越しするのも辛い。
リポジトリの数が増えてきて、ネーミングルールみたいなもので解決するのがしんどくなってきたので、リポジトリ一覧に開閉できるグループを付ける Chrome 拡張を作りました。
Repository Groups for GitHub(無料・オープンソース)
- Chrome ウェブストア: https://chromewebstore.google.com/detail/gmgodfjbahmhgnpmijnifcibicpdelop
- ソースコード(MIT): https://github.com/hash7ff/github-repository-groups
基本機能
- GitHub の一覧の見た目のまま、グループを開いたり閉じたりできる
- どのグループにも入れていないリポジトリは Ungrouped にまとまる
- GitHub の検索・Type・Language・Sort は、そのままグループ表示にも効く
- Original を押せば、いつでも GitHub の元の一覧に戻る(重要)
作るときに気にしたこと
実は似たことをする拡張はいくつかありました。ですが調べてみると、それぞれ惜しいところがありました。
- 見た目は理想に近いが、グループ分けを別の 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 を使う方を選びました。
求める権限はメタデータの読み取りだけです。コードは読めず、何も変更できません。対象は「すべてのリポジトリ」か「選んだリポジトリだけ」から選べます。
4. グループを作る
リポジトリ一覧の New group で名前を付けて、入れるリポジトリを選びます。空のグループを先に作っておくこともできます。
あとから各リポジトリの Move to… で移せます。
グループの「…」から、まとめて追加・名前の変更・削除ができます。グループを削除しても、リポジトリは消えません(Ungrouped に戻るだけです)。
やめるとき
やめ方も書いておきます。
- 拡張の設定画面で Delete all groups…(Chrome の同期先からも消えます)
- 同じ画面で Sign out(ブラウザから認証情報が消えます)
- GitHub の Settings → Applications で、アプリの権限を外す
- Installed GitHub Apps → Repository Groups → Configure → Uninstall
- Authorized GitHub Apps → Repository Groups → Revoke
-
chrome://extensionsで拡張を削除
同じ手順は拡張の設定画面にも書いてあります。
おわりに
正直GitHub にグループ機能が来るまでのつなぎですが、、、早く公式来てくれ











