Worker から Artifacts リポジトリを作成し、標準の Git クライアントでコンテンツを push / pull します。
このガイドの最後までに、Worker を作成し、Artifacts にバインドし、Workers バインディングでリポジトリを作り、コミットを push し、同じリポジトリを標準の Git クライアントで clone します。
先に 名前空間 を読み、使う名前空間名を決めてください。このガイドの例では default を使います。
- Cloudflare アカウント ↗ に登録します。
Node.js↗ をインストールします。
Node.js のバージョンマネージャー
権限の問題を避け、Node.js のバージョンを切り替えられるよう、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。
次も必要です。
- Wrangler がインストールされていること。このガイドでローカルの Wrangler コマンドを使う場合は、先に Wrangler で認証してください。ローカルの OAuth 認証や CI の設定は、
wrangler loginと CI/CD で Wrangler を実行する を参照してください。 - Cloudflare アカウントで Artifacts を利用できること。
- 名前空間名(例:
default)。 - ローカルの
gitクライアント。 - レスポンスフィールドを自動抽出する場合は
jq。
-
C3 で新しい Worker プロジェクトを作成します。
npm create cloudflare@latest -- artifacts-workeryarn create cloudflare artifacts-workerpnpm create cloudflare@latest artifacts-workerセットアップでは、次のオプションを選びます。
- What would you like to start with? では、
Hello World exampleを選びます。 - Which template would you like to use? では、
Worker onlyを選びます。 - Which language do you want to use? では、
TypeScriptを選びます。 - Do you want to use git for version control? では、
Yesを選びます。 - Do you want to deploy your application? では、
Noを選びます(デプロイ前にいくつか変更します)。
- What would you like to start with? では、
-
プロジェクトディレクトリに移動します。
cd artifacts-worker
Wrangler 設定ファイルを開き、Artifacts バインディングを追加します。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "artifacts-worker",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-09-20",
"artifacts": [
{
"binding": "ARTIFACTS",
"namespace": "default"
}
]
}name = "artifacts-worker"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-09-20"
[[artifacts]]
binding = "ARTIFACTS"
namespace = "default"
# Set remote = true if you want Wrangler to use the remote Artifacts service in local dev.これで Worker 内から env.ARTIFACTS として Artifacts を使えます。
TypeScript を使っている場合は、ローカルのバインディング型を再生成します。
npx wrangler typesyarn wrangler typespnpm wrangler typesWrangler は、生成した worker-configuration.d.ts に Artifacts 型を追加します。
src/index.ts を次のコードに置き換えます。
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (request.method === "POST" && url.pathname === "/repos") {
// Read the repo name from the request body so the route is reusable.
const body = await request.json().catch(() => ({}));
const repoName = body.name ?? "starter-repo";
// Create the repo and return the remote URL plus initial write token.
const created = await env.ARTIFACTS.create(repoName);
return Response.json({
name: created.name,
remote: created.remote,
token: created.token,
});
}
return new Response("Use POST /repos to create an Artifacts repo.", {
status: 405,
headers: { Allow: "POST" },
});
},
};export default {
async fetch(request, env) {
const url = new URL(request.url);
if (request.method === "POST" && url.pathname === "/repos") {
// Read the repo name from the request body so the route is reusable.
const body = await request.json().catch(() => ({}));
const repoName = body.name ?? "starter-repo";
// Create the repo and return the remote URL plus initial write token.
const created = await env.ARTIFACTS.create(repoName);
return Response.json({
name: created.name,
remote: created.remote,
token: created.token,
});
}
return new Response("Use POST /repos to create an Artifacts repo.", {
status: 405,
headers: { Allow: "POST" },
});
},
};この Worker は Artifacts リポジトリを作成し、Git クライアントが push / pull に使うリモート URL とトークンを返します。
デモでは、Worker が初回の write トークンを返します。本番では、clone と pull 向けに短命の read トークンを発行し、write トークンは push が必要な操作だけに発行してください。
ローカル開発を開始します。
npx wrangler devyarn wrangler devpnpm wrangler dev次に、別のターミナルを開き、Worker にリクエストを送って新しい Artifacts リポジトリを作成します。
curl http://localhost:8787/repos \
--header "Content-Type: application/json" \
--data '{
"name": "starter-repo"
}'Worker は env.ARTIFACTS.create() を呼び出し、Git 操作に必要な 3 つの値を返します。
{
"name": "starter-repo",
"remote": "https://<ACCOUNT_ID>.artifacts.cloudflare.net/git/default/starter-repo.git",
"token": "art_v1_0123456789abcdef0123456789abcdef01234567?expires=1760000000"
}name: リポジトリ名。名前空間内で一意である必要があります。remote: このリポジトリの Git リモート URL。<ACCOUNT_ID>は実際の Cloudflare アカウント ID になります。token: Git 操作用の短命な資格情報。トークンは有効期限を?expires=サフィックスに Unix タイムスタンプとして埋め込みます。
remote と token の値を、ローカルのシェル変数にコピーします。
export ARTIFACTS_REMOTE="<PASTE_REMOTE_FROM_RESPONSE>"
export ARTIFACTS_TOKEN="<PASTE_TOKEN_FROM_RESPONSE>"RESPONSE=$(curl --silent http://localhost:8787/repos \
--header "Content-Type: application/json" \
--data '{"name":"starter-repo"}')
export ARTIFACTS_REMOTE=$(printf '%s' "$RESPONSE" | jq -r '.remote')
export ARTIFACTS_TOKEN=$(printf '%s' "$RESPONSE" | jq -r '.token')前の手順で、Worker は空の Artifacts リポジトリを作成しました。次にローカル Git リポジトリを作り、ファイルを追加して Artifacts に push します。通常の Git リモートへの push と同じ手順です。
mkdir artifacts-demo
cd artifacts-demo
git init -b main
printf '# Artifacts demo\n' > README.md
git add README.md
git commit -m "Initial commit"
git remote add origin "$ARTIFACTS_REMOTE"
git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" push -u origin main-c http.extraHeader フラグはトークンをリクエストヘッダーとして渡すので、Git 設定やシェル履歴に残りません。
短時間のコマンド用に自己完結したリモート URL が必要な場合は、トークンのシークレットから組み立てます。
export ARTIFACTS_TOKEN_SECRET="${ARTIFACTS_TOKEN%%\?expires=*}"
export ARTIFACTS_AUTH_REMOTE="https://x:${ARTIFACTS_TOKEN_SECRET}@${ARTIFACTS_REMOTE#https://}"
git push "$ARTIFACTS_AUTH_REMOTE" HEAD:main同じリポジトリを 2 つ目のディレクトリに clone します。
cd ..
git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone
git -C artifacts-clone log --oneline -1前の手順で push したコミットが表示されるはずです。
短時間のコマンド用に、自己完結したリモート URL で clone することもできます。
git clone "$ARTIFACTS_AUTH_REMOTE" artifacts-cloneWorker プロジェクトのディレクトリに戻ります。
cd artifacts-workerwrangler dev を動かさなくてもリポジトリを作れるよう、Worker をデプロイします。
npx wrangler deployyarn wrangler deploypnpm wrangler deployWrangler は workers.dev URL を表示します。その URL に対して同じ curl リクエストを送り、本番から追加のリポジトリを作成できます。