Architecture & Technology

このブログについて

SE が現場の知見を「記事」「事例」「スライド」として共有する、Cloudflare のサーバーレスプラットフォーム上のナレッジサイトの構成を紹介します。

Scroll
01

アーキテクチャ概要

System Architecture — Cloudflare Field NotesPUBLIC — READ ONLY + ACCESS REQUESTAUTHENTICATED — INVITED ENGINEERS閲覧ユーザー記事 / 事例 / スライドキーワード検索AI チャット Q&A投稿者申請者/apply から自己申請導入をリードしたエンジニア申請承認 or Cloudflare 招待Access 認証済みSE / Admin記事 / 事例 / スライド投稿テンプレート / AI ドラフトプレビュー共有 / 発表管理ダッシュボードプレビュー閲覧者期限付きリンク(社外可)WAFOWASP Top 10DDoS 防御Bot ManagementAPI ShieldTurnstile全トラフィック適用Public ルート(認証不要)/   /posts/*   /cases/*   /slides/*/search   /about   /api/v1/chat/apply(投稿者申請フォーム)閲覧・検索・Q&A・申請Cloudflare AccessZero Trust 認証IdP 連携 (Google)JWT 検証(アプリ側も)申請承認制アクセス制御保護対象パス:/portal/* (投稿・編集・プロフィール)/admin/* (管理・申請承認)未招待 → アクセス拒否/preview/* は One-time PINCloudflare PagesRemix (SSR / UI)Hono (API Layer)streamSSEMiddlewareCORS / Auth / LoggerTailwind CSS + TypographyPublic + Protected ルート統合D1 (SQLite)記事 / 事例 / スライドユーザー / 申請 / プレビューQ&A / 監査ログ(16 表)Drizzle ORMR2 (Storage)画像 / スライド事例アセットAI GatewayWorkers AIGemma 4 26B A4Bドラフト / Chat Q&AGuardrails / LogKVキャッシュ / レート制限Email Workersend_email binding承認通知 / プレビュー案内[email protected]Email SendingSPF / DKIM / DMARCDurable Objectsプレゼンター同期 (WS)QueuesZT 事例ドラフト生成Vectorize関連記事 / RAGLEGEND閲覧ユーザー(認証不要・読み取り専用)投稿者申請者(/apply → Email 検証)招待エンジニア(CF Access 認証・投稿可能)内部サービス間通信

全コンポーネントが Cloudflare のエッジ上で動作し、サーバーレスで運用されています。

クリックで拡大表示

02

コンテンツの種類

用途に合わせて 3 種類のコンテンツを公開できます。どれも「全体公開 / ログインユーザー限定」の公開範囲と下書きに対応し、 公開前の内容は期限付きのプレビューリンクで社外の方にも確認してもらえます。

ARTICLE · /posts

記事

Markdown の技術記事。テンプレートと AI ドラフト生成、AI 修正アシスト、Markdown / JSON インポートで執筆を支援します。 読者は AI チャット Q&A と関連記事で理解を深められます。

CASE STUDY · /cases

事例

導入事例をもとにした HTML コンテンツを ZIP でアップロードします。タイトル先頭の【】で 2 種類に分かれ、一覧ではバッジと絞り込みで区別されます。

  • 設計ガイドダッシュボードの画面ごとの詳細解説
  • 導入アーキテクチャ導入前の課題から接続図・設定の意図まで

SLIDES · /slides

スライド

reveal.js などの HTML スライドを ZIP で公開します。プレゼンターモードでは、スマートフォンがリモコンと発表者ビュー(スピーカーノート付き)になります。

03

技術スタック

Cloudflare Pages

Remix アプリケーションのホスティング。SSR(サーバーサイドレンダリング)により、SEO に強く高速な初期表示を実現。

HostingSSREdge

D1 (SQLite)

記事・事例・スライド、ユーザー、プレビュー共有、監査ログなど 16 テーブルを管理するエッジデータベース。Drizzle ORM でタイプセーフにアクセス。

DatabaseSQLEdge

R2 (Object Storage)

記事の画像、スライド、事例のスクリーンショット・接続図を保存。限定公開のアセットはアプリ経由で認可して配信。

StorageMediaZIP 展開

Workers AI

Google Gemma 4 26B A4B モデルを使用し、テンプレートベースの記事ドラフトを AI が自動生成。Hono の streamSSE でチャット応答をリアルタイム配信。

LLMGemma 4MoE

Vectorize

記事の埋め込みベクトルを保存し、コンテンツの類似度に基づく関連記事の推薦を実現。

Vector DBEmbedding検索

Cloudflare Access

/portal と /admin を Zero Trust 認証で保護(Google SSO)。プレビュー共有の /preview は別アプリケーションで One-time PIN 認証。アプリ側でも JWT を署名検証。

Zero TrustSSOOne-time PIN

WAF + Bot Management

カスタムドメインに適用された WAF が OWASP Top 10(SQLi / XSS 等)を防御。Bot Management が API エンドポイントへの自動化攻撃を検知・軽減。ゼロコードでエッジ保護。

WAFBot対策API保護

API Shield

OpenAPI 3.0 スキーマを登録し、全 API エンドポイントのメソッド・パス・リクエストボディをエッジで検証。スキーマに合致しないリクエストを自動ブロック。

Schema ValidationOpenAPI 3.0API保護

Turnstile

チャット Q&A に invisible モードの Turnstile を統合済み・稼働中。ボットによる自動投稿を Workers 到達前に検知・ブロックし、UX を損なわずに保護。

CAPTCHABot対策Invisible

AI Gateway

Workers AI 呼び出しを AI Gateway 経由でルーティング済み・稼働中。ログ・分析・レート制限・ガードレールを一元管理。

GuardrailsLoggingRate Limit

KV (Key-Value)

記事一覧のページキャッシュ、AI レポートのキャッシュ、チャットのレート制限に使用。エッジ上で低レイテンシにアクセス。

CacheRate Limit

Hono

Cloudflare Workers に最適化された超軽量 API フレームワーク。型安全なバインディング、streamSSE による AI ストリーミング、共通ミドルウェア(認証・CORS・ロガー)を提供。

APIMiddlewareSSETypeSafe

Remix v2

フルスタック Web フレームワーク。Loader/Action パターンによるデータフェッチと、ネストルーティングで高度な画面構成を実現。API ルートは Hono に委譲。

FrameworkReactSSR

Email Sending + Email Routing

専用 Email Worker(send_email バインディング・認証必須)から、投稿者の承認通知やプレビューの案内メールを送信。送信ドメインは SPF / DKIM / DMARC 設定済み。

Email通知Email Sending

Tailwind CSS

ユーティリティファーストな CSS フレームワーク。Typography プラグインにより、Markdown コンテンツも美しく表示。

CSSTypographyUI

Durable Objects

プレゼンターモードのライブルーム。発表画面とスマートフォンのリモコンを WebSocket(Hibernation API)で同期し、ページ送りをリアルタイムに反映。

WebSocketHibernationRealtime

Queues

Zero Trust 事例ドラフト生成を非同期化。収集した設定をキューに投入し、専用 Worker が Workers AI で事例の下書きを生成。

AsyncConsumer WorkerAI
04

記事作成フロー

1

テンプレート選択

6種類のテンプレートから選択

2

フォーム入力

メモ書きレベルでOK

3

AI ドラフト生成

Gemma 4 26B が記事化

4

編集・画像追加

Markdown エディタで調整

5

AI アシスト修正

追加エッセンスで改善

6

公開

ワンクリックで公開

05

AI ドラフト生成のしくみ

入力

VPNが遅い、よく切れる
リモート増えて同時接続きつい
IT部がVPN対応で疲弊してる

ラフなメモ書き・箇条書きでの入力

AI 出力

リモートワークの全社導入に伴い VPN の同時接続数が急増し、業務のピーク時間帯にはライセンス上限に達して接続できない社員が続出するようになりました。IT部門は日々の VPN トラブル対応に追われ、本来注力すべきインフラ改善に手が回らない状況でした...

行間を読み、文脈を補完した企業事例スタイルの文章

プロンプトエンジニアリングの特徴

●行間を読む文章構成 — 箇条書きの裏にある判断理由を推測し肉付け
●事実の完全保持 — 入力された数値・固有名詞は絶対に省略しない
●品質ガードレール — 多言語混入禁止、反復表現禁止、重複禁止
●セクション末尾の考察 — 背景の総括、改善点、今後の課題を自動追加
06

AI 修正アシスト

AI が生成した下書きを読んで気づいた補足情報や修正指示を、手動で書き直さずに AI で自然に本文に組み込む機能です。 修正案は HTML プレビューと Markdown ソースのタブ切替で確認し、納得できたら適用します。

追加エッセンス入力

編集画面の「AI アシスト修正」パネルで、補足したい内容・修正指示・新しいアイデアを自由記述。 例:「CASB 導入の記述を追加」「接続図の Mermaid 図を入れて」など。

チェックリスト型プロンプト

エッセンスの各項目を全て漏れなく本文に反映するよう AI に指示。 Mermaid 図の指示があれば正しい構文で自動生成。日本語ノードの引用符ルールも明記。

HTML プレビュー + Mermaid

修正案を HTML プレビュー(Mermaid 図レンダリング・Markdown 描画)と Markdown ソースのタブ切替で確認。構文エラー時はソース表示+修正案内のフォールバック付き。

1

エッセンス入力

補足・修正指示を記入

2

AI 修正生成

チェックリスト型で全反映

3

プレビュー確認

HTML / Markdown タブ切替

4

適用 or 破棄

ワンクリックで本文反映

実装上の工夫

●useFetcher — Remix の非同期データ取得で、ページ遷移なしに修正案を取得
●max_tokens: 8192 — 長い記事でも出力が途中切れしないようトークン上限を拡大
●mermaid.js 動的ロード — AI プレビューに Mermaid 図が含まれる場合のみ CDN からロードして描画
●mermaid.parse() 事前検証 — 構文エラー時はクラッシュせずソース表示 + 修正案内を表示
07

テンプレート一覧

Zero Trust

Zero Trust 導入ガイド

Access / Gateway / Tunnel の導入事例を構造化して記述

Workers

Workers / Pages 開発記

サーバーレスアプリケーションの設計・実装事例

Performance

パフォーマンス最適化

CDN / Cache / Argo 等によるパフォーマンス改善事例

Security

セキュリティ対策

WAF / Bot Management / DDoS 防御の導入・運用事例

Network

ネットワーク構成

Magic Transit / WAN / Spectrum 等のネットワーク設計事例

General

Tips & Tricks

短めの実用的な Cloudflare 活用テクニック

08

JSON インポート — 他生成 AI との連携

Gemini、ChatGPT、Claude などの外部 AI ツールで作成したフィールド入力データを、テンプレートフォームに JSON インポートして記事を生成できます。 API キー不要でブラウザ内だけで完結するワークフローです。

1

フィールド定義をコピー

テンプレートフォームからワンクリック

2

AI ツールに貼り付け

エッセンスと一緒に送信

3

JSON をインポート

AI の出力を貼り付け

4

AI で下書き生成

フィールド自動入力 → 記事化

フィールド定義コピー

テンプレートフォームの「AI ツール連携 / JSON インポート」パネルで、テンプレートのフィールド構造(ID・ラベル・型・必須/任意)を JSON 形式でクリップボードにコピー。そのまま AI に貼り付けるだけ。

外部 AI で入力データ生成

Gemini / ChatGPT / Claude にフィールド定義と書きたい内容のエッセンスを送信。 AI がフィールド構造に合わせた JSON データを出力。プロンプト例もパネルに表示。

JSON インポート & 記事生成

AI が出力した JSON をインポートするとフォームが自動入力。 内容を確認・微調整後、Workers AI(Gemma 4 26B A4B)が Markdown 記事に変換。

上級者向け: Template API

Authorization: Bearer cfbk_* ヘッダー付きでGET /api/v1/ai-guide(全テンプレート一括取得)、POST /api/v1/templates/:id/test-generate(AI テスト記事生成)、POST /api/v1/templates/quick-generate(トピック指定で自動生成) などの API エンドポイントも利用可能。Windsurf / Cascade などの AI コーディングツールからの直接呼び出しにも対応しています。

09

投稿者申請 & メール通知フロー

外部エンジニアが投稿者として参加するには、公開申請フォーム(/apply)から申請を送信します。 Cloudflare Email Routing と専用 Email Worker を組み合わせた通知メールの仕組みが組み込まれています。

1

申請フォーム送信

/apply からメール・名前・所属を入力

2

メールアドレス検証

Email Routing API で宛先登録 → CF が検証メール送信

3

ユーザーが検証

メール内リンクをクリックして検証完了

4

管理者が承認

Access ポリシーにメール追加 + ユーザー作成

5

通知メール送信

Email Worker 経由で承認完了メールを送信

Email Routing API

申請時に POST /email/routing/addresses で 宛先アドレスを自動登録。Cloudflare が検証メールを送信し、ユーザーがリンクをクリックして検証完了。

Email Worker

Pages は send_email バインディング非対応のため、 専用 Worker(cf-se-blog-email-worker)を HTTP fetch で呼び出してメール送信。

ユーザー削除時の同期

ユーザー削除時に Access ポリシーからのメール削除と Email Routing 宛先アドレスの削除を API 経由で自動実行し、外部サービスとの整合性を維持。

10

Hono API アーキテクチャ

本ブログの API レイヤーは、Cloudflare Workers に最適化された超軽量フレームワークHonoで構築されています。Remix の SSR/UI 層と Hono の API 層を組み合わせることで、 それぞれのフレームワークの強みを最大限に活かしたハイブリッド構成を実現しています。

型安全なバインディング

c.env.DB、c.env.AI など 全 Cloudflare サービスに型付きでアクセス。開発時にミスを防止。

streamSSE

AI チャットの応答を Hono の streamSSE ヘルパーで リアルタイム配信。手動の ReadableStream 構築が不要に。

共通ミドルウェア

認証・認可・CORS・ロガーを共通ミドルウェアとして定義。 ルートごとに宣言的に適用でき、コードの重複を排除。

超軽量・高速

依存ゼロ、バンドルサイズ極小。Cloudflare Workers の起動時間を最小化し、 エッジでのレスポンス速度を最大化。

API ルート構成

POST /api/v1/chatAI チャット Q&A(SSE ストリーミング)
POST /api/v1/ai/*タグ提案・文章改善・トレンドレポート
POST /api/upload-image画像アップロード(R2)
/api/v1/templatesテンプレート取得(外部 AI 連携用)
/api/v1/api-keysPersonal API Key の発行・失効
/api/v1/import-images外部画像の R2 取り込み
GET /r2/images/*公開画像の配信(images/ のみ)
GET /api/healthヘルスチェック
11

データモデル

D1(SQLite)に 16 テーブル。スキーマは Drizzle ORM で定義し、26 本のマイグレーションを GitHub Actions がデプロイ時に適用します。

ユーザー・権限

  • users

    ロール、プロフィール、スライド投稿権限

  • access_requests

    投稿者申請(pending / approved / rejected)

  • user_badges

    投稿数などに応じたバッジ

  • notification_settings

    通知の受け取り設定

  • api_keys

    Personal API Key(ハッシュで保存)

コンテンツ

  • posts

    記事と事例。content_type(article / case_guide)、公開範囲、事例の ZIP 情報

  • categories

    カテゴリ

  • templates

    記事テンプレートと AI プロンプト

  • slides

    スライド(ZIP を R2 に展開)

  • slide_notes

    スライドごとのスピーカーノート

AI

  • ai_draft_requests

    AI ドラフト生成の履歴(モデル・レイテンシ)

  • ai_summaries

    記事の AI 要約

  • qa_threads

    AI チャット Q&A のスレッド

  • qa_messages

    Q&A のメッセージ

共有・監査

  • preview_grants

    プレビュー共有(宛先・期限・取り消し・閲覧回数)

  • audit_logs

    承認・公開・プレビュー発行などの操作ログ

12

セキュリティ & インフラ

認証・認可

  • Cloudflare Access による Zero Trust 認証(/portal・/admin)
  • IdP 連携(Google Workspace)+ アプリ側での JWT 署名検証
  • 署名付き Cookie セッション(SESSION_SECRET)
  • ロールベースアクセス制御(admin / se / ae / user)
  • プレビュー閲覧者は One-time PIN・セッションなし

WAF + Bot Management

  • カスタムドメインに WAF を適用
  • OWASP Top 10 防御(SQLi / XSS 等)
  • Bot Management で自動化攻撃を検知・軽減
  • API Shield — OpenAPI スキーマで全エンドポイントを検証
  • Turnstile — チャット Bot 保護(invisible モード)
  • AI Gateway — AI 呼び出しのガードレール・ログ・分析

アップロードコンテンツの隔離

  • 事例・スライドの HTML は CSP sandbox(不透明オリジン)で配信
  • 限定公開のアセットは HMAC 署名付きの短命トークンで認可
  • /r2 は公開画像(images/)のみ配信
  • オリジンサーバー不要のフルサーバーレス

投稿者申請 & メール通知

  • 公開申請フォーム(/apply)で自己申請
  • Email Routing API で宛先アドレス自動登録・検証
  • 専用 Email Worker で承認通知メール送信(共有シークレットで認証)
  • ユーザー削除時に Access + Email Routing を自動クリーンアップ

運用機能

  • RSS フィード自動生成
  • SEO 最適化(OGP / Twitter Card)
  • 閲覧数カウント
  • 監査ログ(Audit Log)
  • ユーザープロフィール管理(所属・専門分野等)

開発体験

  • TypeScript + Drizzle ORM でタイプセーフ
  • Hono で API を型安全に構築
  • D1 マイグレーションによるスキーマ管理
  • Wrangler CLI でローカル開発・デプロイ
  • Vite ベースの高速 HMR
13

AI チャットボット — 実装・改善・チューニング

各記事ページにフローティングチャットウィジェットを設置。読者が記事内容や Cloudflare 全般について質問でき、 AI がリアルタイムでストリーミング回答します。セキュリティ・モデレーション・UX を多層的に設計しています。

アーキテクチャ

  • Hono streamSSE による SSE ストリーミング
  • Gemma 4 26B A4B(回答生成)
  • Llama Guard 3 8B(コンテンツモデレーション)
  • RAG: Vectorize で記事コンテキスト + 関連記事を自動取得
  • 会話履歴 10 件を保持してコンテキスト継続
  • D1 に質問・回答を永続化(24 時間 TTL で自動削除)

セキュリティ多層防御

  • Turnstile — invisible CAPTCHA で Bot を排除
  • 入力バリデーション — 1,000 文字制限 + スパムパターン検出
  • KV レート制限 — IP あたり 10 回/分
  • Llama Guard — 有害コンテンツを自動フラグ & 拒否
  • AI Gateway — ガードレール・ログ・レート制限
  • フラグ付きメッセージは DB に証跡保存(管理画面で確認可能)

UX 改善ポイント

  • 自動リサイズ textarea — 長文入力でも全文が見える
  • Shift+Enter で改行、Enter で送信
  • サジェスト質問ボタン(3 種)で入力の敷居を低下
  • SSE ストリーミング中のタイピングアニメーション
  • ガードレール/エラー時のわかりやすいメッセージ表示
  • SE・Admin による人間の回答も対応(緑バッジ表示)

チューニングポイント & 改善履歴

項目BeforeAfter効果
回答スコープ記事コンテキストのみ(厳格なグラウンディング)記事優先 + Cloudflare 全般の知識で補足幅広い質問に回答可能に
max_tokens1,0242,048詳細な回答・コード例が可能に
AI 回答の永続化fire-and-forget(消失リスク)await で確実に D1 保存リフレッシュ後も回答が残る
スレッド TTL28 日24 時間(自動クリーンアップ)ストレージ節約・プライバシー向上
入力フィールド単行 input(長文が見切れる)自動リサイズ textarea(max 6rem)長文の可視性・改行対応
エラーハンドリングガードレールブロック時は無応答SSE error イベントでユーザーに通知「内容を変えてお試しください」と案内
temperature0.3(低温=事実重視・安定出力)ハルシネーション抑制

AI Gateway — 挙動例とエラーハンドリング

AI Gateway は Workers AI への全リクエストを中継し、ガードレール・ログ・キャッシュ・レート制限を適用します。ai.run() の第3引数に { gateway: { id: "..." } } を渡すだけで有効化されます。

正常フロー

ユーザー入力 → Turnstile 検証 → バリデーション → KV レート制限 → Llama Guard モデレーション(AI Gateway 経由) → RAG コンテキスト取得 → Gemma 4 26B A4B で回答生成(AI Gateway 経由・SSE ストリーミング) → D1 に保存。AI Gateway ダッシュボードでリクエスト数・レイテンシ・トークン消費量をリアルタイム監視可能。

ガードレールブロック時

AI Gateway のガードレールが不適切コンテンツを検知 → ストリームが空/中断 → サーバーが空レスポンスを検知 → SSE で { error: "AI からの応答を取得できませんでした..." } を送信 → フロントエンドが赤いエラーバーに「内容を変えて再度お試しください」と表示。 ai.run() 自体が例外をスローする場合も、エラーメッセージから gateway/guard/block を検知して専用メッセージを返却。

モデレーション(Llama Guard)との併用

Llama Guard 3 8B が「unsafe」を返した場合 → ユーザーメッセージを flagged=true で D1 に保存 → 「利用規約に反する可能性があるため送信できません」と即座に拒否。 Llama Guard 自体のエラーは Fail-open 設計(false negative 優先)で処理を続行。 二重防御: Llama Guard(コンテンツ分類)+ AI Gateway(ガードレール)の多層構成。

AI Gateway ダッシュボードで確認可能な情報

リクエスト数・成功/失敗率・平均レイテンシ・トークン消費量・ モデル別コスト分析・ガードレール発動回数・キャッシュヒット率。 全ログはリアルタイムで記録され、異常検知やコスト最適化に活用可能。

14

Markdown インポート

既存の Markdown 記事(Qiita、Zenn、社内 Wiki 等)をそのままインポートして記事化できます。 YAML Frontmatter からタイトル・タグ・カテゴリを自動抽出し、フォームに反映します。

1

Markdown を貼り付け

Frontmatter 付きの原稿をペースト

2

自動解析

タイトル・タグ・カテゴリを抽出

3

プレビュー確認

解析結果を確認して取り込み

4

公開時に画像を R2 へ

外部画像を自動で R2 に取り込み

YAML Frontmatter 対応

title、tags、category を Frontmatter から自動抽出。Frontmatter がない場合は最初の # 見出し をタイトルとして使用。

外部画像の自動 R2 取り込み

記事を公開する際に、Markdown 内の外部画像 URL(Qiita、S3 等)を自動検出し、 Cloudflare R2 にコピー。URL を R2 パスに自動置換するため、投稿者の操作は不要です。

デフォルトテンプレート

インポートモーダルを開くと Frontmatter のテンプレートがあらかじめ入力されており、 既存原稿を貼り付けるだけで即座に解析を開始できます。

15

事例の作成と公開

事例は、SE が手元の OpenCode(AI コーディングエージェント)で作成し、ZIP でアップロードします。 作成ルール(AGENTS.md)とスクリプトをリポジトリの case-guides/ にまとめ、 誰が作っても同じ構成・品質になるようにしています。

1

素材を用意

スクリーンショットと補足資料(課題・導入前の構成)

2

/case で作成

種別を確認し、AGENTS.md の章立てで執筆

3

マスク

ID・ドメイン・IP など 12 種を mask.py で塗りつぶし

4

検証・ZIP 化

package.py が章構成・マスク・接続図を検査

5

アップロード

下書き → プレビュー → 公開

2 種類の事例

  • 設計ガイド: 画面ごとに項目の意味・仕組み・この環境での読み取りを解説
  • 導入アーキテクチャ: 上記に加え、導入前の構成と課題、接続図、各設定の意図を解説
  • 接続図は Cloudflare 公式アイコンを使った SVG

匿名化を仕組みで担保

  • マスクは不透明な塗りつぶしのみ(ぼかし不可)
  • mask.py を通していない・確認していない画像は ZIP にできない
  • 本文・接続図のメールアドレス・IP・ID も自動検出

Zero Trust 事例ドラフト生成

  • 管理画面から Zero Trust の設定を API で収集
  • Queues → 専用 Worker → Workers AI で事例記事の下書きを生成
  • 生成後は通常の記事と同じ画面で編集・公開
16

スライド & プレゼンターモード

ZIP で公開

reveal.js テンプレートや任意の HTML スライドを ZIP でアップロード。R2 に展開し、限定公開にも対応。

スマホがリモコンに

発表画面の QR コードを読み取ると、スマートフォンがリモコンと発表者ビュー(現在・次のスライド、タイマー)になります。

スピーカーノート

スライド内の notes、Markdown / JSON ファイル、ZIP から取り込み、編集画面で修正できます。

Durable Objects で同期

発表ごとのルームを Durable Object で管理し、WebSocket Hibernation で同期。ルームキーは 256 bit で、12 時間で失効します。

17

プレビュー共有(期限付きリンク)

公開前の記事・事例を、指定したメールアドレスの方だけに期限付きで見てもらえます。 本人確認は Cloudflare Access の One-time PIN で行い、閲覧者にはサイトのアカウントもセッションも作りません。

1

リンクを発行

作成者・管理者がメールアドレスと期限(1〜14 日)を指定

2

案内メール

Email Sending で閲覧方法を送信

3

One-time PIN

/preview/* の Access アプリでメールアドレスを確認

4

アプリで認可

JWT と宛先・期限・取り消しを毎回確認

5

1 記事だけ表示

下書きも可。ほかの記事・管理画面には入れない

通常ログインと分離

プレビュー用 Access アプリの AUD を通常の AUD と分け、閲覧者が自動でユーザー登録されないようにしています。

期限と取り消し

期限切れ・取り消しは即時に反映。Access ポリシーの許可リストは、有効なリンクの宛先と API で同期します。

閲覧状況の記録

リンクごとに閲覧回数・最終閲覧日時を表示し、発行・取り消し・再送は監査ログに残します。

18

このブログの使い方

Cloudflare Field Notes は、SE が現場で得た技術知見を記事・事例・スライドの形で共有する場です。 対象読者ごとに最適な活用方法をまとめました。

👤

お客様・ユーザー

  • ▸Cloudflare 技術の理解・学習に
  • ▸構成例や設計パターンの参考に
  • ▸PoC や検証の出発点として
⚠ 環境差異があるため、必ず検証のうえ適用してください
🔧

SE・社内エンジニア

  • ▸お客様提案の技術リファレンスに
  • ▸チーム内のナレッジ共有に
  • ▸新人オンボーディングの教材に
⚠ 公式ドキュメントと併用し、社外共有時は位置づけを説明してください
🤝

パートナー

  • ▸共同提案時の技術コンテキスト共有に
  • ▸Cloudflare 技術の概要把握に
  • ▸お客様向け説明資料の補足に
⚠ 正式仕様は必ず公式ドキュメントをご参照ください

このブログの位置づけ

公式ドキュメント›Cloudflare 公式ブログ›フィールドノート ← ここ›個人ブログ・Zenn・Qiita

本サイトは Cloudflare の公式ブログではありません。SE が現場で得た知見を共有するフィールドノートであり、個人の経験・見解に基づく情報を含みます。 公式発表は Cloudflare 公式ブログ(blog.cloudflare.com)、 最新の仕様は developers.cloudflare.com をご参照ください。

19

免責事項ポリシー

本ブログは Cloudflare Japan のソリューションエンジニアが運営していますが、掲載内容は公式な製品仕様や動作保証を意味するものではありません。 この位置づけを明確にするため、サイト上の複数箇所に免責事項を掲載しています。

ホームページ — 概要説明

ヒーローセクション直下に、本ブログの位置づけを簡潔に説明する免責文を掲載。 執筆者個人の経験・見解に基づく情報であること、公式ドキュメントへの参照リンクを含みます。

各記事ページ — 詳細な免責事項

記事本文の末尾に「免責事項」ボックスを表示。 Cloudflare, Inc. の公式見解・推奨・仕様保証を構成するものではないこと、 すべてのお客様環境への適用を保証するものではないことを明記しています。

免責事項について

  • - 本サイトは Cloudflare の公式ブログではありません。公式発表は Cloudflare 公式ブログ(blog.cloudflare.com) をご覧ください
  • - 投稿者は SE 個人の立場で経験・知見を共有しており、Cloudflare の公式メッセージとは異なります
  • - お客様の環境はそれぞれ異なるため、記事の手順や構成がすべてに適用できるとは限りません
  • - 他部署や社外のステークホルダーがこのブログの位置づけを正しく理解できるようにするためです
  • - 最新の仕様や正式なサポートは Cloudflare 公式ドキュメント をご参照ください
20

Change Log

基礎設計から現在に至るまでの実装・変更履歴をまとめています。

Change Log を見る →
21

仕様一覧

項目技術 / 仕様
フレームワークRemix v2 (Vite) + Hono (API Layer)
ランタイムCloudflare Workers (V8 Isolates — コールドスタートなし)
ホスティングCloudflare Pages (SSR + CDN 静的配信)
データベースCloudflare D1 (SQLite at edge) + Drizzle ORM — 16 テーブル / 26 マイグレーション
ストレージCloudflare R2 — 画像・スライド・事例アセット(限定公開はアプリ経由で認可)
API レイヤーHono — streamSSE, 型付き Bindings, CORS / Auth / Logger ミドルウェア
AI モデルGoogle Gemma 4 26B A4B (ドラフト・チャット) + Llama Guard 3 8B (モデレーション)
AI GatewayAI 呼び出しの一元管理 — ログ・分析・レート制限・ガードレール(稼働中)
ベクトル検索Cloudflare Vectorize — セマンティック検索 + RAG チャット Q&A
WAF / DDoSOWASP Core Ruleset + Bot Management + カスタムルール
API ShieldOpenAPI 3.0 スキーマで API エンドポイントをエッジ検証
Turnstileチャット Bot 保護 (invisible モード・稼働中)
認証Cloudflare Access — /portal・/admin は Google SSO、/preview は One-time PIN(AUD を分離)
認可RBAC (admin / se / ae / user) + Personal API Keys (Bearer cfbk_)
セッション署名付き Cookie(SESSION_SECRET・7 日間)
キャッシュ / レート制限Cloudflare KV (グローバル分散)
リアルタイム同期Durable Objects + WebSocket Hibernation(プレゼンターモード)
非同期処理Queues + Consumer Worker(Zero Trust 事例ドラフト生成)
コンテンツ記事(Markdown)/ 事例(HTML ZIP・設計ガイド / 導入アーキテクチャ)/ スライド(HTML ZIP)
アップロード HTML の隔離CSP sandbox(不透明オリジン)+ HMAC 署名付きアセットトークン
プレビュー共有期限付きリンク(1 / 3 / 7 / 14 日)+ Access One-time PIN + 取り消し
メール通知Email Sending(send_email・認証付き Email Worker)+ Email Routing API
投稿者申請/apply → Email 検証 → 管理者承認 → Access ポリシー自動追加
CSSTailwind CSS v3 + Typography plugin
Markdownmarked + DOMPurify (XSS 対策)
言語TypeScript 5.7 (フルスタック型安全)
CI/CDGitHub Actions → D1 マイグレーション → Queue Consumer Worker → Cloudflare Pages