adynato-cloudflare
AdynatoプロジェクトをCloudflareで公開・運用する際に、設定やエラー対応、ログ確認、データ保存などの作業を効率的に行い、エッジ環境を最大限に活用するSkill。
📜 元の英語説明(参考)
Cloudflare Workers and Pages deployment for Adynato projects. Covers wrangler CLI, reading logs for debugging, KV/D1/R2 storage, environment variables, and common errors. Use when deploying to Cloudflare, debugging workers, or configuring edge functions.
🇯🇵 日本人クリエイター向け解説
AdynatoプロジェクトをCloudflareで公開・運用する際に、設定やエラー対応、ログ確認、データ保存などの作業を効率的に行い、エッジ環境を最大限に活用するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o adynato-cloudflare.zip https://jpskill.com/download/9752.zip && unzip -o adynato-cloudflare.zip && rm adynato-cloudflare.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9752.zip -OutFile "$d\adynato-cloudflare.zip"; Expand-Archive "$d\adynato-cloudflare.zip" -DestinationPath $d -Force; ri "$d\adynato-cloudflare.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
adynato-cloudflare.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
adynato-cloudflareフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Cloudflare Skill
この Skill は、Adynato プロジェクトを Cloudflare Workers または Pages にデプロイする際に使用します。
Wrangler CLI
インストール
npm install -g wrangler
# または npx を使用
npx wrangler <command>
認証
# インタラクティブログイン (ブラウザが開きます)
wrangler login
# 認証ステータスの確認
wrangler whoami
# API トークンの使用 (CI/CD)
export CLOUDFLARE_API_TOKEN="your-token"
デバッグのためのログの読み取り
ライブログの追跡
# 本番環境からのログのストリーム
wrangler tail
# 特定の環境からのログのストリーム
wrangler tail --env staging
# ステータスによるフィルタ
wrangler tail --status error
# 検索語によるフィルタ
wrangler tail --search "user-123"
# IP によるフィルタ
wrangler tail --ip 192.168.1.1
# パースのための JSON 出力
wrangler tail --format json
ログ出力フォーマット
GET https://example.com/api/users - Ok @ 1/17/2026, 10:30:00 AM
(log) Processing request for user-123
(error) Database connection failed
Console ログの追加
// Workers は wrangler tail にログを出力します
export default {
async fetch(request: Request, env: Env): Promise<Response> {
console.log('Request received:', request.url)
console.log('Headers:', Object.fromEntries(request.headers))
try {
const result = await doSomething()
console.log('Result:', JSON.stringify(result))
return Response.json(result)
} catch (error) {
console.error('Error:', error.message, error.stack)
return Response.json({ error: 'Internal error' }, { status: 500 })
}
}
}
デバッグのヒント
-
常にリクエストコンテキストを最初にログ出力する
console.log(`[${request.method}] ${new URL(request.url).pathname}`) -
非同期処理の前後にログ出力する
console.log('Fetching from KV...') const value = await env.MY_KV.get(key) console.log('KV result:', value ? 'found' : 'not found') -
構造化されたログ出力を使用する
console.log(JSON.stringify({ type: 'request', path: url.pathname, method: request.method, timestamp: Date.now() }))
デプロイメント
Worker のデプロイ
# 本番環境へのデプロイ
wrangler deploy
# 特定の環境へのデプロイ
wrangler deploy --env staging
# ドライラン (何がデプロイされるかを確認)
wrangler deploy --dry-run
# 特定のスクリプトのデプロイ
wrangler deploy src/worker.ts
Pages のデプロイ
# Pages へのデプロイ
wrangler pages deploy ./dist
# 特定のプロジェクトでのデプロイ
wrangler pages deploy ./dist --project-name=my-site
# 特定のブランチへのデプロイ
wrangler pages deploy ./dist --branch=preview
設定
wrangler.toml
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2026-01-17"
# 環境変数 (シークレットではない)
[vars]
API_URL = "https://api.example.com"
NODE_ENV = "production"
# KV 名前空間
[[kv_namespaces]]
binding = "MY_KV"
id = "abc123"
# D1 データベース
[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "def456"
# R2 バケット
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "my-bucket"
# Durable Objects
[[durable_objects.bindings]]
name = "MY_DO"
class_name = "MyDurableObject"
# Staging 環境
[env.staging]
name = "my-worker-staging"
vars = { API_URL = "https://staging-api.example.com" }
[[env.staging.kv_namespaces]]
binding = "MY_KV"
id = "staging-kv-id"
シークレット
# シークレットの追加 (インタラクティブ)
wrangler secret put MY_SECRET
# stdin からのシークレットの追加
echo "secret-value" | wrangler secret put MY_SECRET
# 特定の環境への追加
wrangler secret put MY_SECRET --env staging
# シークレットの一覧表示
wrangler secret list
# シークレットの削除
wrangler secret delete MY_SECRET
よくあるエラー
"No account id found"
Error: No account id found, quitting...
解決策: account_id を wrangler.toml に追加するか、ログインしてください:
wrangler login
# または
wrangler whoami # 認証の確認
# wrangler.toml
account_id = "your-account-id"
"Worker not found"
Error: worker not found
解決策: worker 名が wrangler.toml と一致するか確認してください:
# すべての worker の一覧表示
wrangler deployments list
# wrangler.toml の name フィールドの確認
"KV namespace not found"
Error: namespace not found
解決策: 最初に名前空間を作成してください:
# KV 名前空間の作成
wrangler kv:namespace create MY_KV
# 返された id を wrangler.toml で使用
"Script too large"
Error: Script startup exceeded CPU time limit
解決策:
- バンドルサイズの制限は 10MB (有料プランでは 25MB) です
- 大きな依存関係がないか確認してください
- ほとんど使用されないコードには動的インポートを使用してください
# バンドルサイズの確認
wrangler deploy --dry-run --outdir=./dist
ls -la ./dist
"Binding not found"
Error: Cannot find binding "MY_KV"
解決策: binding が wrangler.toml に存在し、コードと一致することを確認してください:
// コードは env.MY_KV を想定しています
interface Env {
MY_KV: KVNamespace // wrangler.toml の binding と一致する必要があります
}
KV ストレージ
# 名前空間の作成
wrangler kv:namespace create MY_KV
# 名前空間の一覧表示
wrangler kv:namespace list
# 値の書き込み
wrangler kv:key put --binding=MY_KV "my-key" "my-value"
# 値の取得
wrangler kv:key get --binding=MY_KV "my-key"
# キーの一覧表示
wrangler kv:key list --binding=MY_KV
# キーの削除
wrangler kv:key delete --binding=MY_KV "my-key"
# 一括アップロード
wrangler kv:bulk put --binding=MY_KV data.json
D1 データベース
# データベースの作成
wrangler d1 create my-database
# SQL の実行
wrangler d1 execute my-database --command="SELECT * FROM users"
# SQL ファイルの実行
wrangler d1 execute my-database --file=./schema.sql
# データベースのエクスポート
wrangler d1 export my-database --output=backup.sql
# データベースの一覧表示
wrangler d1 list
R2 ストレージ
# バケットの作成
wrangler r2 bucket create my-bucket
# バケットの一覧表示
wrangler r2 bucket list
# ファイルのアップロード
wrangler r2 object put my-bucket/path/file.txt --file=./local-file.txt
# ファイルのダウンロード
wrangler r2 object get my-bucket/path/file.txt
# ファイルの削除
wrangler r2 object delete my-bucket/path/ 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Cloudflare Skill
Use this skill when deploying Adynato projects to Cloudflare Workers or Pages.
Wrangler CLI
Installation
npm install -g wrangler
# Or use npx
npx wrangler <command>
Authentication
# Interactive login (opens browser)
wrangler login
# Check auth status
wrangler whoami
# Use API token (CI/CD)
export CLOUDFLARE_API_TOKEN="your-token"
Reading Logs for Debugging
Tail Live Logs
# Stream logs from production
wrangler tail
# Stream logs from specific environment
wrangler tail --env staging
# Filter by status
wrangler tail --status error
# Filter by search term
wrangler tail --search "user-123"
# Filter by IP
wrangler tail --ip 192.168.1.1
# JSON output for parsing
wrangler tail --format json
Log Output Format
GET https://example.com/api/users - Ok @ 1/17/2026, 10:30:00 AM
(log) Processing request for user-123
(error) Database connection failed
Adding Console Logs
// Workers log to wrangler tail
export default {
async fetch(request: Request, env: Env): Promise<Response> {
console.log('Request received:', request.url)
console.log('Headers:', Object.fromEntries(request.headers))
try {
const result = await doSomething()
console.log('Result:', JSON.stringify(result))
return Response.json(result)
} catch (error) {
console.error('Error:', error.message, error.stack)
return Response.json({ error: 'Internal error' }, { status: 500 })
}
}
}
Debugging Tips
-
Always log request context first
console.log(`[${request.method}] ${new URL(request.url).pathname}`) -
Log before and after async operations
console.log('Fetching from KV...') const value = await env.MY_KV.get(key) console.log('KV result:', value ? 'found' : 'not found') -
Use structured logging
console.log(JSON.stringify({ type: 'request', path: url.pathname, method: request.method, timestamp: Date.now() }))
Deployment
Deploy Worker
# Deploy to production
wrangler deploy
# Deploy to specific environment
wrangler deploy --env staging
# Dry run (see what would be deployed)
wrangler deploy --dry-run
# Deploy specific script
wrangler deploy src/worker.ts
Deploy Pages
# Deploy to Pages
wrangler pages deploy ./dist
# Deploy with specific project
wrangler pages deploy ./dist --project-name=my-site
# Deploy to specific branch
wrangler pages deploy ./dist --branch=preview
Configuration
wrangler.toml
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2026-01-17"
# Environment variables (non-secret)
[vars]
API_URL = "https://api.example.com"
NODE_ENV = "production"
# KV Namespaces
[[kv_namespaces]]
binding = "MY_KV"
id = "abc123"
# D1 Databases
[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "def456"
# R2 Buckets
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "my-bucket"
# Durable Objects
[[durable_objects.bindings]]
name = "MY_DO"
class_name = "MyDurableObject"
# Staging environment
[env.staging]
name = "my-worker-staging"
vars = { API_URL = "https://staging-api.example.com" }
[[env.staging.kv_namespaces]]
binding = "MY_KV"
id = "staging-kv-id"
Secrets
# Add secret (interactive)
wrangler secret put MY_SECRET
# Add secret from stdin
echo "secret-value" | wrangler secret put MY_SECRET
# Add to specific environment
wrangler secret put MY_SECRET --env staging
# List secrets
wrangler secret list
# Delete secret
wrangler secret delete MY_SECRET
Common Errors
"No account id found"
Error: No account id found, quitting...
Fix: Add account_id to wrangler.toml or login:
wrangler login
# or
wrangler whoami # to verify auth
# wrangler.toml
account_id = "your-account-id"
"Worker not found"
Error: worker not found
Fix: Check worker name matches wrangler.toml:
# List all workers
wrangler deployments list
# Check wrangler.toml name field
"KV namespace not found"
Error: namespace not found
Fix: Create the namespace first:
# Create KV namespace
wrangler kv:namespace create MY_KV
# Use the returned id in wrangler.toml
"Script too large"
Error: Script startup exceeded CPU time limit
Fix:
- Bundle size limit is 10MB (25MB on paid)
- Check for large dependencies
- Use dynamic imports for rarely-used code
# Check bundle size
wrangler deploy --dry-run --outdir=./dist
ls -la ./dist
"Binding not found"
Error: Cannot find binding "MY_KV"
Fix: Ensure binding is in wrangler.toml and matches code:
// Code expects env.MY_KV
interface Env {
MY_KV: KVNamespace // Must match wrangler.toml binding
}
KV Storage
# Create namespace
wrangler kv:namespace create MY_KV
# List namespaces
wrangler kv:namespace list
# Put value
wrangler kv:key put --binding=MY_KV "my-key" "my-value"
# Get value
wrangler kv:key get --binding=MY_KV "my-key"
# List keys
wrangler kv:key list --binding=MY_KV
# Delete key
wrangler kv:key delete --binding=MY_KV "my-key"
# Bulk upload
wrangler kv:bulk put --binding=MY_KV data.json
D1 Database
# Create database
wrangler d1 create my-database
# Execute SQL
wrangler d1 execute my-database --command="SELECT * FROM users"
# Execute SQL file
wrangler d1 execute my-database --file=./schema.sql
# Export database
wrangler d1 export my-database --output=backup.sql
# List databases
wrangler d1 list
R2 Storage
# Create bucket
wrangler r2 bucket create my-bucket
# List buckets
wrangler r2 bucket list
# Upload file
wrangler r2 object put my-bucket/path/file.txt --file=./local-file.txt
# Download file
wrangler r2 object get my-bucket/path/file.txt
# Delete file
wrangler r2 object delete my-bucket/path/file.txt
Local Development
# Start local dev server
wrangler dev
# Dev with specific port
wrangler dev --port 8787
# Dev with local mode (no network to Cloudflare)
wrangler dev --local
# Dev with specific environment
wrangler dev --env staging
# Dev with live reload
wrangler dev --live-reload
CI/CD with GitHub Actions
name: Deploy to Cloudflare
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Deploy Worker
run: npx wrangler deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
Required Secrets
| Secret | Description |
|---|---|
CLOUDFLARE_API_TOKEN |
API token with Workers edit permission |
CLOUDFLARE_ACCOUNT_ID |
Optional, can be in wrangler.toml |
Debugging Checklist
When a worker fails:
-
Check live logs
wrangler tail --status error -
Check recent deployments
wrangler deployments list -
Rollback if needed
wrangler rollback -
Test locally
wrangler dev -
Check bindings
wrangler kv:namespace list wrangler d1 list wrangler r2 bucket list -
Verify secrets
wrangler secret list