メニュー

東京・小金井市のWEB制作会社の豆知識

MEMORANDUM

googleの「Apps Script」を使ってフォームの内容をスプレッドシートに保存

メールフォームからの問い合わせデータ。アナログの集計が手間なのでDBを使って保存していたのだけれど、簡単に共有したいとのことでスプレッドシートに保存した際の方法をメモ。

Apps Scriptの利用方法

Apps Scriptの利用には「googleアカウント」が必要となるため、お持ちでない方は取得してから操作を行ってください。

スプレッドシートの準備

新しいスプレッドシートを作成し、1行目に、取得したい項目名を入力(例:タイムスタンプ、 お名前、 メールアドレス、 お問い合わせ内容)

Apps scriptの作成

スプレッドシートの「拡張機能」から「Apps Script」を開いて、コードを以下の内容に書き換えて帆保存し、「デプロイ」から「新しいデプロイ」選択して進む。
今回はメールフォームに組み込むのでアクセス出来るユーザーを「全員」にしていしてデプロイ。
WEBアプリURLが発行されるので、コピーしておいて後でPHPのソースコード内で使用する

Apps Script

function doPost(e) {
	try {
		var params = JSON.parse(e.postData.contents);
		var SECRET_KEY = "○○○○"; 

		if (!params.access_key || params.access_key !== SECRET_KEY) {
			return ContentService.createTextOutput(JSON.stringify({ "result": "error", "error": "Unauthorized" })).setMimeType(ContentService.MimeType.JSON);
		}

		var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("対象のシート名");
		var timestamp = new Date(); // 送信日時
    
		sheet.appendRow([
			timestamp, 
			params.name, 
			params.email, 
			params.message
		]);
    
		// 4. 成功した旨を返却
		return ContentService.createTextOutput(JSON.stringify({ "result": "success" })).setMimeType(ContentService.MimeType.JSON);
                         
	} catch (error) {
		// システムエラーが発生した場合
		return ContentService.createTextOutput(JSON.stringify({ "result": "error", "error": error.toString() })).setMimeType(ContentService.MimeType.JSON);
	}
}

メールプログラムへの導入

PHP

$data = array(
	'access_key' => '○○○○', // Apps Script側で設定したのと「全く同じ」パスワード
	'name' => $data["name"],
	'email' => $data["email"],
	'message' => $data["message"]
);

$gas_url = "https://script.google.com/△△△△/exec"; // Apps ScriptのWebアプリURL

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $gas_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); // JSON文字列に変換
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain')); // Apps Script受信用
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // GASのリダイレクト(302)を追跡するために「必須」
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // レンタルサーバーの環境に応じてSSL検証をスルー

$response = curl_exec($ch);
curl_close($ch);

上記ソースコードをフォームからのメール送信プラグラムの中に記載。
フォームから受け取った値を適切に処理してから「$data」に格納。
「access_key」の箇所は受け取り側のスクリプト(Apps Script)が、外部からの干渉を受けないための保護対策
「CURLOPT_SSL_VERIFYPEER」の項目は「true」の方が安全だが、一部サーバー環境により動かない時のためにサンプルは「false」にしています。

WebアプリURLの変更・削除

使用条件を変更する場合や、使わなくなった場合は「デプロイ」から「デプロイを管理」に進み右上の編集またはアーカイブ(ゴミ箱)ボタンより作業をおこなう。

Apps Scriptの利用は「googleアカウント」を持っていれば、誰でも無料で使用できるが利用制限があるため、規模が合わない場合は別の方法を考える必要がある

機能一般ユーザー向けアカウント(gmail.com など)Google Workspace
アカウント
スクリプトの実行時間6 分 / 実行6 分 / 実行
ユーザーあたりの同時実行数30 / ユーザー30 / ユーザー
RANKING

人気記事

同一カテゴリーの記事