1. ホーム
  2. ブログ
  3. 移行の手順

お問い合わせフォームを PHP なしで動かす|Cloudflare Workers で作り直す流れ

公開
著者
編集部

WordPress のお問い合わせフォームは PHP で動いている。サイトを Cloudflare に移すときに、フォームを PHP なしで作り直す流れと、迷惑投稿・個人情報の注意点をまとめた。

この記事の流れ約30秒
この記事で分かること

お問い合わせフォームを PHP なしで動かす|Cloudflare Workers で作り直す流れ

  • フォームの見た目は HTML のまま。受け取る所だけを小さなプログラム(Cloudflare Workers)にする
  • 受け取ったら、入力を確かめ、保存し、担当者にメールで知らせる
  • 迷惑投稿は、ロボット確認(Turnstile)と送りすぎの制限で防ぐ
  • 個人情報を扱うので、保存の期間と、見られる人を決めておく
1 / 5

今のフォームはどう動いているか

WordPress のフォームは、だいたい次の流れで動いている

  • 見る人がフォームに書いて「送信」を押す
  • サーバーの PHP が内容を受け取る
  • PHP がメールを組み立てて、担当者に送る(自動返信も PHP が送る)
ここを読む
2 / 5

作り直したあとのしくみ

  • フォームの見た目:今と同じ HTML(静的サイトの1ページ)
  • 受け取る・確かめる:Cloudflare Workers
  • ロボットか確かめる:Cloudflare Turnstile(画像を選ばせない確認)
ここを読む
お問い合わせフォームを PHP なしで動かすしくみ
3 / 5

受け取るプログラムの例

受け取る所の中身は、たとえば次のくらいの長さになる(説明のために短くしている)

ここを読む
4 / 5

作り直す流れ

  • 今のフォームの項目・必須の項目・送り先・自動返信の文を書き出す
  • 同じ見た目のフォームを HTML で作る
  • 受け取るプログラム(Workers)を作り、ロボット確認と入力の確認を入れる
ここを読む
5 / 5

気をつけること

ここを読む

サイトを置くだけの形(静的サイト)にして Cloudflare に移すとき、一番の山になるのがお問い合わせフォームだ。WordPress の Contact Form 7 などは、送られた内容を PHP で受け取ってメールにしている。PHP をなくすなら、この部分を別の仕組みで作り直す必要がある。

この記事の要点
  • フォームの見た目は HTML のまま。受け取る所だけを小さなプログラム(Cloudflare Workers)にする
  • 受け取ったら、入力を確かめ、保存し、担当者にメールで知らせる
  • 迷惑投稿は、ロボット確認(Turnstile)と送りすぎの制限で防ぐ
  • 個人情報を扱うので、保存の期間と、見られる人を決めておく

今のフォームはどう動いているか

WordPress のフォームは、だいたい次の流れで動いている。

  1. 見る人がフォームに書いて「送信」を押す
  2. サーバーの PHP が内容を受け取る
  3. PHP がメールを組み立てて、担当者に送る(自動返信も PHP が送る)

PHP をなくすと、2と3を行う所がなくなる。そこで、この2つだけを Cloudflare Workers という小さなプログラムに任せる。

作り直したあとのしくみ

お問い合わせフォームを PHP なしで動かすしくみ
お問い合わせフォームを PHP なしで動かすしくみ
役割何で行うか
フォームの見た目今と同じ HTML(静的サイトの1ページ)
受け取る・確かめるCloudflare Workers
ロボットか確かめるCloudflare Turnstile(画像を選ばせない確認)
保存するCloudflare D1(データベース)
担当者に知らせる決めておいた宛先へのメール

Workers のプログラムは、フォームを受け取るだけなので短い。中身が短いほど、穴が入り込む余地も少なく、確かめるのも楽になる。

受け取るプログラムの例

受け取る所の中身は、たとえば次のくらいの長さになる(説明のために短くしている)。

export default {
  async fetch(request, env) {
    if (request.method !== "POST") return new Response("", { status: 405 });
    const form = await request.formData();
    // 長すぎる入力は受け取らない
    const name = String(form.get("name") || "").slice(0, 100);
    const email = String(form.get("email") || "").slice(0, 200);
    const message = String(form.get("message") || "").slice(0, 3000);
    if (!name || !/^[^@\s]+@[^@\s]+$/.test(email)) return new Response("入力を確かめてください", { status: 400 });
    // ロボット確認(Turnstile)の結果を確かめてから保存する
    await env.DB.prepare("INSERT INTO inquiries (name, email, message) VALUES (?, ?, ?)")
      .bind(name, email, message).run();
    return Response.redirect("https://example.com/thanks", 303);
  },
};

保存するときは、入力をそのまま SQL の文に混ぜず、? の場所に後から入れる(プリペアドステートメント)。こうすると、SQL インジェクションを防げる。考え方は PHP の PDO と同じだ。

作り直す流れ

  1. 今のフォームの項目・必須の項目・送り先・自動返信の文を書き出す
  2. 同じ見た目のフォームを HTML で作る
  3. 受け取るプログラム(Workers)を作り、ロボット確認と入力の確認を入れる
  4. 保存先(D1)と、担当者へのメールの宛先を決める
  5. 新しいフォームから試しに送り、届くこと・保存されることを確かめる
  6. サイトを切り替えたあと、本物の問い合わせが届いているか、数日見守る
切り替えた直後は二重に確かめる

フォームが動いていないことに、何週間も気づかないことがある。切り替えたあとは、自分で週に1回送ってみるか、届いた件数を見る画面を用意しておく。

気をつけること

迷惑投稿

フォームは、機械による迷惑投稿の的になりやすい。ロボット確認(Turnstile)を入れ、同じ相手からの送りすぎを止める。メールの本文にリンクがたくさんあるものを弾く、といった工夫もある。

自動返信

お客さんへの自動返信メールは、送り先が毎回変わる。担当者への通知とは別に、メールを送るサービスを組み合わせる。送る元のドメインには SPF・DKIM・DMARC を設定しておかないと、迷惑メールに振り分けられやすい。

添付ファイル

ファイルを受け取るフォームは、作りが重くなる。乗っ取りの入口にもなりやすい(PHP のアップロードの脆弱性と同じ考え方)。どうしても要るなら、受け取れる種類と大きさを絞り、保存先も分ける。

個人情報

  • 保存しておく期間を決め、過ぎたら消す
  • 管理画面で見られる人を決め、2段階認証を使う
  • プライバシーポリシーに、何のために使い、いつまで持つかを書く

よくある質問

今の Contact Form 7 は、そのまま使えませんか?

Contact Form 7 は PHP で動くので、PHP をなくすと使えなくなります。
見た目は同じにして、受け取る所だけを作り直します。

迷惑投稿は増えませんか?

ロボット確認(Turnstile)と、同じ相手からの送りすぎの制限を入れれば、WordPress のときより減ることが多いです。

お客さんへの自動返信もできますか?

できます。
担当者への通知とは別に、メールを送るサービスを組み合わせます。
送る元のドメインに SPF・DKIM・DMARC を設定しておくと、迷惑メールに入りにくくなります。

無料ツールPHP2Shell 脆弱性チェッカーPHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かります。

参考にした情報

この記事の情報

2026年10月22日時点の公開情報にもとづく。脆弱性の情報や各サービスの機能は変わることがあるので、最新は公式のページを確認すること。Cloudflare は Cloudflare, Inc. の商標で、PHPチェッカーは Cloudflare の公式のサービスではない。

今のフォームの項目と送り先を確かめてから、PHP なしで動かす形と費用を伝える。見積もりは無料。

無料で移行を相談する

この記事の著者

編集部