Contactフォーム実装作戦Google Apps Script× WordPress④

Contactフォーム実装作戦Google Apps Script× WordPress④

Operation Log No.04 / Phase 04 — Contact Form
Contactフォーム
実装作戦
Google Apps Script
× WordPress
2026.03 Operator : 猫工艦 AI Support : Claude Phase 04 / Contact Form
ブランドサイトに問い合わせ窓口は不可欠だ。しかしWordPressの標準プラグインでは、デザインの一貫性が保てない。そこで選んだのはGoogle Apps Script + Google スプレッドシートを使ったバックエンド構成だ。プラグインゼロ、データはGoogleで管理、デザインは完全カスタム。この作戦の全記録を公開する。
なぜプラグインを使わないのか

WordPressにはContact Form 7やWPFormsなど、定番のフォームプラグインがある。しかし今回の構成では使わない判断をした。理由は明確だ。

このサイトはカスタムHTMLブロックで完全にデザインをコントロールする戦術を採用している。プラグインが生成するフォームHTMLは独自のクラス構造を持ち、ブランドのデザインシステムと統合するのが難しい。スタイルの上書きに膨大なCSSが必要になる。

ならば最初から自分でHTMLフォームを書き、バックエンドだけGoogle Apps Scriptに任せる構成の方がシンプルで強固だ。

✓ 採用した構成の利点
・フォームのHTML/CSSを100%カスタマイズ可能
・WordPressにデータを保存しない(セキュリティ上有利)
・問い合わせデータはGoogleスプレッドシートで一元管理
・プラグインゼロ → サイトが軽量に保たれる
・Google Apps ScriptはGoogleアカウントがあれば無料
システム構成 — データの流れ

構成はシンプルだ。フォームの送信データがGoogle Apps Scriptを経由し、Googleスプレッドシートに記録される。同時にメール通知も飛ぶ。

Architecture — Data Flow
FORM
WordPress
カスタムHTML
FETCH
JavaScript
非同期送信
GAS
Google Apps
Script
SHEET
Google
スプレッドシート
FORM
dummy
FETCH
dummy
MAIL
Gmail
自動通知

フォームはページ遷移なしの非同期送信(fetch API)で処理する。送信後はフォームを非表示にして完了メッセージを表示するUXだ。ページリロードが発生しないため、体験がスムーズになる。

実装手順 — Google Apps Script側の設定
01
Googleスプレッドシートを作成
Google ドライブで新規スプレッドシートを作成。列見出しを「タイムスタンプ / お名前 / メールアドレス / お問い合わせ内容」に設定。このシートが問い合わせデータベースになる。
02
Apps Scriptエディターを開く
スプレッドシートのメニューから 「拡張機能 → Apps Script」 を選択。スクリプトエディターが開く。ここにバックエンドのコードを書く。
03
doPost関数を実装
フォームからのPOSTリクエストを受け取り、スプレッドシートに書き込み、メール通知を送るコードを記述。CORSヘッダーの設定も必須。
Google Apps Script — doPost関数
function doPost(e) {
  var sheet = SpreadsheetApp
    .getActiveSpreadsheet()
    .getActiveSheet();
  var data = JSON.parse(e.postData.contents);
  sheet.appendRow([
    new Date(),
    data.name,
    data.email,
    data.message
  ]);
  MailApp.sendEmail({…});
  return ContentService
    .createTextOutput(JSON.stringify({result:’ok’}))
    .setMimeType(ContentService.MimeType.JSON);
}
04
Webアプリとしてデプロイ
「デプロイ → 新しいデプロイ → Webアプリ」 を選択。アクセス権限を「全員(匿名を含む)」に設定してデプロイ。発行されるURLがフォームの送信先エンドポイントになる。このURLは外部に漏らさない。
実装手順 — WordPress側のフォームHTML

ContactページのカスタムHTMLブロックに、フォームHTMLとJavaScriptを記述する。フォームはブランドのデザインシステムに完全準拠したスタイルで実装した。

JavaScript — 非同期送信処理
document.getElementById(‘nk-contact-form’)
  .addEventListener(‘submit’, async function(e) {
    e.preventDefault();
    const data = {
      name: form.name.value,
      email: form.email.value,
      message: form.message.value
    };
    const res = await fetch(GAS_URL, {
      method: ‘POST’,
      body: JSON.stringify(data)
    });
    // 完了メッセージを表示
    showComplete();
});
重要: GAS_URLはスクリプト内にハードコードするが、公開リポジトリやコードに直接書くのは避ける。定数として先頭で定義し、デプロイURLが変わった際に一箇所だけ修正できる構成にしておく。
デザイン — ブランドと統合したフォーム

Contactページのデザインは、サイト全体のデザインシステムに完全準拠させた。黒背景・ゴールドアクセント・Bebas Neue・Share Tech Mono。フォームのinputフィールド・テキストエリア・送信ボタンすべてがブランドカラーで統一されている。

送信ボタンは通常時はゴールド(#b8922a)だが、送信中はテキストが「SENDING…」に変わり、操作不能になるUXを実装した。完了後はフォームを非表示にして完了ブロックを表示する。これによりページ遷移なしで完結する体験を実現した。

「プラグインを使わないことで、フォームのデザインがサイトの世界観と完全に一致した。
問い合わせフォームも、戦術の一部だ。」 — 実装完了後の所感
動作確認 — デプロイ済み・受信確認済み

実装完了後、実際にフォームからテスト送信を行い、以下をすべて確認した。

フォーム送信 → スプレッドシートへの記録
送信データが正しいフォーマットでスプレッドシートの新規行に追記される。タイムスタンプ・名前・メール・本文がすべて正常に記録されることを確認。
Gmailへの自動通知メール
送信と同時にGmailに通知メールが届くことを確認。件名・本文・送信者メールアドレスが正しく含まれている。
完了メッセージの表示
送信成功後にフォームが非表示になり、「お問い合わせありがとうございます」の完了ブロックが表示されることを確認。
Phase 04 — Mission Result
  • プラグインゼロのカスタムContactフォームを実装完了
  • Google Apps Script + Googleスプレッドシートによるバックエンド構成を確立
  • fetch APIによる非同期送信(ページ遷移なし)を実現
  • Gmail自動通知メールの受信を確認済み
  • フォームデザインをブランドシステム(黒×ゴールド)に完全統合
  • テスト送信によりエンド・ツー・エンドの動作を確認済み
← Prev Mission
No.03 — テーマ移行作戦
記事を読む
Next Mission →
No.05 — AIと作る時代の考察
— OFFICIAL STORE —
FIELD TO STREET // 着る、戦術。
NECOKOUCAN SHOP
ミリタリーグッズ・オリジナルTシャツ・全アイテムはこちら
T-TRINITY| PREMIUM TEE| ¥4,400〜
ENTER SHOP →
ttrinity.jp
NECOKOUCAN — EST. 2023 — FUKUOKA