NotionとGoogleカレンダーを自動連携する方法【無料・GAS・2026年版】

仕事効率化(大人向け)

この記事は2026年6月時点の情報です。 各サービスの料金・API仕様・機能は変更されることがあります。最新の内容は必ず各公式サイト・公式ドキュメントでご確認ください。

この記事の結論

  • 完全無料で運用したいGAS自動化一択(この記事のメイン)
  • 設定の手軽さ最優先Zapier / Make(無料枠は月100タスクまで・2026年6月時点)
  • カレンダーをNotion上で見たいだけNotion Calendarの公式統合が便利
  • 片方向の反映(Notion→Google)なら、GASで無料構築できる
  • 更新・重複を防ぐコツは、Notion側に「同期済み」チェック列を用意すること

迷ったら、まずは「GAS自動化」で無料運用してみるのがおすすめです。


3つの連携方法を比較

項目 Notion Calendar(公式) Zapier / Make GAS自動化
料金 無料 無料枠あり/有料 約$19.99〜 完全無料
設定の手軽さ △(コード必要)
Notion→Google反映 ×(表示のみ) ◯(この記事の方法)
カスタマイズ性 ×
対応件数 無料は月100タスク 実質自由(クォータ内)
おすすめ度 ◎(コスパ重視)
※2026年6月時点。料金・無料枠は変わるため最新は各公式で確認してください。

方法1. Notion Calendar の公式統合

Notion Calendar(旧Cron)を使うと、GoogleカレンダーをNotion上に表示できます。設定は数クリックで手軽です。ただし、「Notionデータベースの予定 → Googleカレンダーへ反映」はこの方法ではできません(外部カレンダーをNotion内に表示する機能で、Notion DBからの真の双方向同期は提供されていません・2026年6月時点)。「Notionに書いた予定をGoogleカレンダーに出したい」場合は、方法2か方法3を使います。

方法2. Zapier / Make

「Notionの新規ページ追加」→「Googleカレンダーにイベント作成」のテンプレが豊富で、初心者には最も簡単です。Zapierの無料プランは月100タスク・2ステップ構成・ポーリング間隔は約15分(2026年6月時点)。それ以上の頻度・件数が必要ならProプラン(約$19.99/月〜・年払い)などの有料が必要です。最新の料金・無料枠はZapier公式で確認してください。

方法3. GAS自動化(この記事のメイン)

Googleアカウントだけあれば完全無料。トリガーで定期実行でき、件数も自由(後述のクォータ内)。今回はこのやり方を解説します。


GAS連携の全体像

[Notion DB] ──(Notion API)──> [GAS] ──(Calendar API)──> [Googleカレンダー]
  1. Notion側でデータベースを作る(予定を書く場所)
  2. Notion APIのインテグレーションキーを発行
  3. GASでNotion APIを叩いて予定を取得
  4. CalendarAppでGoogleカレンダーに追加
  5. トリガーで定期実行(例:5分おき)

⚠️ Notion APIのバージョンについて(必ずお読みください)
このあとのコードは動作例です。Notion APIは Notion-Version ヘッダでバージョンを指定しますが、本記事のサンプルは古いバージョン値を使っています2025-09-03以降、データベース操作は「データソース(data sources)」を扱うAPIへの移行が進んでおり、最新仕様ではコードの修正が必要になる場合があります。実装前に必ずNotion APIの公式ドキュメントで最新のバージョン・エンドポイント仕様を確認してください。「このコードで必ず動く/将来も動く」ことを保証するものではありません。


Step 1. Notionデータベースを準備する

Notionで新しいページを開き、フルページのデータベースを作成します。列は以下を用意します。

列名 タイプ 用途
Name タイトル 予定名
Date 日付 開始/終了日時
Synced チェックボックス 同期済みフラグ
EventId テキスト Googleカレンダー側のID

Syncedが未チェックのものだけをGASが拾って同期する設計にします(重複防止のコツ)。


Step 2. Notion API インテグレーションを作る

  1. https://www.notion.so/my-integrations にアクセス
  2. + New integration → 名前を「GAS Sync」などに
  3. 発行された secret_xxxx(インテグレーショントークン)をコピー
  4. Notion DBページ右上の 接続を追加 → 作ったインテグレーションを選択

認証は Authorization: Bearer <インテグレーショントークン> の形式で行います(2026年6月時点)。

DBのIDをメモ

DBページのURLの以下部分がIDです。

https://www.notion.so/your/abcd1234efgh5678ijkl9012mnop3456?v=...
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       この32文字がDB ID

Step 3. GASに Notion連携コードを書く

新規GASプロジェクトを作り、以下を貼り付けます。APIキーはコードに直接書かず、スクリプトプロパティに保存します(安全のため)。

function setNotionKey() {
  const props = PropertiesService.getScriptProperties();
  props.setProperty('NOTION_TOKEN', 'secret_ここに貼る');
  props.setProperty('NOTION_DB_ID', 'ここにDB IDを貼る');
  props.setProperty('CALENDAR_ID', 'your-email@gmail.com'); // 同期先カレンダー
}

1度だけ setNotionKey を実行してから、キーを書いた行は削除しておくと安全です。

予定を取得する関数

function fetchNotionEvents() {
  const props = PropertiesService.getScriptProperties();
  const token = props.getProperty('NOTION_TOKEN');
  const dbId = props.getProperty('NOTION_DB_ID');

  // ※ Notion-Version は古い値の例。最新値は公式ドキュメントで確認してください。
  const url = `https://api.notion.com/v1/databases/${dbId}/query`;
  const payload = {
    filter: { property: 'Synced', checkbox: { equals: false } }
  };

  const res = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + token,
      'Notion-Version': '2022-06-28'  // ← 最新版・データソースAPIは公式で要確認
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });

  return JSON.parse(res.getContentText()).results;
}

Googleカレンダーに追加する関数

function syncToGoogleCalendar() {
  const pages = fetchNotionEvents();
  const calId = PropertiesService.getScriptProperties().getProperty('CALENDAR_ID');
  const cal = CalendarApp.getCalendarById(calId);

  pages.forEach(page => {
    const name = page.properties.Name.title[0]?.plain_text || '無題';
    const date = page.properties.Date.date;
    if (!date) return;

    const start = new Date(date.start);
    const end = date.end ? new Date(date.end) : new Date(start.getTime() + 3600000);

    const event = cal.createEvent(name, start, end);
    markAsSynced(page.id, event.getId());
  });
}

同期済みフラグを更新する関数

function markAsSynced(pageId, eventId) {
  const token = PropertiesService.getScriptProperties().getProperty('NOTION_TOKEN');
  const url = `https://api.notion.com/v1/pages/${pageId}`;

  UrlFetchApp.fetch(url, {
    method: 'patch',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + token,
      'Notion-Version': '2022-06-28'  // ← 同上。最新は公式で確認
    },
    payload: JSON.stringify({
      properties: {
        Synced: { checkbox: true },
        EventId: { rich_text: [{ text: { content: eventId } }] }
      }
    }),
    muteHttpExceptions: true
  });
}

Step 4. トリガー設定

GASの 時計マーク → トリガーを追加 で、syncToGoogleCalendar を定期実行(例:5分ごと)に設定します。時間主導トリガーは最短「毎分」まで設定できます。これで Notionに予定を書くだけで自動的にGoogleカレンダーへ反映されます。

💡 クォータの注意
GASは1回の実行が6分まで(超過するとエラー)。また、無料のGoogleアカウントには1日あたりのトリガー総実行時間やAPI呼び出し回数などのクォータがあります。個人の予定管理の範囲なら通常は問題ありませんが、大量件数を扱う場合はGASのクォータを公式で確認してください。


よくあるハマりどころ

症状 原因 対処
401 Unauthorized DBにインテグレーションが未接続/トークン誤り DBページの「接続」設定とトークンを確認
予定が重複する Syncedフラグを更新できていない markAsSynced の動作とプロパティ名を確認
同じ予定が毎回作られる フィルタが効いていない DBのプロパティ名が Synced か確認
時刻がズレる タイムゾーン設定ミス GASプロジェクト設定で Asia/Tokyo
APIエラー(仕様変更系) Notion APIのバージョン/仕様変更 公式ドキュメントで最新のバージョン・エンドポイントを確認

よくある質問(FAQ)

Q. 双方向同期はできますか?

この記事のやり方は片方向(Notion→Google)です。双方向同期が必要な場合は、対応するサードパーティの同期サービスを使うか、表示用にNotion Calendarを併用する方法があります。各サービスの仕様・料金は公式で確認してください。

Q. Googleカレンダー側の変更をNotionに戻せますか?

今回の構成では戻せません(片方向のため)。必要なら、GAS側でGoogleカレンダーのイベント一覧を取得してNotionに書き戻す関数を追加実装する形になります。

Q. 複数のカレンダーで使い分けたいです。

Notionに「カレンダー種別」列を追加し、GAS側でカレンダーIDを振り分ける形にすれば対応できます。

Q. GASの実行時間制限は大丈夫ですか?

1回の実行は6分以内が上限です。個人の予定管理の範囲であれば通常は問題ありません。大量件数を扱う場合は、無料アカウントの日次クォータも公式で確認してください。

Q. スマホでも動きますか?

GASはサーバー側で動くため、スマホでNotionに書き込むだけで、設定したトリガーのタイミングで自動的にGoogleカレンダーへ反映されます。


まとめ

  • 片方向同期(Notion→Google)なら GASで無料運用できる
  • 手軽さ・分岐が欲しいなら Zapier / Make(無料は月100タスク・2026年6月時点)
  • カレンダーをNotion上で表示したいだけなら Notion Calendar
  • Notion APIは仕様変更が進んでいるため、実装前に公式ドキュメントで最新仕様を確認する

関連記事もどうぞ:

用途に合うAIツール選びは用途別AIツール診断もどうぞ。

けい先生のAI教室運営者 けい先生
この記事の運営者・監修

けい先生

現役小学校講師 × AI活用実践者

教育現場でAIを実践しながら、仕事・副業・教育に役立つAIツールを比較・検証しています。個人や教育関係者が、自分に合うAIを無理なく選べるように、実測レビューとわかりやすい解説を大切にしています。

子どものAI、迷ったらまず先生の記事から。

現役講師が運営する比較メディアが、あなたの目的に合ったAIツールを案内します。

タイトルとURLをコピーしました