こんにちは。現場で泥臭く、しかし誰よりもスマートにコードを管理したいと願うあなたへ。
Gitは「歴史を記録する」素晴らしいツールです。しかし、数年、数十年と開発を続けると、リポジトリは肥大化し、かつての「負の遺産」――例えば、うっかりコミットしてしまった数GBのバイナリデータや、今はもう使われていない巨大なライブラリ群――が、あなたのクローン速度を鈍らせ、ストレージを圧迫し始めます。
今日は、そんな「重すぎるGitリポジトリ」を外科手術のようにスリム化する魔法のツール、『git-filter-repo』について解説します。
—
なぜ `git-filter-repo` なのか?
かつて、Gitの歴史を改変するには `git filter-branch` というコマンドが使われていました。しかし、これは「遅い」「複雑」「壊れやすい」という三重苦を抱えていました。
`git-filter-repo` は、その名の通りリポジトリを「フィルタリング(抽出・除外)」するための専門ツールです。驚異的な高速動作と、安全性を重視した設計で、現在のDevOps界隈における「リポジトリ大掃除」のデファクトスタンダードとなっています。
1. 導入:まずは環境を整える
`git-filter-repo` はPythonで書かれています。まずはインストールしましょう。
macOSの場合
brew install git-filter-repo
Python環境がある場合(pip)
pip install git-filter-repo
これだけで準備は完了です。
—
2. 【実務編】リポジトリ軽量化の3大テクニック
ここからは、実際に現場でよくある「困った」を解決する手順を紹介します。
① 特定の巨大フォルダを歴史から抹消する
「過去の資産として置いてあった巨大な学習データフォルダ(`data/`)が、リポジトリを重くしている」というケースです。
1. まずはリポジトリのバックアップを絶対に取ること!
2. 以下のコマンドで該当フォルダを完全に削除
git filter-repo –path data/ –invert-paths
- `–path data/`: 操作対象を `data/` フォルダに指定。
- `–invert-paths`: 「指定したパス以外を残す(=指定したパスを消す)」という反転オプション。
② 過去のコミットから特定の拡張子(バイナリ)を一掃する
「`.zip` や `.exe` が混入していて、リポジトリが悲鳴を上げている」というケース。
すべてのコミットの中から、.zipファイルを検索して消し去る
git filter-repo –path-glob ‘.zip’ –invert-paths
これを行うと、リポジトリのサイズが劇的に減ります。※注意:この操作はコミットハッシュをすべて書き換えるため、チーム全員の合意の上で行ってください。
③ サブディレクトリを新しいリポジトリとして切り出す
「マイクロサービス化のために、モノリスリポジトリの一部を独立したリポジトリにしたい」というケース。
‘services/auth-api’ フォルダだけを残して、それ以外をすべて削除
git filter-repo –path services/auth-api/
このコマンドを実行すると、`services/auth-api/` がルートディレクトリに配置された、クリーンな独立リポジトリが出来上がります。
—
3. 【重要】成功のための「黄金のルール」
このツールを使う際、これだけは守ってください。
1. 「破壊的操作」であることを理解する:
`git-filter-repo` は歴史を書き換えます。実行した瞬間、既存のコミットIDはすべて変わります。チーム開発でこれを行う場合は、「全員が作業を停止し、古いリポジトリを破棄して、書き換え後のリポジトリを再クローンする」という運用フローを徹底してください。
2. 実行前のバックアップ:
必ず `git clone –mirror` で丸ごとバックアップを取ってから作業してください。何かあっても、そこからやり直せばいいという安心感が、大胆な操作を可能にします。
3. 最後にガベージコレクション:
操作後は、Git内部に不要なゴミデータが残っています。以下のコマンドで掃除して完了です。
git gc –prune=now –aggressive
—
最後に:なぜこれを学ぶべきなのか
リポジトリが軽いということは、単にストレージが節約できるという話ではありません。CI/CDのパイプラインが爆速になり、開発者のクローン待ち時間が減り、開発サイクルそのものが加速します。
「過去を整理する」という行為は、未来の自分たちへの最大のプレゼントです。
最初は少し怖く感じるかもしれませんが、一度この快適さを知ってしまえば、もう重いリポジトリを放置するなんてことはできなくなるはずです。さあ、あなたのリポジトリの「断捨離」、今日から始めてみませんか?
何か詰まったら、いつでも聞いてください。あなたのコード管理が、より軽やかでストレスフリーなものになることを応援しています。