【Notion API】2025-09-03アップグレード完全ガイド - マルチソースデータベース対応とSDK v5移行

PUBLISHED 2026-02-07

Notion API バージョン 2025-09-03 では、マルチソースデータベースという大きなアーキテクチャ変更が導入されました。これまで「データベース」として一体だった概念が「データベース」と「データソース」に分離され、API のエンドポイントや SDK にも破壊的変更が入っています。

この記事では、既存の Notion API 連携を 2025-09-03 バージョンに安全にアップグレードする手順を解説します。

データモデルの変更点

旧モデル(2025-09-03 より前)

従来は「データベース」がスキーマ(プロパティ定義)とページの両方を管理していました。database_id さえあれば、スキーマの取得もページのクエリも可能でした。

新モデル(2025-09-03)

新しいデータモデルでは、3 つの階層に分離されています。

%%{init: {'theme':'neutral'}}%% graph TD A[Database] --> B[Data Source 1] A --> C[Data Source 2] B --> D[Pages] B --> E[Schema / Properties] C --> F[Pages] C --> G[Schema / Properties] A --> H[Views] H --> |1つのData Sourceに紐づく| B
階層役割
Databaseコンテナ。タイトル、アイコン、カバー、権限を管理
Data Sourceスキーマ(プロパティ定義)とページの集合を管理
View1 つの Data Source のページをフィルタ・ソートして表示
💡 なぜ分離されたのか

1つのデータベースに複数のデータソースを持てるようになりました。例えば、プロジェクト管理データベースに「タスク」と「マイルストーン」を別々のデータソースとして格納し、それぞれ独自のスキーマを持たせることができます。

エンドポイントの変更一覧

主要なエンドポイントの変更をまとめます。

操作旧エンドポイント新エンドポイント
スキーマ取得GET /v1/databases/[id]GET /v1/data_sources/[id]
ページクエリPOST /v1/databases/[id]/queryPOST /v1/data_sources/[id]/query
スキーマ更新PATCH /v1/databases/[id]PATCH /v1/data_sources/[id]
ページ作成の parentdatabase_iddata_source_id
検索フィルタ"value": "database""value": "data_source"
⚠️

旧エンドポイントは、データベースに2つ目のデータソースが追加された時点でエラーを返します。ユーザーの操作がトリガーとなるため、開発者側で制御できません。早めのアップグレードが必要です。

アップグレード手順

移行の全体フロー

1

Step 1

data_source_id 取得

2

Step 2

parent 参照の変更

3

Step 3

エンドポイント移行

4

Step 4

Search API 更新

5

Step 5

SDK v5 導入

6

Step 6

Webhook 更新

Step 1: data_source_id の取得

まず、既存の database_id から data_source_id を取得するステップを追加します。

// 2025-09-03 バージョンで databases.retrieve を呼ぶと
// data_sources 配列が返される
const db = await notion.databases.retrieve({
  database_id: DATABASE_ID,
});

// data_sources[0].id が data_source_id
const dataSourceId = db.data_sources[0].id;
console.log("Data Source ID:", dataSourceId);
💡 data_source_id のキャッシュ

data_source_id は頻繁に変わるものではないため、一度取得したらキャッシュして再利用するのが効率的です。ただし、ユーザーがデータソースを追加・削除する可能性があるため、定期的な再取得も考慮しましょう。

Step 2: parent 参照の更新

ページ作成時の parentdatabase_id から data_source_id に変更します。

✅ 新しい書き方
await notion.pages.create({
  parent: {
    type: "data_source_id",
    data_source_id: dataSourceId,
  },
  properties: { /* ... */ },
});
❌ 古い書き方
await notion.pages.create({
  parent: {
    type: "database_id",
    database_id: databaseId,
  },
  properties: { /* ... */ },
});

Step 3: エンドポイントの移行

データベース操作を Data Source エンドポイントに移行します。

スキーマ取得

// Before
const schema = await notion.databases.retrieve({
  database_id: DATABASE_ID,
});

// After
const schema = await notion.dataSources.retrieve({
  data_source_id: dataSourceId,
});

ページクエリ

// Before
const pages = await notion.databases.query({
  database_id: DATABASE_ID,
  filter: { /* ... */ },
});

// After
const pages = await notion.dataSources.query({
  data_source_id: dataSourceId,
  filter: { /* ... */ },
});

スキーマ更新

// Before
await notion.databases.update({
  database_id: DATABASE_ID,
  properties: { /* ... */ },
});

// After
await notion.dataSources.update({
  data_source_id: dataSourceId,
  properties: { /* ... */ },
});

Step 4: Search API の更新

検索 API のフィルタ値を変更します。

// Before
const results = await notion.search({
  filter: {
    value: "database",
    property: "object",
  },
});

// After
const results = await notion.search({
  filter: {
    value: "data_source",
    property: "object",
  },
});
📌 検索結果の変化

マルチソースデータベースの場合、1つのデータベースに対してデータソースの数だけ結果が返ります。例えば、データソースが2つあるデータベースでは、2件の検索結果が返されます。

Step 5: SDK v5 へのアップグレード

npm install @notionhq/client@^5

SDK v5 では新しいメソッドが使えるようになります。

import { Client } from "@notionhq/client";

const notion = new Client({
  auth: process.env.NOTION_TOKEN,
});

// 新しい SDK メソッド
await notion.dataSources.retrieve({ data_source_id: "..." });
await notion.dataSources.query({ data_source_id: "..." });
await notion.dataSources.update({ data_source_id: "...", properties: {} });
⚠️

SDK v5 は API バージョン 2025-09-03 のみをサポートします。古い API バージョンとの後方互換性はありません。

Step 6: Webhook の更新(該当する場合)

Webhook を使用している場合、イベントタイプが変更されています。

旧イベント新イベント
database.content_updateddata_source.content_updated
database.schema_updateddata_source.schema_updated

新しく追加されたイベントもあります。

  • data_source.created
  • data_source.moved
  • data_source.deleted
  • data_source.undeleted

実践例: Netlify Functions での移行

Netlify Functions で Notion API を使っている場合の具体的な移行例です。

// netlify/functions/fetchNotion.ts
import { Client } from "@notionhq/client";

const notion = new Client({
  auth: process.env.NOTION_TOKEN,
});

const DATABASE_ID = process.env.NOTION_DATABASE_ID;

export async function handler() {
  try {
    // Step 1: data_source_id を取得
    const db = await notion.databases.retrieve({
      database_id: DATABASE_ID,
    });
    const dataSourceId = db.data_sources[0].id;

    // Step 3: Data Source エンドポイントでクエリ
    const response = await notion.dataSources.query({
      data_source_id: dataSourceId,
    });

    return {
      statusCode: 200,
      body: JSON.stringify(response.results),
    };
  } catch (error) {
    console.error("Notion API Error:", error);
    return {
      statusCode: 500,
      body: JSON.stringify({ error: error.message }),
    };
  }
}

移行時の注意点

アップグレードチェックリスト
  • SDK @notionhq/client を v5 にアップグレード
  • 取得 databases.retrieve で data_source_id を取得するステップを追加
  • クエリ databases.query を dataSources.query に変更
  • 作成 ページ作成の parent を data_source_id に変更
  • 検索 Search API のフィルタ値を data_source に変更
  • Webhook イベントタイプを database.* から data_source.* に変更

後方互換性について

条件動作
データソースが1つだけ旧 API でも動作する
データソースが2つ以上旧 API はエラーを返す

旧 API バージョンの廃止日は発表されていませんが、ユーザーがデータソースを追加するだけで旧 API が壊れるため、早めの移行が推奨されます。

よくあるエラーと対処法

validation_error: database has multiple data sources

データベースに複数のデータソースがある状態で旧エンドポイントを使った場合に発生します。data_source_id を使うエンドポイントに移行してください。

object_not_found: data source not found

data_source_id が間違っているか、インテグレーションにデータソースへのアクセス権がありません。databases.retrieve で最新の data_source_id を再取得してください。

参考文献

まとめ

Notion API 2025-09-03 の主な変更は、「データベース」と「データソース」の分離です。移行の核心は以下の 3 点です。

  1. databases.retrievedata_source_id を取得するステップを追加する
  2. databases.query / databases.updatedataSources.query / dataSources.update に置き換える
  3. SDK を v5 にアップグレードする

旧 API はユーザーがデータソースを追加するだけで壊れるため、早めの対応をおすすめします。

CATEGORY
TAGS
円