カレンダーで誕生日リマインダーを自動作成

カレンダーで誕生日リマインダーを自動作成

記事
IT・テクノロジー
カレンダーで誕生日リマインダーを自動作成

こんにちは、GASおじです。今日は中小企業の経営者やフリーランスの皆さんに向けて、「Googleカレンダーで誕生日リマインダーを自動作成する方法」をGAS(Google Apps Script)でご紹介します。これを使えば、大切な取引先やスタッフの誕生日をうっかり忘れる心配なし。しかも追加のSaaS料金は発生せず、Googleアカウントの利用枠内で運用できます。もちろんApps Scriptのquotaや実行上限はあるので適切に運用しましょう。


■ なぜGASで誕生日リマインダー自動化?

誕生日管理は重要ですが、手作業で更新したりリマインダーを設定するのは手間とミスのもと。GASを使って誕生日データを読み込み、Googleカレンダーにリマインダーを作成すれば、ミスなく確実に通知が届きます。

ただし、既存のカレンダーイベントを全消去したり削除APIでごっそり消すのはリスク大。そこでおじさんは、過去のデータを残しつつ、更新分だけ新しい日時付きシートに書き出す方法を推奨します。変更内容のバックアップやロールバックもしやすいですよ。


■ 初期設定と必要な権限

・Googleスプレッドシート準備 誕生日リストを管理するスプレッドシートを用意します。例えば以下のように「名前」「誕生日(yyyy-mm-dd形式)」の2列をA1:Bで管理。
・Googleカレンダー作成 専用の誕生日リマインダー用カレンダーを作ると管理しやすいです。Googleカレンダーで新規カレンダーを作成し、カレンダーIDを控えましょう。
・GASプロジェクト作成 スプレッドシートのメニュー「拡張機能」→「Apps Script」でスクリプトエディタを開きます。
・スクリプトの権限設定 初回実行時にGoogleカレンダーとスプレッドシートの読み書き権限を求められます。必須なので許可してください。
・トリガー設定(Installable Trigger) 定期的に誕生日データをチェックしカレンダー更新するには、トリガーでスクリプトを週1回や月1回自動実行させるのが便利です。GASの「編集」→「現在のプロジェクトのトリガー」から設定してください。


■ 誕生日リストからカレンダーイベント作成のコード例

以下のコードは、誕生日リストを読み込み、新しい日時付きシートに処理ログを保存しながら、指定カレンダーに誕生日リマインダーイベントを追加します。既存カレンダーイベントの削除や上書きは行わず、新規作成のみを行う設計です。

function createBirthdayReminders() {
const SPREADSHEET_ID = 'あなたのスプレッドシートIDをここに入れる';
const BIRTHDAY_SHEET_NAME = '誕生日リスト';
const LOG_SHEET_PREFIX = '誕生日リマインダー_';
const CALENDAR_ID = 'あなたのカレンダーIDをここに入れる';

const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const birthdaySheet = ss.getSheetByName(BIRTHDAY_SHEET_NAME);
if (!birthdaySheet) {
throw new Error(`シート「${BIRTHDAY_SHEET_NAME}」が見つかりません`);
}

// データを取得(ヘッダー除く)
const data = birthdaySheet.getRange(2, 1, birthdaySheet.getLastRow() -1, 2).getValues();

// バックアップ・ロールバック用に日時付き新規シート作成
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const logSheetName = LOG_SHEET_PREFIX + timestamp;
const logSheet = ss.insertSheet(logSheetName);
logSheet.getRange(1,1,1,4).setValues([['名前','誕生日','イベントID','メッセージ']]);

const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
if (!calendar) {
throw new Error('指定したカレンダーIDが存在しません');
}

// バッチでイベント作成
const eventsToCreate = [];
data.forEach(row => {
const [name, birthdayStr] = row;
if (!name || !birthdayStr) {
// 入力検証:空欄はスキップ
logSheet.appendRow([name, birthdayStr, '', '名前または誕生日が空白のためスキップ']);
return;
}
const birthday = new Date(birthdayStr);
if (isNaN(birthday.getTime())) {
logSheet.appendRow([name, birthdayStr, '', '誕生日が日付として無効']);
return;
}

// 今年の誕生日の日付に変更
const now = new Date();
birthday.setFullYear(now.getFullYear());

// イベントタイトルと開始日時(終日イベント)
const title = `🎉 ${name}さんの誕生日`;
const startDate = new Date(birthday.getFullYear(), birthday.getMonth(), birthday.getDate());
const endDate = new Date(startDate);
endDate.setDate(endDate.getDate() + 1);

eventsToCreate.push({title, startDate, endDate, name, birthdayStr});
});

// ここで一括作成
eventsToCreate.forEach(ev => {
try {
const event = calendar.createAllDayEvent(ev.title, ev.startDate, {description: `誕生日リマインダー: ${ev.name}`});
logSheet.appendRow([ev.name, ev.birthdayStr, event.getId(), '作成成功']);
} catch(e) {
logSheet.appendRow([ev.name, ev.birthdayStr, '', `作成失敗: ${e.message}`]);
}
});

Logger.log(`誕生日リマインダー処理完了。ログシート「${logSheetName}」を確認してください。`);
}


□ ポイント解説

・既存イベントの削除や上書きはしない 誕生日イベントは重複する場合がありますが、削除APIは使わず、ログシートで管理・確認します。
・入力検証 名前や日付が空白、もしくは不正ならログに記録しスキップ。
・バックアップ・ロールバック 処理結果はすべて日時付きの新規シートに記録。万が一のトラブル時に状態把握や復元に役立ちます。
・バッチ処理 イベント作成はまとめて行いますが、Apps Scriptの制限に注意してください。


■ 個人情報の取り扱いについて

誕生日は個人情報に該当する場合があります。スプレッドシートやカレンダーの共有設定は必要最小限にとどめ、不特定多数に公開しないように管理してください。GASの実行権限も信頼できるユーザーのみに付与しましょう。


■ 復元手順について

今回のスクリプトは既存データを消さず、新規にログシートを作成しています。万一誤ったイベントができてしまった場合は、Googleカレンダーウェブ版のゴミ箱(30日間保持)から個別に復元可能です。またログシートの情報をもとに手動で削除や修正を行ってください。


□ コスト削減シミュレーション(仮定)

・手動で1件の誕生日リマインダー設定に5分かかると仮定
・100件の誕生日を管理する場合、年間1回設定で500分=約8.3時間
・時給3,000円の人件費換算なら約25,000円/年のコスト削減に相当
追加のSaaS料金は不要で、Googleアカウントの利用枠内で動きます。ただしApps Scriptの実行時間やAPI呼び出し数のquotaはあるので大量処理は分割・スケジューリングで対応しましょう。

誕生日リマインダーの自動化で業務効率をアップして、無駄なコストも抑えたい方はぜひ試してみてください。GASのノウハウは他の業務自動化にも応用できますよ。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す