ハクソク

世界を動かす技術を、日本語で。

Artifacts: Gitに対応したバージョン管理ストレージ

概要

  • Agentsの登場により、ソース管理やファイルシステムの概念が変化
  • Artifactsはエージェント向けに設計された分散・バージョン管理ファイルシステム
  • Git互換で、REST APIやWorkers APIも提供
  • 大規模・高速なリポジトリ管理と状態永続化を実現
  • ArtifactFSで大規模リポジトリの即時マウントも可能

エージェント時代の新しいソース管理:「Artifacts」とは

  • Agentsの普及により、ソース管理・ファイルシステム・状態永続化の要求が激増
  • 今後5年間で、これまでの歴史を上回る量のコード生成予測
  • 従来のソース管理プラットフォームは人間向け設計で、エージェントの10倍以上の処理量に非対応
  • 新たな基盤として「分散・バージョン管理ファイルシステム」の必要性
  • Artifactsはエージェントに最適化されたGit互換のバージョン管理ファイルシステム
    • プログラムからリポジトリ作成、エージェントやサンドボックスごとに独立したリポジトリ割当可能
    • REST APIやWorkers API経由でリポジトリ作成・認証情報発行・コミット操作
    • 通常のGitクライアントからも利用可能

Artifactsの基本機能とユースケース

  • 各エージェントセッションやサンドボックスごとに独立したリポジトリ割当
  • 10,000個以上のフォークも即時作成可能
  • 既存Gitリポジトリからのインポートや、独立した作業・変更のプッシュも容易
  • Gitクライアント非対応環境(サーバレス関数等)でもREST APIやTypeScript SDKで操作可能
  • 状態永続化セッション履歴管理など、ソース管理以外の用途にも最適
  • セッション状態や履歴をリポジトリ単位で保存・共有・タイムトラベル可能
  • 特定時点からのフォークで、他者との共同作業やデバッグも容易

Artifactsの技術基盤

  • Cloudflare Durable Objects上で構築
    • 数百万単位の独立・状態保持型インスタンスを即時生成可能
  • Gitサーバ実装をZigで独自開発、WASMにコンパイル
    • SHA-1、zlib、デルタエンコード、パック解析、GitスマートHTTPプロトコルを完全実装
    • メモリ管理の柔軟性やWASM/ネイティブ両対応のビルドシステム
  • Artifactsの内部構造
    • ファイルはDurable ObjectのSQLite DBに保存
    • 大型Gitオブジェクトは分割保存
    • 認証トークン管理はKVストアで実現
    • fetch/push時はWASM出力をストリーミングで返却
    • Gitプロトコルv1/v2、shallow clone、ls-refs、インクリメンタルfetch等の機能対応
    • git-notes対応で、メタデータやプロンプト履歴の保存も可能

大規模リポジトリへの対応:ArtifactFS

  • ArtifactFSは大規模Gitリポジトリを即時マウント可能なファイルシステムドライバ
    • サンドボックスやエージェント起動時のクローン時間を大幅短縮
    • ファイルツリー・参照情報のみ先に取得、ファイル内容は必要時に非同期でダウンロード
    • 主要ファイル(設定、ソースコード等)を優先ハイドレート
    • 書き戻しは不要、Gitプロトコルでコミット&プッシュのみ
    • GitHubやGitLabなど任意のGitリモートにも対応
  • 大規模リポジトリのクローン時間を10〜15秒に短縮可能
  • 月間1万回のサンドボックス起動で数千時間のコスト削減効果

今後の展開

  • 現在はプライベートベータ、5月初旬にパブリックベータ公開予定
  • 近日中にメトリクス拡充など新機能を追加予定
  • ドキュメントや内部構造の詳細解説も順次公開

まとめ

  • Artifactsはエージェント時代のソース管理・状態永続化の新基盤
  • Git互換API・REST APIで多様な用途と大規模運用に対応
  • ArtifactFSにより大規模リポジトリの即時マウント・効率化も実現
  • 今後の機能追加・公開に注目

Hackerたちの意見

これめっちゃいいね!人間向けに主に作られた、GitHubみたいな制限のないAPIファーストのGitリポジトリだ。ピエールのcode.storageに対抗するものになりそう。Zigは最高の選択だよ。俺はこの3年間、自分のGit実装をZigで作ってたんだけど(プロフィール見てね)、ほんとにこのための完璧な言語だと思う。低レベルの制御が正確にできて、依存関係(libcみたいな)を排除することに重点を置いてるから、WebAssemblyにぴったりなんだ。
おお、これすごくいいね!使用コストはS3に比べてかなり高いけど、PUT/POSTが30倍高い。バッチ処理が重要になりそうだね。
うーん、Gitリポジトリの中身に実際にアクセスできると思ってたんだけど… ドキュメントに書かれてる機能: リポジトリのクローン、新しいリポジトリの初期化、リポジトリのインポート 欠けてる機能: ブランチやタグの一覧、オブジェクトの一覧、コミット履歴の一覧、新しいコミットの作成、生のGitオブジェクトの読み取り、ブランチやリポジトリのマージ、パスによるGitオブジェクトの読み取り
彼らが言ってる「操作」って、`git clone`や`git push`のことだと思う。これらは一回の操作で何百、何千ものオブジェクトを読み書きできるからね。
価格はバッチ処理を考えるとまあまあ良さそう。Durable Objectごとの128MBのメモリ制限が気になるね。数千ファイルと履歴があるリポジトリだと、プッシュ時のデルタ解決中に思ったより早くその制限に達しそう。
ArtifactFSのやつ、面白そうだね!これが好きなんだ: https://github.com/cloudflare/artifact-fs/blob/main/examples... - 渡した引数に基づいて「別の画像」に変わる汎用的な画像みたいなものだ。最近、自分のプロジェクトのためにDockerfile用に似たようなものを作ったんだけど(クラウドマシンが俺のレジストリを理解しないから必要だった!)。ArtifactFSを他の種類のコンテンツアドレスストレージ用にフォークしたり拡張したりできるかな。俺のレジストリは、いくつかの点でGitっぽいんだよね - インデックスがあって、ファイルはコンテンツアドレスされてる、みたいな。
これめっちゃクールだね!Dropboxみたいに非技術者向けに最適化されたツール、開発者向けのGitHub、そしてエージェント向けのアーティファクトがあるのはどうしてなんだろう。みんな同じことをしてるのに:ファイルのバージョン管理。なんで全てのユーザーが使える一つのシステムがないのかな!ここで自分でも何か作ろうとしてるんだけど、https://sublimated.com で、非技術者、開発者、エージェントがGitプロトコルを通じて使えるようになってるよ。
技術的にはすごくクールだけど、これのターゲット市場は誰なんだろう?コーディングエージェントやコーディングエージェントプラットフォームを作ってる人たちは、ほとんどが非Cloudflareのサンドボックスで構築してると思うし、セットアップに数分の遅延を我慢できるんじゃないかな。自社でコーディングエージェントのソリューションを作ってる人たちが何をしてるのかは分からないけど、簡単な道はまだ多くのサンドボックスプロバイダー+GitHubの組み合わせだと思う。このシステムを使う人が誰で、なぜ使うのか知りたいな!
使用可能なDockerコンテナの動的プールを持つことができるから、15秒くらいで、基本的にどのサンドボックスプロバイダーよりも速いよ。
アーティファクトを使えば、毎日何百万ものリポジトリを作れるってことだよね。エージェントやチャット、ユーザー、セッションごとに一つずつ。全部耐久性のあるオブジェクトだし :)
WinFspを通じてこれを使うことはできるの?それとも他にWindowsのFUSE実装があるの?
それか、もっと良いOSを使えば? https://www.over-yonder.net/~fullermd/rants/winstupid/1
誰でも使えるS3互換のgitバックエンドを完全にオープンソースにしてくれたら、もっと興味が湧くんだけど。そんなのあるのかな?うーん…
あるよ、https://github.com/awslabs/git-remote-s3 (注:使ったことはないけど)
記事を読んでも、gitやGithub、いくつかのブランチやワークツリーがあるのに、これが必要な理由がまだよく分からなかった。よく考えると、「Githubで何千ものリポジトリやブランチを作るのは高くて制限がある」っていうのと、「ArtifactFSは大きなリポジトリ用に、読み込み時にファイルを生成する怠惰なファイルシステムとして作った」っていうのが主な理由みたい。もしそれが使い方に合うなら、いいツールかもね。でも、マーケットはニッチな気がする。
Githubはgitじゃないからね。gitの方がずっと堅牢で、どこにでもあるから。
> 既存のgitリポジトリからArtifactsリポジトリをブートストラップするって、すごいね。昔、isomorphic-gitを使ってCF Workerで.gitを操作するハックをしてたけど、めっちゃ面倒だった。 > ArtifactFSはgitリポジトリのブロブなしクローンを実行するんだ。ファイルツリーとリファレンスは取得するけど、ファイルの内容は取得しない。サンドボックスの起動時にそれを行うことができるから、エージェントハーネスが作業を始められるんだ。これはめちゃくちゃ便利だね。ファイルの変更だけをコミットすることで、どんな.gitに対してもシングルブロブの編集機能が実現できるって想像してる。
GitLabのアーティファクトに使えるのかな?