概要
Git LFS (Large File Storage) は Git の拡張機能で、大きなファイル(音声、動画、画像、モデルファイルなど)をリポジトリ本体から分離して管理する仕組み。
- リポジトリにはポインタファイル(テキスト、~130バイト)だけを保存
- ファイルの実体は別の LFS サーバーに保存される
git cloneやgit pull時に透過的にダウンロードされる- GitHub, GitLab, Bitbucket が標準サポート
LFS サーバーの仕組み
LFS サーバーは Git ホスティングサービスに組み込まれている。Google Drive のような外部ストレージとは異なり、=git push= するだけでポインタはリポジトリへ、実体は LFS サーバーへ自動的に振り分けられる。
- GitHub → GitHub の LFS ストレージに自動アップロード
- GitLab → GitLab の LFS ストレージに自動アップロード
- セルフホストも可能(S3, MinIO などをバックエンドにした LFS サーバーを構築)
ユーザー側は git push / git pull するだけで、LFS サーバーとのやりとりを意識する必要はない。
セットアップ
# インストール(macOS)
brew install git-lfs
# Git LFS を有効化(グローバル、初回のみ)
git lfs install基本的な使い方
トラッキング対象の設定
# 拡張子で指定
git lfs track "*.aif" "*.mp4" "*.safetensors"
# ディレクトリで指定
git lfs track "assets/**"
# .gitattributes が自動生成される → 必ずコミット
git add .gitattributes
git commit -m "Configure Git LFS tracking"通常のワークフロー
LFS 設定後は通常通り git add / git commit / git push するだけ。Git が自動的にポインタファイルへの変換と LFS サーバーへのアップロードを行う。
git add assets/large_video.mp4
git commit -m "Add video"
git push確認コマンド
# トラッキング対象の確認
git lfs track
# LFS 管理下のファイル一覧
git lfs ls-files
# LFS の状態確認
git lfs statusホスティングサービスごとの制限と料金
GitHub
| 項目 | Free | Pro ($4/月) | Team ($4/人/月) | Enterprise |
|---|---|---|---|---|
| LFS ストレージ | 1 GB | 1 GB | 1 GB | 1 GB |
| LFS 帯域(月間) | 1 GB | 1 GB | 1 GB | 1 GB |
| Data Pack($5/月) | +50 GB / +50 GB | 同左 | 同左 | 同左 |
- ファイルサイズ上限: 2 GB/ファイル
- 全プランとも LFS の基本枠は同じ(1 GB)。増量には Data Pack の購入が必要
- 帯域は
git clone/git pull/git lfs fetchで消費される - GitHub の Settings → Billing で使用量を確認可能
GitLab
| 項目 | Free | Premium ($29/人/月) | Ultimate ($99/人/月) |
|---|---|---|---|
| LFS ストレージ | 5 GB(プロジェクト全体) | 50 GB | 250 GB |
| 転送量制限 | 10 GB/月 | 100 GB/月 | 500 GB/月 |
- GitLab はプロジェクト全体のストレージ枠に LFS が含まれる
- GitHub より無料枠が大きい(5 GB vs 1 GB)
- 追加ストレージ: $60/年 で 10 GB 追加
- セルフホスト GitLab なら制限なし
注意点
後から LFS に移行する場合
既にコミット済みの大きなファイルを後から LFS に移行するには git lfs migrate が必要。Git 履歴の書き換えが発生するため、チームで使っている場合は注意。
# 既存の .aif ファイルを LFS に移行(履歴含む)
git lfs migrate import --include="*.aif" --everything
git push --force-with-lease --allクローン時の挙動
git clone すると LFS ファイルも自動ダウンロードされる。帯域を節約したい場合:
# LFS ファイルをダウンロードせずにクローン
GIT_LFS_SKIP_SMUDGE=1 git clone <url>
# 必要なファイルだけ後からダウンロード
git lfs pull --include="*.mp4".gitattributes は必ずコミットする
git lfs track で生成される .gitattributes をコミットし忘れると、他の環境で LFS が効かない。
コスト意識
GitHub の無料枠(1 GB ストレージ / 1 GB 帯域)は小さいため、大量のメディアファイルを扱う場合は Data Pack の購入か、セルフホスト LFS サーバーの検討が必要。GitLab の無料枠(5 GB)のほうが余裕がある。
代替手段との比較
| 手法 | 特徴 | 向いているケース |
|---|---|---|
| Git LFS | Git に統合、透過的 | チーム開発、CI/CD連携 |
| .gitignore + 外部ストレージ | シンプル、コスト無料 | 個人プロジェクト、素材の再現性不要 |
| DVC | データパイプライン対応 | ML プロジェクト、データセット管理 |