最近Github のレポジトリが増えてきたので、このタイミングで整理してみる
Private レポジトリの制限も随分前に解除されたし、別にレポジトリの整理なんてする必要がないと言われればそうなのだが、部屋が広いからといって要らないものをたくさん置いて良いわけではないのと同様に、レポジトリも使わないレポジトリは積極的に削除した方が良いというのが私の考え
まず最初に使ったのは Github CLI
インストールするとターミナルで gh
コマンドが使えるようになるのでこれで色々できる
まずは現在持っているレポジトリの総数を数えてみる
gh repo list -L 1000 | wc -l
デフォルトで30個までしかレポジトリをとってこないので、-L
option をつけて十分に大きな数(1000など)を指定しないいけない
このうち、今年に入って全く更新のないレポジトリをリストアップしたかったのだがここで問題が発生した
gh repo list
にはレポジトリを更新日時でソートするオプションがないのだ
またソートできたとしても、今回のように数十個単位でレポジトリを削除する場合、そのレポジトリごとに gh
コマンドを実行して削除するのはめんどくさい(私が単にシェルスクリプトが苦手なだけ)
どうしようかと思っていたところ、こんな記事を見つけたので今回は R でやってみることにした
基本的にはこの記事に書かれている通り、Github の PAT (Personal Access Token) を用意して R の gh パッケージをインストールすれば良いだけなのだが、レポジトリをとってくるところは少し工夫が必要だった
元記事だと public かつ fork されたレポジトリのみを対象としているのでエンドポイントが GET /users/:owner/repos
になっているのだが、private なレポジトリも対象としたい場合はそうはいかない
そこで私の方で書き換えたものがこちら
my_repos = gh("GET /user/repos", visibility = "all", affiliation = "owner", before = "2022-12-01T", sort = "updated", page = 1, per_page = 100)
公式のドキュメントによれば GET /user/repos
にアクセスすることによって PAT の認証ユーザーのレポジトリを private なものも含めて全て持ってこれる
また before や sort のオプションも提供されているので、ここに必要な値を入れてやれば、更新日時でソートしたりフィルタリングをかけたりすることができる
ここで対象のレポジトリを抽出できたら削除する部分は一緒
purrr::map(to_delete, ~gh("DELETE /repos/:owner/:repo", owner = my_username, repo = .x))
まさか Github のレポジトリを削除するときに purrr
パッケージが活躍するとは思わなかった