GmailMessage.getDate()で始めるWebアプリ開発:フォーム送信時間の記録と活用
Webアプリ開発において、フォームの送信時間を正確に記録し、それを活用することは、業務効率化やデータ分析において非常に重要です。特に、GmailMessage.getDate()関数を使うことで、Gmailに届いたフォーム送信メールの受信日時を簡単に取得できます。この記事では、GmailMessage.getDate()関数の基本的な使い方から、Webアプリ開発における具体的な利用例、よくある問題とその解決策、さらにカスタマイズ方法までを詳しく解説します。
GmailMessage.getDate()関数の基本
GmailMessage.getDate()関数は、GmailAppクラスのGmailMessageオブジェクトが持つメソッドの一つで、メールの受信日時をDateオブジェクトとして返します。
getDate()の構文
message.getDate();
messageはGmailMessageオブジェクトです。この関数は引数を必要としません。
戻り値
メールの受信日時を表すDateオブジェクト
Webアプリ開発での利用シチュエーション
フォームの送信時間記録は、顧客対応の迅速化、データ分析、業務プロセスの改善に役立ちます。例えば、フォームからのお問い合わせに対する返信速度を計測したり、特定の時間帯にアクセスが集中する傾向を把握したりすることができます。
GmailMessage.getDate()の実装例
1. フォーム送信時間をスプレッドシートに記録する
フォーム送信時にGmailに送信されるメールから、送信時間を抽出し、スプレッドシートに記録する例です。
function recordFormSubmissionTime() {
// スプレッドシートIDとシート名を指定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "Form Responses";
// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);
// Gmailを検索する条件(送信元のメールアドレスなど)
const searchQuery = "from:your_form@example.com subject:新しいフォームの回答";
// Gmailを検索
const threads = GmailApp.search(searchQuery, 0, 1); // 最新の1件を取得
if (threads.length > 0) {
const messages = threads[0].getMessages();
const message = messages[messages.length - 1]; // 最新のメールを取得
const submissionDate = message.getDate();
// 日時をスプレッドシートに書き込む
sheet.appendRow([submissionDate]);
}
}
2. 特定の期間内のフォーム送信数をカウントする
特定の期間内に受信したフォーム送信メールの数をカウントする例です。
function countFormSubmissions(startDate, endDate) {
// Gmailを検索する条件
const searchQuery = "from:your_form@example.com subject:新しいフォームの回答 after:" + startDate.toISOString().substring(0, 10) + " before:" + endDate.toISOString().substring(0, 10);
// Gmailを検索
const threads = GmailApp.search(searchQuery);
// スレッド数を返す(=フォーム送信数)
return threads.length;
}
使用例:
function main() {
const startDate = new Date("2024-01-01");
const endDate = new Date("2024-01-31");
const submissionCount = countFormSubmissions(startDate, endDate);
Logger.log("2024年1月1日から1月31日までのフォーム送信数: " + submissionCount);
}
3. フォーム送信時間に基づいてタスクの優先順位を決定する
受信したフォーム送信メールの時間に基づいて、タスクの優先順位を決定する例です。
function prioritizeTasks() {
// スプレッドシートIDとシート名を指定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "Tasks";
// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);
// Gmailを検索する条件
const searchQuery = "from:your_form@example.com subject:新しいフォームの回答";
// Gmailを検索
const threads = GmailApp.search(searchQuery, 0, 5); // 最新の5件を取得
// タスクリストをクリア
sheet.clearContents();
sheet.appendRow(["フォーム送信時間", "優先度"]);
//フォームの受信時間から優先度を決定
if (threads.length > 0) {
threads.forEach(thread => {
const messages = thread.getMessages();
const message = messages[messages.length - 1];
const submissionDate = message.getDate();
const now = new Date();
const diff = now.getTime() - submissionDate.getTime();
const diffHours = diff / (1000 * 60 * 60);
let priority = "低";
if (diffHours <= 1) {
priority = "高";
} else if (diffHours <= 6) {
priority = "中";
}
sheet.appendRow([submissionDate, priority]);
});
}
}
よくある問題とトラブルシューティング
- 日付の形式が期待どおりにならない:
Utilities.formatDate()関数を使用して、日付の形式を整えましょう。 - タイムゾーンの問題:
SpreadsheetApp.getActive().getSpreadsheetTimeZone()でスプレッドシートのタイムゾーンを確認し、必要に応じて調整します。 - 権限エラー:スクリプトを実行するユーザーに、Gmailへのアクセス権があることを確認してください。
カスタマイズ方法と応用例
- 特定の条件でメールをフィルタリングする:GmailApp.search()の検索条件をカスタマイズすることで、特定のキーワードを含むメールや、特定の送信者からのメールのみを処理できます。
- 複数のフォームに対応する:フォームの種類ごとに異なる処理を行うようにスクリプトを修正できます。
- 送信時間を元にグラフを作成する:スプレッドシートのデータから、時間帯ごとのフォーム送信数をグラフ化し、視覚的に分析できます。
まとめ
GmailMessage.getDate()関数を活用することで、フォーム送信時間を簡単に取得し、Webアプリ開発における様々な業務課題を解決できます。この記事で紹介したコード例を参考に、ぜひご自身のWebアプリに組み込んでみてください。

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう