ADVERTISEMENT

【Googleスプレッドシート】Notionデータベースと双方向同期!APIキー設定とデータ送信

【Googleスプレッドシート】Notionデータベースと双方向同期!APIキー設定とデータ送信
🛡️ 超解決

Notionで管理しているデータベースをGoogleスプレッドシートに同期したいと思ったことはありませんか。手動でコピーするのは手間がかかりますが、NotionのAPIを活用すれば自動でデータをやり取りできます。この記事では、GoogleスプレッドシートからNotionデータベースへデータを送信し、双方向同期を実現する方法を解説します。APIキーの設定から実際のデータ送信までの手順を詳しく説明しますので、ぜひ参考にしてください。

【要点】GoogleスプレッドシートとNotionの双方向同期をAPIで実現する手順

  • Notion内部インテグレーションの作成: NotionのAPIキーを取得し、スプレッドシートで安全に保管します。
  • Apps ScriptによるHTTPリクエスト: GoogleスプレッドシートのスクリプトエディタでNotion APIを呼び出し、データを送信します。
  • トリガー設定による定期同期: 時間主導型トリガーを設定し、一定間隔で自動的にデータを同期します。

ADVERTISEMENT

Notion APIとスプレッドシート連携の仕組み

Notion APIを利用すると、外部アプリケーションからNotionデータベースの読み書きが可能になります。Googleスプレッドシート側ではApps Scriptを用いてHTTPリクエストを送信し、JSON形式でデータをやり取りします。この連携により、スプレッドシート上で更新したデータをNotionデータベースに自動反映できるようになります。注意点として、双方向同期を行うには、スプレッドシートからNotionへの送信と、Notionからスプレッドシートへの取得の両方の処理を記述する必要があります。この記事では主にスプレッドシートからNotionへのデータ送信に焦点を当てますが、取得の処理も同様の方法で実装できます。

Notion APIキーの取得とスプレッドシートへの登録手順

まずはNotion側でAPIキーを発行し、スプレッドシートで安全に保存する準備をします。

  1. Notionインテグレーションを作成する
    ブラウザでNotionの設定画面を開き、左メニューから「インテグレーション」を選択します。「新しいインテグレーション」ボタンをクリックし、任意の名前を入力して作成します。表示された「内部インテグレーションシークレット」がAPIキーです。このキーをコピーして安全な場所に保存してください。
  2. データベースとインテグレーションを接続する
    Notion上の同期したいデータベースを開き、右上の「…」メニューから「接続」を選び、先ほど作成したインテグレーションを追加します。これでAPI経由でそのデータベースにアクセスできるようになります。
  3. スプレッドシートにAPIキーを保存する
    Googleスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。スクリプトエディタが開いたら、左側の「プロジェクトの設定」歯車アイコンをクリックし、「スクリプトプロパティ」に「NOTION_TOKEN」というキーでAPIキーを追加します。これでスクリプト内から安全にキーを参照できます。

Apps Scriptでデータ送信のコードを記述する手順

次に、スプレッドシートのデータをJSON形式に変換し、Notion APIに送信する関数を作成します。以下の手順に従ってコーディングしてください。

  1. 関数と変数を定義する
    スクリプトエディタで以下のコードを記述します。var token = PropertiesService.getScriptProperties().getProperty('NOTION_TOKEN'); でキーを取得し、var databaseId = 'あなたのデータベースID'; でデータベースIDを指定します。データベースIDはNotionのデータベースURLの最後の部分です。
  2. スプレッドシートのデータを読み取る
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var data = sheet.getDataRange().getValues(); でシート全体のデータを配列として取得します。
  3. JSONペイロードを構築する
    Notion APIに送信する形式に合わせて、各行をNotionのページプロパティに変換します。例えば、var properties = { "Name": { "title": [{ "text": { "content": row[0] } }] }, "Status": { "select": { "name": row[1] } } }; のようにマッピングします。
  4. HTTP POSTリクエストを送信する
    var url = 'https://api.notion.com/v1/pages'; var options = { 'method': 'post', 'headers': { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json', 'Notion-Version': '2022-06-28' }, 'payload': JSON.stringify({ 'parent': { 'database_id': databaseId }, 'properties': properties }) }; でリクエストを設定し、UrlFetchApp.fetch(url, options); で送信します。
  5. エラーハンドリングを追加する
    レスポンスコードを確認し、200以外の場合はエラー内容をログに出力します。var response = UrlFetchApp.fetch(url, options); if (response.getResponseCode() !== 200) { Logger.log(response.getContentText()); }

ADVERTISEMENT

トリガー設定による定期同期の自動化手順

手動で関数を実行する代わりに、一定間隔で自動実行するトリガーを設定します。

  1. トリガー追加画面を開く
    Apps Scriptエディタの左メニューで時計アイコン(トリガー)をクリックし、「トリガーを追加」を押します。
  2. 関数と間隔を選択する
    実行する関数として先ほど作成した送信関数を選択し、時間主導型で「1時間ごと」など適切な間隔を設定します。必要に応じてエラー通知設定も有効にします。
  3. 保存して承認する
    トリガーを保存すると、初回のみ権限承認を求められます。必要なスコープを確認して許可してください。以降、設定した間隔で自動的にデータがNotionに送信されます。

双方向同期で発生しやすいエラーとその対処法

認証エラーでデータが送信できない場合

APIキーが正しく設定されていないか、データベースにインテグレーションが接続されていない可能性があります。スクリプトプロパティのキー名が正しいか確認し、Notion側の接続設定を見直してください。また、APIのバージョンを最新に保つことも重要です。

データの形式が合わずに400エラーが返る場合

Notion APIはプロパティの型を厳密に要求します。例えば、タイトルプロパティにはtitle配列、セレクトプロパティにはselectオブジェクトなど、公式ドキュメントに従った形式でペイロードを構築する必要があります。テスト用のシートで正しいデータ構造を確認しましょう。

APIのレート制限に引っかかる場合

Notion APIには1秒あたりのリクエスト数制限があります。大量データを一度に送信しようとすると制限を超えることがあります。その場合は、Utilities.sleep(1000) で1秒待機しながらループ処理するか、バッチ処理を分割して送信してください。

手動同期とAPI同期の比較

項目 手動コピー 一方向API同期 双方向API同期
手間 毎回手動でコピペ 一度設定すれば自動 設定は複雑だが完全自動
リアルタイム性 低い(作業者依存) トリガー間隔に依存 トリガー間隔に依存
エラーリスク ヒューマンエラー多 コードのバグ・API変更 双方向で競合の可能性
設定難易度 容易 中程度 高め(両方向のコードが必要)

まとめ

この記事では、Notion APIとGoogleスプレッドシートのApps Scriptを使って双方向同期を実現する方法を解説しました。APIキーの取得からスクリプトの記述、トリガー設定までを一通り行うことで、手動でのコピー作業から解放されます。さらに応用として、スプレッドシートからNotionデータを読み込む機能も追加可能ですので、ぜひチャレンジしてみてください。NotionのデータベースIDやプロパティ名を正確に指定すれば、複雑なワークフローも自動化できます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。