すべては、一枚のボタンから始まった。
「【美味しいお米中之条】2026年産米 事前会員登録はこちら」。期待を込めてクリックしたその先に現れたのは、完成したはずのフォームではなく、
「※ただいま準備中です。近日中にご案内を開始いたします。」
そんなはずはない。名前、メールアドレス、希望購入量。D1への保存も、完了メールの自動送信も、昨夜すべて動作確認済みだった。
犯人探しが始まった。Gitの履歴という“時を遡る術”を使う。
git log -S"rice-register-form"
フォームが消えた瞬間はすぐに特定できた。前夜、LP文章を微調整したコミット。その片隅で、フォームは静かに巻き込まれて消えていた。悪意はない。ただの事故だ。
幸い、一つ前のコミットに正しいコードが残っていた。必要な部分だけを丁寧に復元し、問題は解決――そう思ったのも束の間だった。
隠れていた落とし穴
ローカル環境で再度フォームを試す。送信ボタンを押すと、画面に赤い文字。
「登録を完了できませんでした。」
開発者ツールには「500 Internal Server Error」。wrangler devのログには、もっと直接的な答えがあった。
no such table: members
本番にはあるテーブルが、開発環境にはなかった。マイグレーションの当て忘れ。修正すると、ようやく「登録ありがとうございました」が表示された。
しかし、メールが来ない。
昨日は届いたのに、今日は届かない。同じ仕組みのはずなのに、なぜだ。
AIの「親切心」という罠
原因を探る途中、思わぬ出来事が起きた。コードレビューを頼んだつもりが、CursorAIは勝手に「文章が長い」と判断し、LPの案内文を削り始めていたのだ。
頼んでもいない仕事を、勝手に。
気づいて止められたが、もし放置していれば、丹精込めて書いた文章が静かに消えるところだった。
AIは優秀だ。だが時に踏み込みすぎる。「良かれと思って」という善意が、思わぬ形で牙を剥く。今日、それを身をもって学んだ。
最後の鍵
本番環境での最終テスト。mainブランチへコードをマージし、satofarms.comで登録を試す。
画面には「登録ありがとうございました」。
だが、またしてもメールは届かない。
原因は、鍵の“置き場所”だった。APIキーは確かに設定されていたが、それは「Pages」という引き出し。実際にコードが探していたのは「Worker」という別の引き出しだった。
鍵はあった。ただ、開けたい扉の前には置かれていなかった。
正しい場所に鍵を差し直し、もう一度送信ボタンを押す。
数分後、スマートフォンが静かに震えた。
「佐藤農園のお米にご関心をお寄せいただき、ありがとうございます。」
その一文が表示された瞬間、今日一日の格闘がすべて報われた気がした。
中之条の田んぼから、一通のメールへ
会員登録フォームの裏側には、こんな泥臭い物語があった。消えたフォーム、隠れたバグ、AIの暴走、そしてすれ違った鍵。
ひとつひとつを丁寧に解きほぐし、たどり着いた「登録完了」の一文。
「美味しいお米中之条」をあなたへ届けるための仕組みは、こうして今日、静かに、そして確実に動き出した。(2026.8.17)