GAS Date.setHoursで業務効率化!メール送信時間を自動調整
この記事では、Google Apps Script(GAS)のDate.setHours()関数を用いて、メール送信時間を自動調整し、業務効率を大幅に向上させる方法を解説します。特に、深夜や早朝のメール送信を避けたい、特定の時間帯にメールを送信したいといったニーズに応えるための具体的なコード例と、そのカスタマイズ方法を紹介します。
Date.setHours()関数の基本
Date.setHours()は、Dateオブジェクトの時間を設定する関数です。分、秒、ミリ秒も同時に設定できます。
date.setHours(hours, minutes, seconds, milliseconds);
hours: 設定する時間 (0-23)minutes: 設定する分 (0-59)seconds: 設定する秒 (0-59)milliseconds: 設定するミリ秒 (0-999)
この関数を使うことで、現在時刻に関わらず、指定した時間にメール送信処理を実行することが可能になります。
メール送信時間の自動調整の実装例
ここでは、Date.setHours()を使って、特定の時間帯にメールを送信する例を紹介します。例えば、営業日の午前9時から午後6時までの間にメールを送信するように設定します。
実装例1:営業日時間内のメール送信
function sendEmailDuringBusinessHours() {
// 現在の日時を取得
const now = new Date();
// 現在の時間を取得
let hours = now.getHours();
// 送信時間(時)を設定 (例: 午前9時)
let targetHour = 9;
// 現在時間が営業時間外の場合、翌営業日の午前9時に設定
if (hours < 9 || hours >= 18) {
// 翌日に設定
now.setDate(now.getDate() + 1);
// 時間を午前9時に設定
now.setHours(targetHour, 0, 0, 0); // 分、秒、ミリ秒も設定
}
// 設定された送信時間
const sendAt = now.getTime();
// メール送信をスケジュール (時間調整された時間で実行)
ScriptApp.newTrigger('sendScheduledEmail')
.timeBased()
.at(new Date(sendAt))
.create();
Logger.log('メール送信は ' + now + ' にスケジュールされました。');
}
function sendScheduledEmail() {
// メール送信処理
const recipient = 'recipient@example.com';
const subject = '【自動送信】営業日のお知らせ';
const body = 'いつもお世話になっております。
本日は営業日です。';
MailApp.sendEmail(recipient, subject, body);
Logger.log('メールを送信しました。');
}
このコードでは、sendEmailDuringBusinessHours()関数が実行されると、現在の時間が営業時間内かどうかをチェックし、営業時間外であれば、翌営業日の午前9時にメールが送信されるようにスケジュールします。sendScheduledEmail()関数が実際にメールを送信する処理を行います。
実装例2:特定の日時以降にメールを送信
function sendEmailAfterSpecificTime() {
// 特定の日時
const specificDate = new Date(2024, 10, 20, 10, 0, 0); // 2024年11月20日10時0分0秒
// 現在の日時
const now = new Date();
// 特定の日時より後かどうかを判定
if (now < specificDate) {
// 特定の日時になるまで待機
const timeDiff = specificDate.getTime() - now.getTime();
// トリガーを作成して特定の日時になったらメールを送信
ScriptApp.newTrigger('sendEmail')
.timeBased()
.after(timeDiff)
.create();
Logger.log('メール送信トリガーを ' + specificDate + ' に設定しました。');
} else {
// すでに特定の日時を過ぎている場合はすぐにメールを送信
sendEmail();
}
}
function sendEmail() {
// メール送信処理
const recipient = 'recipient@example.com';
const subject = '【自動送信】お知らせ';
const body = 'いつもお世話になっております。
お知らせがあります。';
MailApp.sendEmail(recipient, subject, body);
Logger.log('メールを送信しました。');
}
この例では、指定された日時(specificDate)以降にメールを送信します。現在時刻がspecificDateより前であれば、トリガーを作成して指定時刻にsendEmail()関数を実行します。すでに指定時刻を過ぎている場合は、即座にメールを送信します。
よくある問題とトラブルシューティング
- 時間がずれる: タイムゾーンの設定を確認してください。GASのタイムゾーンはプロジェクトの設定で変更できます。「ファイル」→「プロジェクトのプロパティ」→「タイムゾーン」で設定します。
- トリガーが実行されない: トリガーの設定を確認してください。GASのダッシュボードでトリガーが有効になっているか、実行時間が正しいかなどを確認します。
- メールが送信されない: スクリプトの権限を確認してください。メール送信には権限が必要な場合があります。
カスタマイズ方法と応用例
- 祝日を考慮する: 祝日APIなどを利用して、祝日にはメールを送信しないように設定できます。
- 複数の時間帯を設定する: 複数の時間帯にメールを送信するように、条件分岐を追加できます。
- メールの内容を動的に変更する: スプレッドシートや他のデータソースから情報を取得して、メールの内容を動的に変更できます。
まとめ
Date.setHours()関数を使うことで、GASによるメール送信処理をより柔軟に制御し、業務効率を向上させることができます。この記事で紹介したコード例を参考に、ぜひご自身の業務に合わせてカスタマイズしてみてください。

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