Googleカレンダーの日本の祝日をGASとExcelで取得する:APIキー不要のXML連携ガイド
現代の業務自動化において、カレンダー情報の取得は非常に重要なスキルです。特に、Excelでスケジュール管理や工数計算を行う際、日本の祝日を自動的に反映させることは、正確なプロジェクト管理の第一歩となります。通常、Googleカレンダーのデータ取得には「Google Calendar API」の利用が推奨されますが、APIキーの発行、OAuth認証の手間、そしてプロジェクトの複雑化といったハードルが存在します。
本記事では、Googleカレンダーが公開している「iCalendar形式(XML/ICS)」を利用し、Google Apps Script(GAS)を仲介させることで、APIキーなしでExcelに祝日データを読み込む手法を徹底解説します。
なぜGASを介在させるのか:アーキテクチャの最適化
Excelから直接Googleの公開カレンダーURLにアクセスしようとすると、セキュリティ上の制約や、データのパース(解析)の難易度に直面します。Excelの「Power Query」で直接ICSファイルを読み込むことも可能ですが、データ構造が複雑なため、日付の抽出や不要なメタデータの削除が困難です。
そこで、GASを「データ変換エンジン」として活用します。GAS側でGoogleカレンダーのフィードを読み込み、構造化されたJSON形式やシンプルなCSV形式に整形して出力することで、Excel側は「Webクエリ」として非常に軽量かつクリーンなデータを取得できるようになります。この手法のメリットは以下の3点です。
1. APIキー不要:公開URLを利用するため、プロジェクト設定や認証情報が不要。
2. メンテナンスフリー:祝日の更新はGoogle側で行われるため、個別の管理が不要。
3. 高い汎用性:Excelだけでなく、スプレッドシートや他のWebアプリからも容易に利用可能。
GASによるデータ取得と整形ロジック
まずはGoogle Apps Script側の実装です。Googleカレンダーには、日本の祝日を配信する公式の公開カレンダーが存在します。このカレンダーURLからデータを取得し、Excelが読み取りやすい形式に変換します。
function doGet() {
// 日本の祝日カレンダーのXMLフィードURL
var calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
var url = "https://www.google.com/calendar/feeds/" + encodeURIComponent(calendarId) + "/public/full?alt=json&max-results=100";
var response = UrlFetchApp.fetch(url);
var data = JSON.parse(response.getContentText());
var entries = data.feed.entry;
var output = [];
output.push(["日付", "祝日名"]);
for (var i = 0; i < entries.length; i++) {
var title = entries[i].title.$t;
var date = entries[i].gd$when[0].startTime;
output.push([date, title]);
}
// JSON形式で出力してExcelからのアクセスを待つ
return ContentService.createTextOutput(JSON.stringify(output))
.setMimeType(ContentService.MimeType.JSON);
}
このコードをWebアプリとして公開します。「デプロイ」ボタンから「新しいデプロイ」を選択し、種類を「ウェブアプリ」に設定します。「アクセスできるユーザー」を「全員」に設定することが重要です。これにより、Excelから認証なしでアクセス可能なエンドポイントが生成されます。
Excelへのデータ取り込み:Power Queryの活用
GASで公開したURLをExcelに取り込みます。Excel 2016以降であれば、Power Query(データの取得と変換)を利用するのが最もスマートです。
1. Excelの「データ」タブから「データの取得」→「その他のソースから」→「Web」を選択します。
2. GASのデプロイで発行された「ウェブアプリURL」を入力します。
3. 「Webコンテンツの構成」画面が表示されます。JSONとして読み込まれるため、Power Queryエディター上で「リストへの変換」→「テーブルへの変換」を順次実行します。
4. 1行目をヘッダーとして使用し、日付列を「日付型」に変換します。
5. 「閉じて読み込む」を選択すれば、シート上に最新の祝日リストが自動展開されます。
実務における運用アドバイス
このシステムを実務で安定運用するために、いくつか注意すべきプロフェッショナルな視点を提供します。
まず、データの更新頻度です。Excelの「データ」タブにある「接続のプロパティ」から、「ファイルを開くときにデータを更新する」にチェックを入れておくことで、ファイルを開くたびに最新の祝日情報が取得されます。これにより、翌年の祝日が追加された場合でも、ユーザー側で修正を加える必要が一切なくなります。
次に、エラーハンドリングについてです。GAS側のスクリプトは、稀にGoogle側のサーバー負荷や一時的な接続エラーで失敗することがあります。その際、Excel側でエラーが発生しないよう、Power Queryのステップ定義において、データが取得できなかった場合のフォールバック処理(ローカルのテーブルを優先する等のロジック)を検討すると、より堅牢なツールとなります。
また、本手法は「読み取り専用」であることを忘れないでください。Excel上の祝日情報を書き換えても、元のGoogleカレンダーには反映されません。あくまで「参照用マスターデータ」として扱い、VLOOKUP関数やXLOOKUP関数を駆使して、業務スケジュールの判定フラグとして利用するのがベストプラクティスです。
まとめと展望
本記事では、GASとExcelを連携させ、APIキーを使わずにGoogleカレンダーの祝日情報を取得する方法を解説しました。この手法の核心は、Web技術(JSON/API)とOfficeツール(Power Query)を「GASという名の変換器」で結びつけることにあります。
生成AIの活用が進む現在、コードの記述自体はAIが高速に行う時代となりました。しかし、エンジニアとして重要なのは「どのAPIを叩くか」「どのようなデータ構造に変換すればクライアント側で扱いやすいか」という設計思想です。
今回紹介した仕組みは、祝日取得だけでなく、社内の会議室予約状況の可視化や、特定プロジェクトの進捗報告の自動取り込みなど、あらゆる「カレンダーベースの業務」に応用可能です。ぜひこのテンプレートをベースに、皆様の業務環境に合わせたカスタマイズを行ってみてください。効率化の先にある、より創造的な業務時間を生み出すための強力な武器となるはずです。
