概要
Gitは大きなファイルの扱いが苦手で、従来はGit LFSで対応してきた。 Git LFSにはベンダーロックインやコストなどの課題が存在。 近年はGit本体が「パーシャルクローン」や「ラージオブジェクトプロミッサー」を導入。 これらの新機能により、今後はGit LFSが不要になる可能性。 現時点では一部制約が残るが、将来的にはよりシンプルに大容量ファイル管理が可能に。
Gitと大きなファイル問題
- Git は 大きなファイル の管理が苦手なバージョン管理システム
- 大きなファイルは リポジトリ肥大化 や cloneの遅延、 ホスティングコスト増 の原因
- 2015年、 GitHub が Git LFS (Large File Storage)を公開し、大きなファイル問題を回避
- Git LFS 導入により新たな セットアップの手間 や ストレージコスト が発生
- 一方、Git本体も 大きなファイル対応 を静かに進行中
Git LFSの仕組みと課題
- Git LFS は大きなファイルを リポジトリ外部 に保存し、必要な時だけダウンロード
- clone時には 履歴と小さなファイル のみ取得し、大きなファイルは後から取得
- LFS利用には GitHub独自サーバー依存 や 有料プラン の制約
- 50GB のLFSストレージは 年間$40 (GitHub)、Amazon S3なら 年間$13
- LFS導入後の 元に戻す作業 は履歴書き換えが必要で困難
- コラボレーター全員が LFSのセットアップ 必須、未導入だと混乱発生
パーシャルクローンの登場
- 2017年、 Git 本体が partial clone (パーシャルクローン)機能を導入
- --filter オプションで、特定サイズ以上のファイルをclone時に除外可能
- 例:
git clone --filter='blobs:size=100k' <repo>
- 例:
- 必要になったときだけ オンデマンドで大きなファイルを取得
- 小さなチェックアウト、 高速なclone、全履歴保持が可能
- 一部コマンド(git diff, git blame等)は 都度サーバーアクセス が必要
- LFSと同様、 大きなファイルの扱い に最適
パーシャルクローンの効果
- 25MBのPNGファイルを50回保存したリポジトリの例
- 通常clone: 1.3GB/4分
- パーシャルクローン: 49MB/6秒
- クローン速度97%短縮、 ディスク使用量96%削減
- 実際の運用でLFSとほぼ同等の利便性
Git LFSのデメリットまとめ
- ベンダーロックイン :GitHub独自仕様のサーバー依存
- コスト増 :無料枠に制限、商用利用は有料
- 履歴の巻き戻し困難 :LFS導入後の元戻しは事実上不可能
- セットアップコスト :全員がLFS導入必須
ラージオブジェクトプロミッサーの未来
- GitHub や GitLab も大きなファイルに制限(100MB上限)
- LFSは CDNを活用 しサーバーコストを抑制
- 2025年、Git本体に large object promisor (ラージオブジェクトプロミッサー)機能がマージ
- 仕組み:
- 大きなファイルは 専用リモート に自動オフロード
- clone時に Gitクライアントが自動で大きなファイルを取得
- まだ開発途上だが、将来的にはLFS不要な世界へ
- GitHubの100MB制限撤廃 も期待
まとめと今後の展望
- Git本体 が大きなファイル管理を進化させつつある現状
- 現時点では Git LFS が必須だが、将来的には パーシャルクローン や プロミッサー が主流に
- 大きなファイル管理の障壁は 徐々に解消 される見込み
- ただし、Gitで音楽ライブラリや動画を管理するのは 依然として非推奨