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キーを発行し、スプレッドシートで安全に保存する準備をします。
- Notionインテグレーションを作成する
ブラウザでNotionの設定画面を開き、左メニューから「インテグレーション」を選択します。「新しいインテグレーション」ボタンをクリックし、任意の名前を入力して作成します。表示された「内部インテグレーションシークレット」がAPIキーです。このキーをコピーして安全な場所に保存してください。 - データベースとインテグレーションを接続する
Notion上の同期したいデータベースを開き、右上の「…」メニューから「接続」を選び、先ほど作成したインテグレーションを追加します。これでAPI経由でそのデータベースにアクセスできるようになります。 - スプレッドシートにAPIキーを保存する
Googleスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。スクリプトエディタが開いたら、左側の「プロジェクトの設定」歯車アイコンをクリックし、「スクリプトプロパティ」に「NOTION_TOKEN」というキーでAPIキーを追加します。これでスクリプト内から安全にキーを参照できます。
Apps Scriptでデータ送信のコードを記述する手順
次に、スプレッドシートのデータをJSON形式に変換し、Notion APIに送信する関数を作成します。以下の手順に従ってコーディングしてください。
- 関数と変数を定義する
スクリプトエディタで以下のコードを記述します。var token = PropertiesService.getScriptProperties().getProperty('NOTION_TOKEN');でキーを取得し、var databaseId = 'あなたのデータベースID';でデータベースIDを指定します。データベースIDはNotionのデータベースURLの最後の部分です。 - スプレッドシートのデータを読み取る
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var data = sheet.getDataRange().getValues();でシート全体のデータを配列として取得します。 - JSONペイロードを構築する
Notion APIに送信する形式に合わせて、各行をNotionのページプロパティに変換します。例えば、var properties = { "Name": { "title": [{ "text": { "content": row[0] } }] }, "Status": { "select": { "name": row[1] } } };のようにマッピングします。 - 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);で送信します。 - エラーハンドリングを追加する
レスポンスコードを確認し、200以外の場合はエラー内容をログに出力します。var response = UrlFetchApp.fetch(url, options); if (response.getResponseCode() !== 200) { Logger.log(response.getContentText()); }
ADVERTISEMENT
トリガー設定による定期同期の自動化手順
手動で関数を実行する代わりに、一定間隔で自動実行するトリガーを設定します。
- トリガー追加画面を開く
Apps Scriptエディタの左メニューで時計アイコン(トリガー)をクリックし、「トリガーを追加」を押します。 - 関数と間隔を選択する
実行する関数として先ほど作成した送信関数を選択し、時間主導型で「1時間ごと」など適切な間隔を設定します。必要に応じてエラー通知設定も有効にします。 - 保存して承認する
トリガーを保存すると、初回のみ権限承認を求められます。必要なスコープを確認して許可してください。以降、設定した間隔で自動的にデータが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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
