mcpField
C
cloudflare-deployment

cloudflare-deployment

github.com/autumnsgroveクラウド・DevOps681 回インストール5 日前に更新
リポジトリ

cloudflare-deployment について

cloudflare-deploymentは、Cloudflare上でアプリケーションやリソースを設定・デプロイするためのスキルです。Workers、Pages、KV、R2、D1、Wrangler設定を扱う開発者を対象とし、Groveのインフラ抽象化についても説明します。

主な機能

  1. 01Workersの初期化とデプロイ
  2. 02Pagesサイトのデプロイ
  3. 03KV、R2、D1の設定
  4. 04Workerのシークレットと環境の管理
  5. 05Groveインフラインターフェースの利用

活用シーン

  1. 01Cloudflare Workerの開発とデプロイ
  2. 02Pagesによる静的サイトの公開
  3. 03アプリケーションとKV、R2、D1の接続

MCP 対応

関連ドキュメントにMCP サーバー設定が含まれると記載されていますが、このスキル自体のMCP機能は示されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/autumnsgrove/lattice --skill cloudflare-deployment

インストール後、Claude Code で/cloudflare-deploymentを入力して読み込まれたか確認します。

詳細

Cloudflare デプロイスキル

有効にするタイミング

次の場合にこのスキルを有効にします。

  • Cloudflare Workers または Pages をセットアップする
  • KV、R2、または D1 ストレージを使用する
  • アプリケーションを Cloudflare にデプロイする
  • wrangler.toml を設定する
  • Cloudflare リソースを管理する

クイックコマンド

# Install wrangler
pnpm add -g wrangler

# Login
wrangler login

# Initialize new Worker
wrangler init my-worker

# Local development
wrangler dev

# Deploy to Cloudflare
wrangler deploy

# View logs
wrangler tail my-worker

サービスの概要

サービス用途ユースケース
Workersサーバーレス関数API エンドポイント、ミドルウェア
Pages静的サイト+関数SvelteKit、Next.js
KVキー・バリューストレージキャッシュ、セッションデータ
R2オブジェクトストレージファイル、画像、バックアップ
D1SQLite データベース構造化データ

Workers のセットアップ

wrangler init my-worker --type javascript
cd my-worker
wrangler dev
wrangler deploy
基本的な Worker
export default {
	async fetch(request, env) {
		const url = new URL(request.url);

		if (url.pathname === "/api/hello") {
			return new Response(JSON.stringify({ message: "Hello!" }), {
				headers: { "Content-Type": "application/json" },
			});
		}

		return new Response("Not found", { status: 404 });
	},
};

KV ストレージ

# Create namespace
wrangler kv namespace create MY_KV

# Add to wrangler.toml
# kv_namespaces = [{ binding = "MY_KV", id = "abc123" }]
// In Worker
export default {
	async fetch(request, env) {
		// Write
		await env.MY_KV.put("key", "value");

		// Read
		const value = await env.MY_KV.get("key");

		return new Response(value);
	},
};

R2 ストレージ

wrangler r2 bucket create my-bucket
# Add: r2_buckets = [{ binding = "MY_BUCKET", bucket_name = "my-bucket" }]
// In Worker
await env.MY_BUCKET.put("file.txt", "content");
const object = await env.MY_BUCKET.get("file.txt");
const text = await object.text();

D1 データベース

wrangler d1 create my-database
wrangler d1 execute my-database --command="CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)"
# Add: d1_databases = [{ binding = "DB", database_name = "my-database", database_id = "..." }]
// In Worker
const { results } = await env.DB.prepare("SELECT * FROM users WHERE id = ?").bind(1).all();

return Response.json(results);

Infra SDK 抽象化レイヤー

Grove では、Cloudflare の生 API の代わりに、@autumnsgrove/infra のポータブルなインフラストラクチャインターフェースを使用します。これにより、バックエンドの移植性が高まり、すべてのサービスで一貫したパターンを利用できます。

生の CloudflareInfra SDK インターフェースインポート先
env.DB (D1Database)GroveDatabase@autumnsgrove/infra
env.STORAGE (R2Bucket)GroveStorage@autumnsgrove/infra
env.CACHE_KV (KVNamespace)GroveKV@autumnsgrove/infra
サービスバインディング (Fetcher)GroveServiceBus@autumnsgrove/infra
Grove コンテキストの作成

Worker のエントリーポイントで createCloudflareContext() を使用して GroveContext を作成します。

import { createCloudflareContext } from "@autumnsgrove/infra/cloudflare";

const ctx = createCloudflareContext({
	db: env.DB,
	storage: env.STORAGE,
	kv: env.CACHE_KV,
});

// Use portable interfaces
const files = await ctx.storage.list("prefix");
const cached = await ctx.kv.get("key");
Amber SDK によるストレージ管理

ファイル/ストレージを管理するには、GroveStorage 上に FileManager、QuotaManager、ExportManager、AddonManager を提供する Amber SDK(@autumnsgrove/lattice/amber)を使用します。

import { FileManager, QuotaManager } from "@autumnsgrove/lattice/amber";

const fileManager = new FileManager(ctx.storage);
const quotaManager = new QuotaManager(ctx.storage);

// Type-safe file operations
const metadata = await fileManager.upload("user-123/photo.jpg", stream);
const quota = await quotaManager.getUsage("user-123");
型安全なデータアクセス

境界での型安全性を確保するには、@autumnsgrove/lattice/server の Rootwork ユーティリティを使用します。

import { safeJsonParse, parseFormData } from "@autumnsgrove/lattice/server";
import { z } from "zod";

// Parse KV reads safely
const cached = await ctx.kv.get("config");
const config = safeJsonParse(cached, ConfigSchema);

// Parse form data with validation
const formData = await request.formData();
const data = parseFormData(formData, UploadSchema);

Pages のデプロイ

# Deploy static site
wrangler pages deploy ./build --project-name=my-site

# With SvelteKit
pnpm add -D @sveltejs/adapter-cloudflare
pnpm build
wrangler pages deploy .svelte-kit/cloudflare

wrangler.toml の設定

name = "my-worker"
main = "src/index.js"
compatibility_date = "2024-01-01"

# Automatic resource provisioning (v4.45.0+)
kv_namespaces = [{ binding = "MY_KV" }]
r2_buckets = [{ binding = "MY_BUCKET" }]
d1_databases = [{ binding = "DB" }]

開発モード

# Local (simulated resources)
wrangler dev

# Remote (real Cloudflare resources)
wrangler dev --remote

Worker のシークレット

# Set secret
wrangler secret put API_KEY --name my-worker

# Access in code
const apiKey = env.API_KEY;

ベストプラクティス

推奨事項 ✅
  • まず wrangler dev を使ってローカルでテストする
  • 環境ごとに設定を使い分ける
  • wrangler tail でログを監視する
  • リソースの自動プロビジョニングを使用する
避けるべきこと ❌
  • アカウント ID をハードコードする
  • ローカルテストを省略する
  • 本番用 ID を含む wrangler.toml をコミットする
  • レート制限を無視する

よくあるパターン

KV と R2 によるキャッシュ
export default {
	async fetch(request, env) {
		const url = new URL(request.url);
		const cacheKey = url.pathname;

		// Check KV cache
		let content = await env.MY_KV.get(cacheKey);
		if (content) return new Response(content);

		// Fetch from R2
		const object = await env.MY_BUCKET.get(cacheKey.slice(1));
		if (!object) return new Response("Not found", { status: 404 });

		content = await object.text();

		// Cache in KV
		await env.MY_KV.put(cacheKey, content, { expirationTtl: 3600 });

		return new Response(content);
	},
};

関連リソース

以下を含む完全なドキュメントについては、AgentUsage/cloudflare_guide.md を参照してください。

  • MCP サーバーの設定
  • D1 の高度なパターン
  • 本番環境へのデプロイ戦略
  • トラブルシューティングガイド

コメント