jpskill.com
🛠️ 開発・MCP コミュニティ

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本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
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
🪟 Windows (PowerShell)
$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. 1. 下の青いボタンを押して adynato-cloudflare.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → adynato-cloudflare フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

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 })
    }
  }
}

デバッグのヒント

  1. 常にリクエストコンテキストを最初にログ出力する

    console.log(`[${request.method}] ${new URL(request.url).pathname}`)
  2. 非同期処理の前後にログ出力する

    console.log('Fetching from KV...')
    const value = await env.MY_KV.get(key)
    console.log('KV result:', value ? 'found' : 'not found')
  3. 構造化されたログ出力を使用する

    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

  1. Always log request context first

    console.log(`[${request.method}] ${new URL(request.url).pathname}`)
  2. 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')
  3. 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:

  1. Check live logs

    wrangler tail --status error
  2. Check recent deployments

    wrangler deployments list
  3. Rollback if needed

    wrangler rollback
  4. Test locally

    wrangler dev
  5. Check bindings

    wrangler kv:namespace list
    wrangler d1 list
    wrangler r2 bucket list
  6. Verify secrets

    wrangler secret list