カレンダーのタイムゾーンを自動調整する
こんにちは、GASおじです。今日はGoogleカレンダーのタイムゾーンを自動で調整する方法について話そうと思う。中小企業の経営者やフリーランスの皆さん、リモートワークや出張が増える中でカレンダーのタイムゾーン管理って地味に面倒じゃない?手動で直すのも手間だし、ミスがあると予定がズレて大変なことになる。
そこでGAS(Google Apps Script)を使って、カレンダーの予定をタイムゾーンに合わせて自動調整し、しかも元のデータは消さずに新しい日時付きシートに結果を書き出す仕組みを作ってみた。しかもGoogleアカウントの利用枠内で追加料金なし。SaaS課金に厳しいおじさんとしては、これが一番コスパいいと断言できる。
■ なぜタイムゾーン自動調整が必要か?
海外との打ち合わせや出張が多いと、カレンダーのタイムゾーンを毎回手動で直すのはミスのもと。例えば「日本時間で10時」と思ってたら、実は相手の現地時間で10時だった…なんてトラブルも起こりがち。
GASで自動化すれば、設定したタイムゾーンに合わせて予定がリストアップされるから見落としも減るし、作業時間も短縮できる。結果として効率アップ、ひいてはコスト削減にもつながるってわけだ。
■ 使い方と初期設定
・GoogleカレンダーAPIの有効化 GASエディタの「サービス」からGoogleカレンダーAPIを追加してください。
・必要な権限 カレンダーの予定を読み取る権限(Googleカレンダーの予定編集権限.readonly)が必要です。
・個人情報の取り扱い カレンダー情報は個人情報にあたるため、第三者に共有しないこと。スクリプトは自分のGoogleアカウント内で動かしましょう。
・installable triggerの設定 定期的にタイムゾーン調整をしたいなら、GASのトリガーで毎日や毎時間などに実行設定が可能です。
・復元手順 既存のカレンダーは直接編集しないので元には戻せます。念のため生成されるスプレッドシートのバックアップをGoogleドライブ上で管理してください。
■ 具体的なコード例
下記は、指定したカレンダーの予定を指定のタイムゾーンに変換し、結果を新しい日時付きスプレッドシートに書き出すサンプルコードです。既存のデータは一切変更しません。
function exportCalendarWithTimezone() {
const calendarId = 'primary'; // 自分のカレンダーIDを指定
const targetTimeZone = 'America/New_York'; // 変換先のタイムゾーン
const now = new Date();
const oneWeekLater = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
// カレンダーから1週間分の予定を取得
const events = Calendar.Events.list(calendarId, {
timeMin: now.toISOString(),
timeMax: oneWeekLater.toISOString(),
singleEvents: true,
orderBy: 'startTime'
}).items;
// バックアップ用の新しいスプレッドシートを作成
const ss = SpreadsheetApp.create(`カレンダー予定_${Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss')}`);
const sheet = ss.getActiveSheet();
// ヘッダー行の作成
sheet.appendRow(['タイトル', '開始日時(変換後)', '終了日時(変換後)', '場所', '説明']);
// 日時変換用の関数
function formatDateToTZ(dateStr, tz) {
const date = new Date(dateStr);
return Utilities.formatDate(date, tz, 'yyyy/MM/dd HH:mm');
}
// 入力検証: eventsが空でないかチェック
if (!events || events.length === 0) {
sheet.appendRow(['該当期間に予定はありません']);
Logger.log('指定期間に予定がありません');
return;
}
// バッチ書き込み用配列作成
let rows = [];
events.forEach(event => {
const start = event.start.dateTime || event.start.date; // 終日の場合はdateのみ
const end = event.end.dateTime || event.end.date;
rows.push([
event.summary || '(無題)',
formatDateToTZ(start, targetTimeZone),
formatDateToTZ(end, targetTimeZone),
event.location || '',
event.description || ''
]);
});
// バッチで書き込み(1回のみ)
sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
Logger.log('カレンダー予定のエクスポートが完了しました。スプレッドシートURL: ' + ss.getUrl());
}
■ 導入後の効果とコスト削減の試算
例えば、カレンダータイムゾーンの手動調整にかかっていた時間が1日あたり5分、これを完全自動化することで0分にできたとすると、
・1ヶ月20営業日として、年間約100時間の削減
・仮に時給2,000円なら、年間20万円の人件費削減相当
もちろんこれはあくまでも仮定の計算式で、実際の効果は業種や運用状況により異なる。ただ、GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしに使えるので、導入コストはほぼゼロ。Apps Scriptのquotaや実行上限には注意が必要だが、中小規模のビジネスなら十分に運用可能だ。
■ まとめ
・カレンダーのタイムゾーン調整は手動だとミスと時間ロスが多い
・GASで自動化すればミス減、効率化&コスト削減につながる
・既存データは消さず、新規スプレッドシートに書き出す設計で安全
・GoogleカレンダーAPIの有効化と必要権限の設定が必須
・Googleアカウントの利用枠内で利用可能。追加SaaS料金不要
ぜひ今回のスクリプトを自社の運用に合わせてカスタマイズしてみてほしい。初期設定やトリガー設定も慣れれば簡単だ。
■ GASの相談や導入サポートを見たい方へ
この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。
■ 関連サービス
GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。