技術ブログ

GASでNotionデータベースを自在に操る!基本から応用まで

/ 初心者向け

GASでNotionデータベースを自在に操る!基本から応用まで

GASでNotionデータベースを自在に操る!基本から応用まで

こんにちは!GAS専門ブロガーの〇〇です。

今回は、多くの人が利用している情報管理ツール「Notion」のデータベースを、Google Apps Script (GAS) を使って操作する方法について、初心者の方にも分かりやすく解説していきます。GASとNotionの連携は、日々の業務効率を劇的に向上させる可能性を秘めています。ぜひ最後までお付き合いください!

なぜGASでNotionを操作するのか?

Notionは非常に高機能なツールですが、GASと連携させることで、さらにその可能性を広げることができます。

  • 自動化: 定期的にデータを更新したり、特定の条件でレコードを追加したりといった作業を自動化できます。
  • 外部連携: Googleスプレッドシートや他のGoogleサービスからNotionデータベースへデータを連携させたり、逆にNotionのデータを外部サービスへ連携させたりできます。
  • カスタム機能: Notion単体では実現できないような、独自の集計や分析、通知機能などをGASで実装できます。

Notion APIの基本

GASからNotionデータベースを操作するには、Notionが提供するAPIを利用します。現在、Notion APIはv0とv1がありますが、一般的にはv1を利用します。

1. Notion Integrationの作成

GASからNotion APIにアクセスするには、まず「Integration」を作成する必要があります。これは、APIリクエストの際に使用する認証トークンを発行する手続きです。

1. NotionのMy integrationsページにアクセスします。

2. 「+ New integration」ボタンをクリックします。

3. 「Internal Integrations」を選択し、必要な情報を入力して「Submit」をクリックします。

4. 作成されたIntegrationの詳細ページで、「Secret token」をコピーしておきます。これは非常に重要なので、安全な場所に保管してください。

2. データベースへのアクセス権限の付与

作成したIntegrationに、操作したいNotionデータベースへのアクセス権限を付与する必要があります。

1. 操作したいNotionデータベースを開きます。

2. 右上にある「・・・」メニューをクリックします。

3. 「Connect to ...」セクションの「Add connections」をクリックします。

4. 検索バーに、先ほど作成したIntegrationの名前を入力し、選択します。

5. 「Allow access」をクリックして、権限を付与します。

GASでNotionデータベースを操作する

それでは、具体的なGASのコードを見ていきましょう。GASのUrlFetchAppサービスを使って、Notion APIにHTTPリクエストを送信します。

1. データベースのIDの取得

Notion APIでデータベースを操作するには、データベースのIDが必要です。データベースのURLから取得できます。

例えば、データベースのURLが https://www.notion.so/xxxx-yyyy-zzzz-aaaa-bbbbccccdddd の場合、データベースIDは xxxx-yyyy-zzzz-aaaa-bbbbccccdddd です。

2. データベースの全ページを取得する

まずは、データベースに登録されているすべてのページ(レコード)を取得するコードです。

function getAllPages() {
  const NOTION_API_KEY = 'YOUR_NOTION_SECRET_TOKEN'; // 作成したSecret token
  const DATABASE_ID = 'YOUR_DATABASE_ID'; // 操作したいデータベースのID

  const url = `https://api.notion.com/v1/databases/${DATABASE_ID}/query`;

  const options = {
    'method': 'post',
    'headers': {
      'Authorization': `Bearer ${NOTION_API_KEY}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2022-06-28' // APIバージョンを指定
    },
    'payload': JSON.stringify({})
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    Logger.log(data);
  } catch (e) {
    Logger.log('Error: ' + e);
  }
}

3. 新しいページ(レコード)を追加する

データベースに新しいレコードを追加する例です。

function createPage() {
  const NOTION_API_KEY = 'YOUR_NOTION_SECRET_TOKEN';
  const DATABASE_ID = 'YOUR_DATABASE_ID';

  const url = 'https://api.notion.com/v1/pages';

  const payload = {
    'parent': {
      'database_id': DATABASE_ID
    },
    'properties': {
      '名前': {
        'title': [
          {
            'text': {
              'content': '新しいタスク'
            }
          }
        ]
      },
      'ステータス': {
        'select': {
          'name': 'ToDo'
        }
      },
      '期日': {
        'date': {
          'start': '2023-12-31'
        }
      }
    }
  };

  const options = {
    'method': 'post',
    'headers': {
      'Authorization': `Bearer ${NOTION_API_KEY}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2022-06-28'
    },
    'payload': JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    Logger.log(data);
  } catch (e) {
    Logger.log('Error: ' + e);
  }
}

注意点: 上記のコードでは 名前, ステータス, 期日 というプロパティ名を例として使用していますが、ご自身のNotionデータベースのプロパティ名に合わせて適宜変更してください。

4. 既存のページを更新する

既存のページ(レコード)の情報を更新するには、ページのIDと更新したい内容を指定します。

function updatePage() {
  const NOTION_API_KEY = 'YOUR_NOTION_SECRET_TOKEN';
  const PAGE_ID = 'YOUR_PAGE_ID'; // 更新したいページのID

  const url = `https://api.notion.com/v1/pages/${PAGE_ID}`;

  const payload = {
    'properties': {
      'ステータス': {
        'select': {
          'name': '完了'
        }
      }
    }
  };

  const options = {
    'method': 'patch',
    'headers': {
      'Authorization': `Bearer ${NOTION_API_KEY}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2022-06-28'
    },
    'payload': JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    Logger.log(data);
  } catch (e) {
    Logger.log('Error: ' + e);
  }
}

5. ページを削除する

ページを削除するには、そのページのIDを指定してDELETEリクエストを送信します。ただし、Notion APIでは直接的な「削除」機能は提供されていません。代わりに、アーカイブ(非表示)する機能を利用します。

function archivePage() {
  const NOTION_API_KEY = 'YOUR_NOTION_SECRET_TOKEN';
  const PAGE_ID = 'YOUR_PAGE_ID'; // アーカイブしたいページのID

  const url = `https://api.notion.com/v1/pages/${PAGE_ID}`;

  const payload = {
    'archived': true
  };

  const options = {
    'method': 'patch',
    'headers': {
      'Authorization': `Bearer ${NOTION_API_KEY}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2022-06-28'
    },
    'payload': JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    Logger.log(data);
  } catch (e) {
    Logger.log('Error: ' + e);
  }
}

まとめ

今回は、GASを使ってNotionデータベースの基本的な操作(取得、追加、更新、アーカイブ)を行う方法を解説しました。これらの基本をマスターすれば、さらに複雑な自動化や連携が可能になります。

  • Notion Integrationの作成とAPIキーの管理
  • データベースIDとページIDの取得方法
  • UrlFetchApp を使ったAPIリクエストの送信

これらの知識を活かして、あなたのNotion活用をさらに進化させていきましょう!

次回は、より実践的な「GASでNotionデータベースからデータを取得してGoogleスプレッドシートに集計する」といった応用編をお届けする予定です。お楽しみに!

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る