Tigris、Git用ファイルシステム抽象化手法を公開──S3互換バケットをGitサーバー化
Goの抽象レイヤー billy と go-git を組み合わせ、Tigris オブジェクトストレージをGitの物理ストレージとして直接マウント・運用する検証結果を公開。
リリース: 2026-06-23 · 読了 3 分記事の要約
1. 核心(What)
- Go言語で書かれたGitプロトコル実装である go-git と、ファイルシステム抽象化ライブラリ billy を組み合わせて検証を実施した。
- Gitリポジトリを構成する4つの要素(Objects、Trees、Commits、Refs)のうち、不変なオブジェクト群を Tigris の追加専用(append-only)モデルにマッピングした。
- 変更頻度の高い Refs(ブランチやタグ)は、軽量なミュータブルポインタとしてオブジェクトストレージ上に保持・更新する設計を採用した。
- Tigris Object Storage はS3互換のAPIを提供しており、今回の検証により外部の物理ディスクなしでのGitホスティングが可能となった。
2. 影響(Why)
- インフラコストの削減: Gitホスティングを自社運用する国内のSaaS開発企業(数10人規模の開発組織)は、高価なブロックストレージから安価なオブジェクトストレージへ移行し、ストレージ単価を約1/5に抑制できる。
- サーバーレスGitの実現: ステートフルなディスク管理が不要になるため、Cloudflare Workers 等のサーバーレス環境と go-git を組み合わせた、完全サーバーレスなGitホスティングの構築が現実解となる。
3. 根拠・詳細(How)
- billyによる抽象化: Go言語のファイルシステム抽象化ライブラリ billy を用いて、Tigris バケットをファイルシステムとして擬態させ、go-git が要求するI/Oインターフェースをすべて実装した。
- 不変オブジェクトの配置: Gitのデータ構造がコンテンツハッシュによる不変オブジェクトで構成されている特性を活かし、オブジェクトストレージの書き換え不可な格納方式と1対1でマッピングした。
4. 展望・課題(Next)
- Refs更新の競合制御: 頻繁に書き換わる Refs の一貫性担保や、複数ユーザーによる同時プッシュ時のロック制御について、オブジェクトストレージ側での排他制御の実装が今後の課題となる。