reposnap

ディレクトリ配下のgitリポジトリを再帰的にスキャンして、一覧表にするCLIツールを作った。

リポジトリ: https://github.com/misebox/reposnap

Rust製。

作った理由

手元のリポジトリが増えてきて、何がどこにあるのか把握しきれなくなった。

たまに、未コミットの差分が残っていたり、マージしてないブランチがあったりするのを忘れて放置してしまうことがある。

その状況をまとめて一覧したいなと思って、ツールにした。

出力

reposnap <dir> で、配下のリポジトリを表にして出す。

┌──────────────┬────────┬─────────────┬─────────┬───────┬────────┬───────────────────────────────────────────────────────────────────┐
│ NAME         ┆ BRANCH ┆ LAST COMMIT ┆ DIRTY   ┆ AHEAD ┆ SCALE  ┆ TAGS                                                              │
│              ┆        ┆ DATE        ┆         ┆       ┆        ┆                                                                   │
╞══════════════╪════════╪═════════════╪═════════╪═══════╪════════╪═══════════════════════════════════════════════════════════════════╡
│ bufferbase   ┆ main   ┆ 2025-12-08  ┆ 1f+24-0 ┆ 0     ┆ small  ┆ bun,javascript,typescript                                         │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ flipid       ┆ main   ┆ 2026-03-31  ┆ -       ┆ 0     ┆ small  ┆ bun,github-actions,html,javascript,oxlint,typescript,vitest       │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ homebrew-tap ┆ main   ┆ 2026-04-27  ┆ -       ┆ 0     ┆ small  ┆ github-actions,ruby,shell                                         │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ oadig        ┆ main   ┆ 2026-04-24  ┆ -       ┆ 0     ┆ medium ┆ github-actions,rust,shell                                         │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ reposnap     ┆ main   ┆ 2026-05-12  ┆ -       ┆ 0     ┆ medium ┆ github-actions,rust,shell                                         │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ soluid       ┆ main   ┆ 2026-05-07  ┆ -       ┆ 0     ┆ large  ┆ bun,css,html,javascript,oxlint,shell,solid,typescript,vite,vitest │
└──────────────┴────────┴─────────────┴─────────┴───────┴────────┴───────────────────────────────────────────────────────────────────┘
  • DIRTY 未コミットの変更(1f+24-0 のように、変更ファイル数 + 追加行 - 削除行)
  • AHEAD push していないコミット数
  • SCALE ざっくりのリポジトリ規模
  • TAGS 検出した技術スタック

ascii のほかに json / csv / tsv / markdown でも出せる。

--filter で条件を絞ったり、--sort で並べ替えたりできる。

デフォルトで出る列は一部だけで、--fields で他の列も追加できる。description、ローカルのパス、GitHubのURL、open な issue / PR の数、といった列も持っている。@minimal @activity @github みたいなまとめて指定するエイリアスもある。

--only-dirty--only-unpushed みたいなショートカットもある。

GitHubの情報

サッと表示したいんだけど、GitHubのdescriptionや、そもそもGitHubにリポジトリが存在するのか、みたいなことも確認したかったので、GitHub APIを使うことにした。

ただ、こんなツールを使うためだけにトークンを取得するのも面倒なので、環境変数にトークンがセットしてあればその情報も表示する、無ければGitHub関連の列は空、という方針にした。

インストール

brew install misebox/tap/reposnap
# または
cargo install reposnap

感想

ちょっと一覧表示が遅いのが気になる。

今度、このツールの出力を使ってダッシュボードを作りたい。cron で1時間に1回くらい実行しておけば十分そう。

余談: Homebrew tap と自動更新

Homebrewのtapを作って、brew install misebox/tap/reposnap でインストールできるようにした。

ついでに、GitHub Actionsで、mainにpushしたら homebrew-tap 側のFormulaを自動で更新するようにした。

リリースのたびに手でFormulaを書き換えるのは面倒なので。