巨大なモノレポをAIエージェントやサンドボックスに渡したいとき、最初の git clone がボトルネックになる。数GBのリポジトリを丸ごとダウンロードし終えるまで、エージェントは何もできない。この「起動の待ち時間」を、ArtifactFScloudflare/artifact-fs)は「cloneを待たずにマウントし、ファイル内容は読まれた瞬間に取りに行く」という発想で削りにきた。GitHubのリポジトリ説明はこうだ——「a filesystem driver designed to mount large git repos as quickly as possible, hydrating file contents on-the-fly instead of blocking on the initial clone. It’s ideal for agents, sandboxes, containers and other use-cases where startup time is critical.」。

本記事では、artifactfs の正体・仕組み(遅延ハイドレーション)・インストール・アーキテクチャ・制限までを、公式README/go.mod/連携サンプルの一次情報だけで日本語に整理する。Go製・Apache-2.0・GitHubスター約1,080(2026-08-11時点)で、日本語の解説はまだほぼ存在しない。

ArtifactFSの公式バナー。git-backedなFUSEファイルシステムドライバであることを示す
ArtifactFS=git-backed な FUSE ファイルシステムデーモン。ツリーを即マウントし、blobは背後でオンデマンド取得する(出典: cloudflare/artifact-fs 公式README・Apache-2.0)。
30秒でわかる ArtifactFS(2026年8月時点)
  • 正体:Cloudflare製のGo製FUSEドライバ。gitリポジトリを完全cloneせずにマウントする(Apache-2.0、最新1.0.0-rc.9のベータ)。
  • 何ができる:マウント直後にツリー全体が即見える。ファイル内容(blob)は読まれた瞬間に取得(遅延ハイドレーション)。マニフェスト・ソースを大きなバイナリより優先。
  • 何を解決する:巨大リポジトリの初回clone待ち。起動時間が命のサンドボックス・エージェント・CIのための仕組み。
  • 立ち位置:Cloudflare Artifacts(gitを話すバージョン付きFS)のオプションのFUSEドライバ。ただし任意のgitリポジトリでも動く。
  • 注意:READMEにベータ明記。要 Go 1.25+ と FUSE(macFUSE/fuse3)。`git status` が大規模リポジトリで約7秒などの制約あり。

このプリミティブが誰のためのものかは、エージェント全体像の中で捉えると分かりやすい。まずAIエージェントフレームワーク比較2026|LangGraph・CrewAI・Dify等9種をStar数・実コードで検証で「エージェントに作業環境を与える」層の位置づけを押さえると、ArtifactFSが「フレームワーク」ではなく「エージェントが踏む足場(ファイルシステム)」の側であることが見えてくる。

ArtifactFSとは——巨大gitリポジトリを「cloneせず」即マウントするFUSEドライバ

READMEの定義はこうだ。「ArtifactFS is a Git-backed filesystem daemon (FUSE driver) in Go that mounts repositories as normal working trees while avoiding eager blob downloads.」——gitを裏に持つFUSEファイルシステム・デーモンで、リポジトリを普通のワーキングツリーとしてマウントしつつ、blob(ファイル内容)の先読みダウンロードを避ける。続けて「It exposes the tree quickly, then hydrates file contents on demand. That makes it useful for sandboxes, agents, and other short-lived environments where waiting for a full clone is too expensive.」——ツリーを素早く見せ、内容はオンデマンドで“注水(hydrate)”する。だからclone待ちが高くつく短命環境で有用だ、と。

ここで押さえるべきは、ArtifactFSが単体の魔法ではなく Cloudflare Artifacts という文脈の中の一部品だという点だ。READMEの「What are Cloudflare Artifacts?」節はこう説明する。「Cloudflare Artifacts is a versioned filesystem that speaks git. It is built for agent toolchains, sandboxes, and CI/CD systems that need fast access to code repositories.」——gitを話すバージョン付きファイルシステムで、エージェントのツールチェーン・サンドボックス・CI/CDのために作られている。そして「ArtifactFS is the optional FUSE driver – it lets you mount an Artifact (or any git repo) as a local filesystem without waiting for a full clone.」と、ArtifactFSはそのオプションのFUSEドライバだと位置づける。

ArtifactFSの主張は「速いclone」ではなく「cloneしない」。ツリーは即見せ、blobは読まれるまで取りに行かない。

Cloudflareは「エージェントにファイルシステムを与える」という同じ課題に、複数のプリミティブで別々の角度から取り組んでいる。Cloudflare Computer(Durable Object内の永続仮想FS)が「エッジに小さな作業机を常設する」側だとすれば、cloudflare artifact-fs は「既存の巨大gitリポジトリを待たずに開く」側だ。両者は公式に連携が明記されているわけではないが、担う仕事が対照的で、組み合わせ方を考えるうえで両方を知っておく価値がある。各プリミティブが「何を主眼にするか」を、それぞれの公式説明ベースで並べると位置づけがはっきりする。

プリミティブ 公式の主眼 状態の実体 得意
ArtifactFS 巨大gitリポジトリをcloneせずFUSEマウント リモートgit+ローカルSQLite索引/キャッシュ 既存リポジトリの「開くまで」を速く
Cloudflare Computer エージェント用の永続仮想FS+実行 Durable Object内のSQLite エッジに常設の作業ディレクトリ
Cloudflare Sandbox SDK エッジでサンドボックス実行環境を動かす 隔離コンテナ 隔離されたコード実行そのもの

※上表は各リポジトリ/製品の公式説明を基にした位置づけの整理で、3者が相互に依存すると主張するものではない(ArtifactFSとSandbox SDKの連携のみ公式サンプルで明示されている)。「git マウント」という切り口で見ると、ArtifactFSはこの3者の中で唯一「既存リポジトリを開く速度」に特化している。

読者の3つの問いへの答え
何ができる:巨大gitリポジトリをclone完了を待たずにFUSEマウントし、内容を必要時取得できる。
何を解決する:サンドボックス/エージェント/CIの「起動時のclone待ち」を消す。
何を代替できる:短命環境での「毎回フルcloneして捨てる」運用を、即マウント+遅延取得に置き換えられる(ただしベータ)。

仕組み:ツリーは即表示、blobはオンデマンド(遅延ハイドレーション)

ArtifactFSの肝は「ハイドレーション(blobのダウンロード)が透過的」であることだ。READMEはこう書く。「Hydration (blob downloading) is transparent: the file tree is visible immediately after mount, and reads block only until the requested blob is fetched. The daemon prioritizes code and manifests (package.json, go.mod, README.md) over binary files.」——マウント直後にファイルツリーが見え、読み取りは要求されたblobが取得されるまでの間だけブロックする。デーモンはコードやマニフェスト(package.jsongo.modREADME.md)をバイナリより優先する。

従来のワークフローでは、リポジトリを使うには「まず全部を手元に持ってくる(clone)」ことが暗黙の前提だった。ArtifactFSはこの前提を外し、「まずツリー構造という“目次”だけを持ち、本文(blob)は開いたページから取り寄せる」という図書館的な発想に切り替える。つまり利用者から見た体験はこうなる。

・マウント直後、ls はリポジトリ全体のツリーをほぼ即座に返す(内容はまだ無い)
・あるファイルを cat した瞬間、そのblobだけがネットワーク越しに取得され、その読み取りだけが一瞬待つ
・依存解決に必要な package.json / go.mod などは優先的に注水され、巨大バイナリは後回し
・裏では watcher が HEAD/refs を500msごとにポーリングし、HEADの変化を反映する

flowchart LR R["リモートgitリポジトリ"] -->|"blobless clone
(commits/trees/refsのみ)"| GS["GitStore"] GS --> SNAP["Snapshot
SQLite base_nodes
(全パスを索引)"] SNAP --> FUSE["FUSE Layer
ツリーを即公開"] FUSE --> MNT["マウント先
/tmp/<repo>"] MNT -->|"read(初回)"| HY["Hydrator
優先度キュー
git cat-file --batch"] HY -->|"blobを取得しキャッシュ"| MNT MNT -->|"write"| OV["Overlay
コピーオンライト(whiteoutで削除)"]

この「ツリー即・内容遅延」というモデルが効くのは、実際に読まれるファイルがリポジトリ全体のごく一部に留まるケースだ。数GBのモノレポでも、ある1つのパッケージをビルドしたり、エージェントが数十ファイルを読んで1機能を直したりする作業では、触るファイルは全体の数%に過ぎないことが多い。従来のフルcloneは「使うか分からない残り97%」まで含めて全部ダウンロードし終えるまで待たせるが、ArtifactFSは触れられたものだけを取りに行くので、体感の立ち上がりが「リポジトリの大きさ」ではなく「実際に読む量」に比例するようになる。逆に、全ファイルを満遍なく舐める処理(後述の git status のようなツリー全走査)ではこの前提が崩れ、FUSE越しのオーバーヘッドが表に出る。つまりArtifactFSは「広く浅く全部を読む」用途ではなく、「大きいリポジトリの一部を素早く使い始める」用途に最適化されたトレードオフを取っている。

図の通り、初回の取得は「blobless clone」——リモートが部分clone(partial-clone filtering)に対応していれば、最初はcommits・trees・refsだけを取得し、blobは落とさない。READMEいわく「When the remote advertises partial-clone filtering, only commits, trees, and refs are fetched initially; otherwise Git falls back to downloading blobs eagerly.」(対応していないリモートでは従来通りblobを先読みしてしまう点は要注意)。全パスは git ls-tree -r -t -z で列挙し、サイズは git cat-file --batch-checkGIT_NO_LAZY_FETCH=1)でローカル解決して、SQLiteの base_nodes テーブルに一括投入する。

Cloudflare ArtifactFSのインストールと使い方

要件はシンプルだ。READMEは「Requires Go 1.25+ and a FUSE implementation」とし、FUSE実装として macOS=macFUSE / Linux=fuse3apt install fuse3 ないし dnf install fuse3)を挙げる。インストールは go install 一発。

go install github.com/cloudflare/artifact-fs/cmd/artifact-fs@latest

FUSE実装が未導入なら先に入れておく(ソースからビルドする場合はあわせて go build)。

# Linux(Debian/Ubuntu)
sudo apt install fuse3
# macOS は https://osxfuse.github.io/ から macFUSE を導入

# ソースからビルドする場合
go build -o artifact-fs github.com/cloudflare/artifact-fs/cmd/artifact-fs

使い方は「リポジトリを登録してスナップショットを作る(add-repo)」→「デーモンを起動してFUSEマウントする(daemon)」の2段だ。READMEのクイックスタートがそのまま最短経路になる。

export ARTIFACT_FS_ROOT=/tmp/artifact-fs-test

# 登録・(blobless)clone・初期スナップショット作成
./artifact-fs add-repo \
  --name workers-sdk \
  --remote https://github.com/cloudflare/workers-sdk.git \
  --ref refs/heads/main \
  --mount-root /tmp

# デーモン起動(FUSEマウント。killするまでブロック)
./artifact-fs daemon --root /tmp &
DAEMON_PID=$!

# 使う
ls /tmp/workers-sdk/
cat /tmp/workers-sdk/README.md
git -C /tmp/workers-sdk log --oneline -5

# 後始末
kill $DAEMON_PID

マウント先の中に合成された .git(gitfile)が置かれ、実gitdirを指すので、マウント内で git コマンドがそのまま動く。運用で効くフラグも押さえておきたい。

フラグ / コマンド 役割
--hydration-concurrency N blob取得の並列ワーカー数(既定4)。例: --hydration-concurrency 8
--async 準備を背後で進め、プレースホルダを即マウント
--require-commit <SHA> デプロイで選ばれた正確なリビジョンを検証(40/64桁の完全ID必須)
--depth 1 / --refresh never 浅いソース取得・更新抑制
artifact-fs status --name <name> 対象リポジトリの状態確認
ベータであることを前提に使う
READMEの冒頭に「This is a beta release of ArtifactFS. Your mileage may vary.」と明記されています。最新タグは 1.0.0-rc.9(rc.1〜rc.9の連番で、安定版 1.0.0 は未リリース)。またFUSE経由の全ツリー走査に由来する性能制約として、「git status が5,800エントリ超のリポジトリで約7秒」「git reset のインデックス更新に約6.5秒」が自認されています。これは「速さの売り」ではなく既知の制約なので、検証・短命環境から始めるのが安全です。

アーキテクチャ:setup と daemon の2フェーズ

ArtifactFSは大きく 一度きりのセットアップadd-repo:登録と高速なbloblessクローンの準備)と、常駐デーモン(FUSEでマウントしファイル操作を提供)に分かれる。デーモン側は複数のサブシステムで構成される。

gitstore:リモートからのblobless clone/検証済みソース取得
snapshotgit ls-tree で列挙した全パスを SQLite base_nodes に「世代(generation)」として保持
fusefs:ツリーを即公開するFUSE層。合成 .git gitfileで実gitdirへ橋渡し
hydrator:優先度キュー。読み取り時に永続 git cat-file --batch プロセスでblobを取得しキャッシュへストリーム
overlay:書き込みはコピーオンライトでbaseからoverlay(SQLite+upper/ディレクトリ)へ昇格。削除はwhiteoutで記録
watcher:HEAD/refsを500msごとにポーリングし、HEAD変更を再公開

SQLiteは WAL モードのピュアGo実装(modernc.org/sqlite)を使い、FUSEは github.com/jacobsa/fuse、CLIは github.com/urfave/cli に依存する。準備のタイムアウトは30分、一時的な転送失敗は最大3回まで再試行する、といった運用パラメータもREADMEに明記されている。実装は TigrisFS・gitfs・SlothFS から着想を得たとクレジットされている。

何に使える?sandbox / agents / CI と Sandbox SDK連携

用途はREADMEが繰り返し述べる通り、「起動時間が命の短命環境」だ。具体的には——

サンドボックス/コンテナ:起動のたびにフルcloneせず、即マウントして必要な分だけ取得
AIエージェントのツールチェーン:エージェントが巨大リポジトリを「開いた瞬間」から読み書きできる
CI/CD:ジョブが「デプロイで選ばれた正確なリビジョン」を検証したい場合に --require-commit で固定

CIでの「検証済みソース」運用も具体的だ。ジョブが「デプロイで実際に選ばれたコミット」を必ず読みたい場合、--require-commit "$DEPLOY_SHA"(40桁か64桁の完全オブジェクトID)を指定すると、そのリビジョンだけをマウント対象に固定できる。--depth 1--refresh never と組み合わせれば、更新を追わない浅い一回きりのマウントになり、CIランナーの立ち上げを軽くできる。書き込みはコピーオンライト(overlay)で扱われ、baseのファイルは編集時にupperへ昇格、削除はwhiteoutで記録されるため、エージェントがマウント内のコードを編集しても元リポジトリを汚さない——この点は、コードを書き換えながら試行錯誤するエージェント用途と相性がよい。

とりわけ Cloudflare Sandbox SDK との連携 は公式サンプルとして用意されている(examples/cloudflare-sandbox-sdk)。Workerが隔離コンテナを起動し、公開gitリポジトリをコンテナ内にマウントして、ArtifactFSがFUSEで内容をオンデマンド取得する構成だ。同じく隔離実行を扱うCubeSandbox(60ms起動のmicroVMでエージェントを安全実行)が「実行環境そのものを速く立てる」アプローチなら、ArtifactFSは「その環境に載せるコード(gitツリー)を速く見せる」レイヤーであり、レイヤーが異なる。

コードを自律的に編集・実行するOpenHandsのようなエージェントでも、対象が数GB級のモノレポなら「最初のcloneで詰まる」問題は共通だ。ArtifactFSはその足場を「clone待ちゼロ」で用意する部品として噛み合う(ただし前述の通りベータで、FUSE全走査系の操作は遅い点に留意)。

制限と注意点

導入前に、READMEが率直に挙げる制約を押さえておく。

ベータ:安定版1.0.0は未リリース(最新 1.0.0-rc.9)。破壊的変更があり得る
FUSE全走査が遅いgit status ~7秒(5,800エントリ超)、git reset ~6.5秒。ツリー全体を舐める操作は不利
要件:Go 1.25+ と FUSE 実装(macOS=macFUSE / Linux=fuse3)。WindowsネイティブFUSEはREADMEに記載なし
partial-clone非対応リモート:blobを先読みしてしまい、「cloneしない」利点が薄れる
速度の“倍率”は非公表:起動の速さは定性的な主張で、公式に「N倍速」といった数値は無い

まとめ
ArtifactFS(`cloudflare/artifact-fs`)は、巨大gitリポジトリをcloneし終える前にFUSEでマウントし、ファイル内容を読まれた瞬間に取得するGo製ドライバだ。「ツリーは即・blobは遅延」という一点で、サンドボックス・エージェント・CIの起動待ちを削る。Cloudflare Artifacts のオプション部品でありながら任意のgitリポジトリでも動き、Sandbox SDK連携も公式サンプルで示されている。ただし現時点は明確にベータで、FUSE全走査系の操作は遅い。まずは `go install` して、手元の重いリポジトリを `add-repo`→`daemon` でマウントし、「clone待ちゼロ」の体験を確かめるところから始めるのがよい。

参照ソース

cloudflare/artifact-fs(公式リポジトリ・README) — 定義・遅延ハイドレーション・アーキテクチャ・制限・要件の一次情報
Cloudflare Artifacts(製品ページ) — 「gitを話すバージョン付きファイルシステム」という上位文脈
artifact-fs examples/cloudflare-sandbox-sdk(連携サンプル) — Sandbox SDK上でのマウント構成
artifact-fs go.mod(依存関係) — Go 1.25・jacobsa/fuse・modernc.org/sqlite 等の裏取り