Contents
事前準備 – アカウント作成・API トークン取得・権限設定
この章では、Zapier と Notion を連携させるための最低限の環境構築手順を解説します。正しい認証情報と最小権限の付与が、後続の自動化でエラーを防ぐ鍵となります。
Zapier アカウントの作成
Zapier の無料プランでも 100 タスク/月まで利用可能です。まずは以下の手順でアカウントを取得してください。
- 公式サイト(https://zapier.com)にアクセスし、右上の「Sign Up」からメールまたは Google アカウントで登録。
- 受信した認証メールのリンクをクリックしてアカウントを有効化する。
- ダッシュボードが表示されたら、以降の設定画面に進めます。
Notion API キー(シークレット)の取得
Notion 側で統合(Integration)を作成し、シークレットキーを取得します。
- 左サイドバー下部の 「Settings & Members」 → 「Integrations」 を開く。
- 「+ New integration」をクリックし、名前(例:
Zapier Sync)と対象ワークスペースを選択。 - 権限は Read content and insert content のみをチェックし、Create integration を実行。
- 作成後に表示される 「Show secret」 ボタンでシークレットキーをコピーし、安全な場所(例:1Password)に保存する。
データベースへの最小権限付与
取得した統合を対象データベースに招待し、必要最低限の編集権限だけを付与します。
- 対象データベースページを開き、右上の 「Share」 → 「Invite」 を選択。
- 先ほど作成した統合(
Zapier Sync)を検索し、「Can edit」 のみを許可する。 - 「Full access」は付与せず、Read/Insert に留めることで最小権限の原則を守ります。
Zap の作成 – Trigger と Action の選択
Zap は「トリガー」と「アクション」の組み合わせで構成されます。本章では代表的なトリガー設定と、Notion 側で利用できる主要アクションのポイントを解説します。
Google カレンダーをトリガーにした例
Google カレンダーは多くのビジネスシーンで予定管理に使われているため、イベント情報を Notion に自動転送するフローは基本的な活用法です。
- ダッシュボード左上の 「Make a Zap」 をクリック。
- 「Trigger App」に Google Calendar を選択し、トリガーイベントとして 「New Event」 を設定。
- Google アカウントを接続し、対象カレンダーと取得したい項目(開始日時・終了日時・タイトル)を指定。
- 「Test Trigger」で最新のサンプルイベントが取得できることを確認する。
Notion のアクション種類と設定ポイント
Notion では主に Create Database Item と Update Database Item が利用されます。以下の点に注意して設定してください。
| アクション | 用途 | 設定時の留意点 |
|---|---|---|
| Create Database Item | 新規レコードの追加 | データベース選択、必須プロパティ(Title, Date など)をすべてマッピング |
| Update Database Item | 既存レコードの更新 | 事前に対象レコード ID を取得(「Find Database Item」ステップ)し、ID フィールドへ渡す |
設定手順
- Trigger の次に Action として Notion を選択。
- 「Create」または「Update」を選び Continue。
- 先ほど取得した Notion API キーで認証し、対象データベースをドロップダウンから指定。
- 表示されたマッピング画面で、Trigger のフィールドと Notion のプロパティを対応付ける。
フィールドマッピングとリレーション処理
トリガーから取得した生データは、Notion が期待する形式に合わせて変換・割り当てる必要があります。また、他のテーブルとのリレーションを扱う場合は追加手順が必要です。
データ型変換(日付・テキスト・数値)
Zapier の Formatter アプリで事前にデータ形式を整えると、Notion への書き込みエラーを防げます。
- 日付:
Formatter → Date / Time → FormatでYYYY-MM-DDTHH:mm:ssZ(ISO 8601)に統一し、Date プロパティへマッピング。 - テキスト:タイトルは Title フィールド、説明文は別の Text フィールドに割り当てるだけで可。
- 数値:必要があれば「Number」プロパティを作成し、固定値や計算結果(例:
1)を入力。
リレーション・ロールアップの扱い
リレーションは内部的にページ ID(UUID)で管理されるため、名前だけでは紐付けできません。以下の手順で正しく設定します。
1. Find Database Item の具体的な設定例
| 手順 | 操作内容 |
|---|---|
| ステップ追加 | 「Action」画面左下の 「+」 → 「Find Database Item」 を選択 |
| 検索対象データベース | 先ほど作成した Notion データベースを指定 |
| 検索条件 | ・Title が Trigger のタイトルと完全一致・ Date が開始日時と同日(必要に応じて「Contains」や「Exact match」) |
| 出力項目 | ID、Title、Date を取得し、次のステップで使用できるように保存 |
2. Looping by Zapier の設定例
複数レコードを一括処理したいときは「Looping」アプリでバッチ化します。
- Action → 「Looping by Zapier」 → 「Create Loop From Line Items」 を選択。
- ループ対象に Find Database Item の出力配列(例:
results)を指定。 - 「Loop Iteration」ごとに Create/Update Database Item を実行し、各レコードへマッピングする。
この構成により、リレーション先のページ ID を取得したうえで、必要な数だけ繰り返し書き込むことができます。
テストとエラーログの確認方法
自動化フローは本番環境に導入する前に必ずテストし、失敗時にはログを参照して原因を特定します。
テスト実行手順
- Trigger 画面で「Test Trigger」をクリックし、最新のサンプルデータが取得できることを確認。
- 次に Action 画面で「Test Action」ボタンを押し、Notion にレコードが作成/更新されるかチェックする。
- テスト成功後は Zap の左上にある 「Turn on Zap」 をクリックして有効化。
Notion 側で結果確認
- データベースビューに 「Created time」 カラムを追加し、最新 5 件をソート表示すると、Zap が作成したレコードがすぐに分かります。
- 作成者は統合名(例:
Zapier Sync)になるため、手入力と容易に区別できます。
エラー種別と対処法
| エラー | 主な原因 | 推奨対策 |
|---|---|---|
| 401 – Authentication error | API キーが無効・期限切れ | Zapier の Notion 接続を再認証し、最新シークレットキーに差し替える |
| 400 – Invalid input | 必須プロパティ未設定や日付形式不一致 | Formatter で日付フォーマットを統一、欠損フィールドにデフォルト値を設定 |
| 429 – Rate limited | Notion のリクエスト上限超過(3 req/秒 ≈ 180 req/分) | 「Delay」ステップで 2 秒以上の間隔を設け、Looping でバッチ処理する |
| 404 – Not found | Find ステップで対象レコードが見つからない | 検索条件を緩める(部分一致や日付範囲検索)か、前提データの有無を確認 |
Zapier の 「Task History」 → 該当 Zap → 「View Task Details」 から詳細ログを取得し、上表に示したエラーコードと照らし合わせて対処してください。
パフォーマンス最適化・トラブルシューティング
大量データや頻繁な同期が必要なケースでも、正しい設計で安定稼働させることが可能です。ここではレートリミットへの対応策、ページネーションによる大量取得、認証エラーと重複防止のベストプラクティスをまとめます。
レートリミットへの対応策(正しい上限は 3 req/秒)
Notion API は 1 秒あたり最大 3 リクエスト(= 約180 リクエスト/分)の制限があります。この上限を超えると 429 エラーが返ります。対策例は以下の通りです。
- Delay ステップ:Action の直前に「Delay For」→「2 seconds」を設定し、連続リクエスト間に余裕を持たせる。
- Looping バッチ化:10 件ずつ処理するループを作り、各バッチの開始前に 2 秒以上の Delay を挿入する。
これにより、30 リクエスト/分という誤認識から脱却し、実際の上限範囲内で安定動作させられます。
大量データ取得のページネーション(Code by Zapier)
Notion の query エンドポイントは page_size 最大 100 件で、続きがある場合は next_cursor が返ります。Zapier の 「Code by Zapier (Python)」 ステップを使って全件取得するサンプルコードは次の通りです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import requests, json def fetch_all(database_id, token): url = f"https://api.notion.com/v1/databases/{database_id}/query" headers = { "Authorization": f"Bearer {token}", "Notion-Version": "2022-06-28", "Content-Type": "application/json" } payload = {"page_size": 100} all_items = [] while True: resp = requests.post(url, headers=headers, data=json.dumps(payload)) data = resp.json() all_items.extend(data.get("results", [])) if not data.get("has_more"): break payload["start_cursor"] = data["next_cursor"] return all_items output = {"records": fetch_all(input_data["database_id"], input_data["token"])} |
- 入力:
database_idとtoken(シークレット)を Zap の「Input Data」へ設定。 - 出力:
records配列が次のステップに渡され、Looping で個別処理できる。
認証エラーと重複防止フロー
| 項目 | 対策 |
|---|---|
認証エラー (401) |
定期的に Zapier の Notion 接続画面から「Reconnect」し、最新シークレットキーを貼り付ける。 |
| 重複レコード防止 | 1️⃣ Trigger → データ取得 2️⃣ 「Find Database Item」でタイトル+開始日時検索 3️⃣ Filter: If Found is Empty → Create、それ以外は Update を実行する。 |
このパターンを必ず組み込むことで、同一イベントが二重に登録されるリスクを低減できます。
セキュリティベストプラクティス
- 最小権限の付与:統合作成時は
Read content and insert contentのみ選択し、Can edit以外の権限は付与しない。 - API キー管理:Zapier が暗号化保存するものの、バックアップやチーム共有時は 1Password・Bitwarden 等のパスワードマネージャに格納し、アクセスログを定期的にレビューする。
- ローテーション:半年ごとにシークレットキーを再生成し、古いキーは即削除することで漏洩リスクを最小化できる。
以上の手順と注意点を踏まえて設定すれば、Zapier と Notion の連携は安定・安全に運用できます。
本稿は中立的な情報提供を目的として作成しています。各サービスの公式ドキュメントや利用規約をご確認の上、ご自身の業務要件に合わせてご活用ください。