第6章:Cloudflare Pages / Functions / R2 運用標準
WordPress でプラグイン(Contact Form 7 等)に頼っていたフォーム処理やファイル配信を、Cloudflare のサーバーレス機能(Functions / R2)で安全かつ高速に実装します。
環境変数(.env)の管理ルール
Section titled “環境変数(.env)の管理ルール”API キーなどの機密情報を GitHub に流出させないための絶対ルールです。
| 環境 | 設定場所 | 備考 |
|---|---|---|
| ローカル開発 | 各自 PC の .env ファイル |
.gitignore に記載し、絶対に GitHub へプッシュしない。(.env.example のみ共有) |
| 本番環境 (Production) | Cloudflare ダッシュボード > Pages > 設定 > 環境変数(本番) | MICROCMS_API_KEY などを登録 |
| プレビュー環境 (Preview) | Cloudflare ダッシュボード > Pages > 設定 > 環境変数(プレビュー) | 本番と同じ、または検証用 API キーを登録 |
お問い合わせフォーム標準(Cloudflare Pages Functions)
Section titled “お問い合わせフォーム標準(Cloudflare Pages Functions)”サイトに必須のお問い合わせフォームは、外部のフォームサービスを使わず、Cloudflare Pages Functions(SSR エンドポイント) で完結させます。
配置場所:src/pages/api/contact.ts(Astro の Hybrid モード / API エンドポイント)
import type { APIRoute } from 'astro';
export const prerender = false; // このエンドポイントのみサーバーサイド(SSR)で実行
export const POST: APIRoute = async ({ request }) => { try { const data = await request.formData(); const name = data.get('name')?.toString(); const email = data.get('email')?.toString(); const message = data.get('message')?.toString();
// 1. バリデーション if (!name || !email || !message) { return new Response(JSON.stringify({ error: '必須項目が未入力です。' }), { status: 400 }); }
// 2. メール送信処理(例: Resend や SendGrid 等のAPIを叩く) /* await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.RESEND_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ from: 'info@yourdomain.com', to: 'contact-receive@yourdomain.com', subject: `【Webお問い合わせ】${name}様より`, text: `お名前: ${name}\nメール: ${email}\n\n内容:\n${message}`, }), }); */
return new Response(JSON.stringify({ success: true, message: '送信が完了しました。' }), { status: 200 }); } catch (error) { return new Response(JSON.stringify({ error: 'サーバーエラーが発生しました。' }), { status: 500 }); }};大容量アセット配信標準(Cloudflare R2)
Section titled “大容量アセット配信標準(Cloudflare R2)”大学のシラバス・入試要項 PDF、BtoB のホワイトペーパー・製品カタログ、会社説明動画など、容量が数 MB〜数十 MB を超えるファイルは Cloudflare R2(オブジェクトストレージ) を利用します。
[クライアント / 制作チーム] ──(アップロード)──► 【Cloudflare R2 バケット】 │ ├─ AWS S3等と違い「データ転送料(Egress料金)が完全無料」 └─ 独自ドメイン(assets.example.com)を割り当てて配信R2 運用の標準ルール
Section titled “R2 運用の標準ルール”- 公開バケットの作成
- Cloudflare ダッシュボード > R2 > バケットを作成(例:
clientname-assets)。
- Cloudflare ダッシュボード > R2 > バケットを作成(例:
- カスタムドメインの設定
- バケット設定の「パブリックアクセス」から、
assets.clientname.comなどのサブドメインを割り当てます。
- バケット設定の「パブリックアクセス」から、
- HTML / Astro 内でのリンク記述
- リポジトリ内には重いファイルを置かず、URL 参照のみで記述します。
<!-- リポジトリを圧迫せず、何万回ダウンロードされても転送料金ゼロ --><a href="https://assets.clientname.com/pdf/admission-guide-2026.pdf" target="_blank" class="download-link"> 入試要項(PDF / 15MB)をダウンロード</a>独自ドメインと SSL / DNS の標準ルール
Section titled “独自ドメインと SSL / DNS の標準ルール”- ドメイン管理(Cloudflare DNS)
- ネームサーバーを Cloudflare に向けることで、完全無料・自動更新の SSL 証明書、DDoS 攻撃防御、CDN キャッシュ、高速 DNS(1.1.1.1) がすべて一元管理されます。
- Pages への割り当て
- Pages プロジェクト > 「カスタムドメイン」 > ドメイン名(例:
www.clientname.co.jp)を入力するだけで、DNS レコードの設定から SSL 発行まで全自動で完了します。
- Pages プロジェクト > 「カスタムドメイン」 > ドメイン名(例: