Studioから静的サイトへ移した場合、FormspreeやCloudflare Workersでお問い合わせフォームを作れますか?

結論

作れます。HTMLのフォームの送信先をFormspreeに向ける方法と、Cloudflare Workersで受け取る処理を自分で書く方法の2通りです。コードをほとんど書かずに済ませたいならFormspree、通知メールや回答の保存先まで自分で決めたいならWorkersが合います。

microCMSへの移行更新日

FormspreeとCloudflare Workersはどちらでフォームを作ればいいですか?

「Studioのときのように、画面の設定だけで問い合わせを受けたい」という人には、Formspreeのほうが近い使い心地です。HTMLのformタグにあるaction属性へ専用のエンドポイントを記載し、各入力項目にname属性を割り当てるだけでフォームが完成します。バックエンドのコードを書く必要がなく、受信したデータは専用ダッシュボードで一覧管理できます。

無料で使える範囲は次のとおりです。

項目FreePersonal
月の送信数50件200件
回答履歴の保存30日
登録できるメール2件
複数の宛先へ同時に送るなしあり

登録できるメールが2件あっても、1件の問い合わせを2人に同時に届けられるわけではありません。複数人に同時に届けたいなら、Personal以上が必要です(Formspreeの料金表)。

一方、Cloudflare Pages Functionsを利用する場合、受信用の関数(functions/api/submit.jsなど)を作成し、POST送信されたフォームデータを受け取る仕組みを自前で実装します。ただし、Cloudflareの公式サンプルコードは受け取った値をJSON形式で返す処理が中心で、データベースへ履歴を自動保存する仕組みまでは含まれていません。なお、Cloudflareでは、あらかじめアカウント内で検証を済ませた宛先へのメール送信であれば、Workersの無料プラン・有料プランを問わず追加料金なしで利用できます。

コードを書いて直せる人が身近にいればWorkers、いなければFormspreeで決めてよいでしょう。

Cloudflare Workersでフォームの内容をメール送信するにはどうしますか?

Cloudflare Workersを使って、フォームから送信されたメッセージをメールとして受け取るにはどのような準備を行えばよいのでしょうか。

基本となる流れは、Wranglerの設定ファイルにメール送信用のバインディングを追加し、Workerのスクリプトからメール送信処理を呼び出す形です。つまり、設定ファイル内でsend_emailバインディングを定義したうえで、コード側からsend()メソッドを実行します。このとき、Workersのメール送信設定でdestination_addressを指定しておくと、そのバインディングから送信できる宛先をあらかじめ決めた単一のアドレスに固定できます。指定したアドレス1件にしか送れなくなるので、コードに不具合があってもほかの人へ届く心配がありません。

料金は、宛先がアカウントで確認済みのアドレスかで変わります。

  • 確認済みの宛先へ送る:Workers FreeでもPaidでも無料。Email Routingだけを設定している場合も対象
  • 確認していない任意の宛先へ送る:Workers Paidが必要

担当者への通知は前者、入力した人への控えは後者に当たるため、同じ無料条件では考えられませんね。

もうひとつ、メールを送る処理とは別に書くものがあります。入力欄が空でないか、メールアドレスの形になっているかといった確認と、送信後に完了ページへ移す処理です。Turnstileでスパムを防ぐ場合は、メールを送る前にサーバー側でトークンを確かめる処理も加えます。

フォームのスパム対策にCloudflare Turnstileを使うにはどうしますか?

たとえば、歪んだ英数字の入力や信号機の写真を選ぶテストを訪問者に強いることなく、機械的なスパム送信だけを静かに遮断したい場面はよくあります。Cloudflare Turnstileは、利用者に面倒な課題を解かせずにボットを検出できるCAPTCHAの代替サービスです。

Workersで自分で検証する場合の流れは、3段階です。

  1. Cloudflareの管理画面でウィジェットを作り、HTMLに書く公開のサイトキーと、サーバーで使う秘密キーを受け取る(Turnstileの始め方)
  2. フォームのHTMLで公式のapi.jsを読み込み、cf-turnstileクラスとdata-sitekeyを持つ要素を置く。送信時にはcf-turnstile-responseという隠し入力でトークンが届く(ウィジェットの置き方)
  3. Workers側でTurnstileの検証用エンドポイント(siteverify)へPOSTし、secretに秘密キー、responseに受け取ったトークンを渡す。結果を見て送信を通すか断るかを決める(サーバー側の検証)

3つ目を省くと、画面に確認欄が出ていてもフォームは守られません。また、秘密キーはHTMLなどブラウザで見えるコードに書かないでください。トークンは作られてから300秒で切れ、検証できるのも1回だけです。入力に時間がかかった人には、新しいトークンを取り直してもらいます。

Formspreeを使うなら、もっと手軽です。フォーム設定でCAPTCHA保護を有効にし、Cloudflare Turnstileを選んで秘密キーを登録します。あとはHTMLにウィジェットを足すだけで、トークンの検証はFormspreeが引き受けます。

Studioのフォームから移すとき、何に気をつければいいですか?

「フォームの設定も、これまでの回答も一緒に持っていける」と考えていると、移した後で困ります。Studioのフォームではダッシュボード上での一覧確認に加えて、メール通知やスプレッドシート連携が用意されていました。この受け取り方は移行先に自動では移らないので、今どの経路で回答を見ているかを書き出してから作り直してください。

特にファイルの添付機能については、管理画面からダウンロードする形式をとっており、通知メール本文にファイルの実体やダウンロード用リンクは届かない仕組みでした。過去の添付が必要なら、プロジェクトを閉じる前に手元へ保存しておきます。静的サイトへ移る際は、添付ファイルをメールに直接添付して受信するのか、外部ストレージに保存するのかをあらかじめ決めておく必要があります。

スプレッドシート連携は、解除してから連携し直すまで回答がシートに入りません。その間はStudioへの保存が有効なら管理画面に残り、無効なら設定済みの通知先メールにしか届きません。切り替え作業の前に、通知先がいまも読まれているアドレスか見直してください。

さらに、個人情報の取り扱い方針も見直しておきたいところです。2026年10月に公表されたStudioの不正アクセス事案では、保存されていたフォームの送信内容が、暗号化していた分も含めて知られた可能性があるとされています。添付はファイル名だけが対象で、ファイル本体は含まれていません。あわせて、Formspreeの無料プランを利用する場合、通知先の登録上限は2件までで、回答履歴が保管される期間は30日間に制限されます。回答を残す場所は少ないほうが、何かあったときに確かめる範囲も狭くて済みますね。静的サイトへ切り替えるタイミングで、回答内容を外部サーバーに残し続けるのか、通知メールの送受信のみに絞って履歴を保持しない設計にするのか、運用体制に合わせて方針を定めておきましょう。

こんな聞き方も

  • 静的サイトに移した場合、FormspreeやCloudflare Workersでフォームを作れますか?
  • Cloudflare Workersでフォームの内容をメール送信するにはどうしますか?
  • Cloudflare Workersでフォームからメールを送信するにはどうしますか?
  • Cloudflare Workersでお問い合わせフォームを実装するにはどうしますか?
  • フォームのスパム対策にCloudflare Turnstileを使うにはどうしますか?
  • 静的サイト フォーム 作り方

あわせて知りたい(関連する疑問)

QFormspreeの無料枠を超えるとフォームは止まりますか?

無料枠の上限である月間50件を超えてしまった場合、サイトを訪れたユーザーの送信操作はエラーになって止まってしまうのでしょうか。

月間上限に達しても、サイト上のフォーム自体がエラー画面を表示して停止することはありません。訪問者側からは通常どおり送信が完了したように見えます。しかし、上限を超えた分はOver Limitというフォルダーに入り、通知メールの送信と連携プラグインの実行が止まります(上限超過時の扱い)。訪問者には何も起きないので、運営する側が気づくのが遅れがちです。通知メールが急に来なくなったら、まず管理画面のOver Limitを開いてみてください。

枠外となったデータを確認して処理を再開させたい場合は、翌月に送信枠がリセットされたあとや有料プランへ切り替えたあとに、管理画面で対象データを選んで「Reprocess」を実行します。再処理を実行すると、当月の送信枠が1件ずつ消費され、通知や連携が実行されて通常の受信トレイへ移動します。無料プランにおけるデータの保管期限は30日間です。

もうひとつ知っておきたいのが、月間枠とは別に設定されている送信頻度の制限です。全プラン共通の規則として、1つのフォームにつき毎分20回までの送信上限が設けられています(Formspreeのシステム制限)。短時間のアクセス集中や連続送信によってこの制限を超過した場合は、保留フォルダーへの保存ではなく即座にエラーが返されるため、イベント応募などで瞬間的なアクセスが見込まれる際は注意してください。

QCloudflare Workersで、入力した人に自動返信メールを送れますか?

資料請求や問い合わせを受け付けた直後に、「お問い合わせを受け付けました」という控えメールを入力者のアドレスへ即座に届けたいケースがあります。Cloudflare Workersのスクリプト内から自動返信メールを送信すること自体は問題なく実装できます。ただ、Cloudflareの提供するEmail Serviceを用いて入力者へメールを届ける場合、プランの契約条件に注意しなければなりません。

入力した人のアドレスは、事前に確認していない任意の宛先です。Cloudflare Email Serviceでそこへ送るには、Workers Paidプランが必要になります。一方で、アカウント内の確認済みアドレスへの送信は全プランで無料で、含まれる送信枠も減りません。社内向けの通知は無料のまま、自動返信だけ有料プランが必要、という分かれ方ですね。

送り始める前に、送信元のドメインをCloudflare DNSで管理し、管理画面のEmail SendingからOnboard Domainを選んでEmail Serviceへの登録を済ませます。DNSのレコードを足しただけでは使えるようになりません。次に、Wranglerの設定ファイルに送信用の設定を記述し、受信処理のコード内でenv.EMAIL.send()を呼び出すことで、宛先・件名・本文を動的に組み立てて送信できます。公式の例は決まった宛先へ歓迎メールを送るものなので、宛先にフォームのメール欄の値を入れる部分は自分で組みましょう。

Cloudflareの送信機能を使わず、WorkersからResendを呼び出して送る方法もあります。この場合の料金や送信条件はResend側で決まるので、申し込む前に別に確かめてください。

QreCAPTCHAとTurnstileはどちらを使うべきですか?

Studioで使っていたreCAPTCHA v3をそのまま続けたいなら、Formspreeでも使えます(FormspreeのreCAPTCHA v3設定)。新しく入れるなら、Turnstileで困ることはほとんどありません。どちらもStudio側の設定は移行先へ移らないので、作り直す手間は同じです。

どちらのツールも、訪問者にパズルや画像認識を解かせることなく、バックグラウンドで人間かボットかを判定できる仕組みを備えています。TurnstileはCloudflareのCDNサービスを経由していない他社サーバー上の静的サイトであっても問題なく導入できますよ。

reCAPTCHA v3は、利用者の操作を止めずにリクエストごとのスコアを返し、そのスコアで通すか断るかをサイト側が決めます。しきい値は0.5あたりから始め、公開後のアクセスを見て調整します。

スコアの数字を見てしきい値を決めるのが面倒に感じるならTurnstile、すでにGoogleのキーと運用に慣れているならreCAPTCHA v3と考えると選びやすいでしょう。

QGoogleフォームやformrunをそのままStudioから引き継げますか?

「外部のフォームを埋め込んでいただけだから、新しいサイトにも貼り直せば済むはず」と考える人は多いと思います。半分はそのとおりで、半分は追加の作業が要りますね。Googleフォームの場合は、管理画面から取得できるiframe形式の埋め込み用HTMLを、移行先ページの適切な位置に配置するだけで設置が完了します。

その一方で、formrunをスクリプト形式で埋め込んでいる場合は、事前の設定確認を怠らないようにしたいところです。formrunには設置先URLの登録が要ります。正しく送信させるには、サイトへのアクセスに使うURLをすべてformrun側に登録しなければなりません。移行でドメインやパスが変わるなら、コードを貼り直すだけでは送信できないままです。httpsの有無やwwwの付く形も含めて登録してください(formrunの埋め込み設定)。

貼り終えたら、テストで入力して送信までしておくのが安全です。実際、formrunでは必須項目が未入力のまま送信された際にエラー表示によってフォーム全体の高さが変わり、送信ボタンが枠外に隠れてしまう事例があります。

出典

この内容をChatGPTで相談

無料診断