Crab (サーバーレスな大容量ファイル向けGit)

MLモデル・データセット・メディア・ゲームアセット・ビルド成果物といった大きなファイルを、Gitのblobに入れずに自分が管理するオブジェクトストレージへ置き、Git側にはポインタファイルだけを残すRust製CLI。開発元はBeyondnote Technology Inc、Apache-2.0。

Git LFSと目的は同じだが、LFSがホストされたLFSエンドポイント(GitHubの従量課金や自前サーバー)を必要とするのに対し、Crabはサーバーを立てずにS3/GCS/Azure Blobへ直接書き込む。「Own your storage」を掲げている。

同名のCrabLang(2023年のRustのフォーク)とは無関係の別プロジェクト。

仕組み

Gitへの統合点は2つだけ。

  1. フィルタドライバ — 追跡対象ファイルをclean/smudgeでポインタblobに変換する
  2. git-remote-crabcrab://リモート用のremote helper。Gitオブジェクトと実体を転送する

つまりclone/branch/commit/merge/pushといった普段のGitコマンドはそのまま使える。

実体はXetプロトコル(Hugging Faceが使っているものと同系統)でチャンク分割され、同一チャンクは一度しかアップロードされない。分割はGearhashによるcontent-defined chunking(CDC)。ここがファイル丸ごとを送るGit LFSとの一番の差で、巨大な.safetensorsを少し書き換えただけなら差分チャンクだけの転送で済む。

flowchart LR WT[ワーキングツリー<br/>巨大ファイル] -->|clean filter| P[ポインタblob] P --> G[(Git履歴)] WT -->|CDCでチャンク分割| C[重複排除済みチャンク] C --> S[(S3 / GCS / Azure Blob<br/>自前バケット)] G -->|smudge filter| WT S --> WT

使い方

brew install crabbuild/tap/crab
# または curl -fsSL https://crab.build/install.sh | bash

crab configure s3://my-bucket/my-project   # gs:// / azure:// も指定できる
crab track '*.safetensors'
crab ship . -m "Initial commit"

日常操作はcrab clone(遅延クローン)・crab pushcrab pullcrab status

特徴的なのがhydrate / dehydrate

crab hydrate '*.safetensors'   # 必要なファイルだけ実体化する
crab dehydrate --all           # リモートを消さずにローカルディスクを解放する

設定ファイル

コミットするcrab.tomlと、マシン固有でコミットしない.crab/local.tomlに分かれている。

# crab.toml
[remote]
url = "crab://my-bucket/my-project"

[auth]
storage_provider = "s3"

[track]
patterns = ["*.safetensors", "*.bin", "datasets/**"]

[hydrate]
default = "lazy"

.crab/local.tomlにはAWSプロファイル・キャッシュパス・チューニング値が入る。

対応ストレージ

バックエンド 指定 認証
Amazon S3 s3://bucket/repo AWSプロファイル / SSO / ロール
S3互換 crab://bucket/repo --provider s3 環境変数のキー + エンドポイント
Google Cloud Storage gs://bucket/repo ADC または GOOGLE_APPLICATION_CREDENTIALS
Azure Blob azure://container/repo Identity / 接続文字列 / SAS

その他の機能

  • crab mountFUSE/NFSによる仮想ファイルシステム
  • crab run / crab repro / crab exp — DVC的なワークフロー実行・再現・実験管理
  • crab lfs — Git LFSとの相互運用
  • crab gc / crab fsck / crab compact — メンテナンス
  • --json / --jsonl — 自動化向けの構造化出力

大規模チーム向けにはオプションのCrab Auth ServiceとCrab Cache Serviceがある。

似た発想のもの

サーバーレスにS3をGitリモートとして使う先行例にgit-remote-s3(AWS Labs)がある。Crabはそれに加えてチャンク単位の重複排除と遅延ハイドレートまで持っている点で、Git LFSよりDVC/Xet寄りの機能セットになっている。

出典

#git #rust #aws #data-engineering #cli

作成日時: 2026-09-02 11:37 / 更新日時: 2026-09-02 11:37