技術ブログ

GASでNotionデータベースを操作!基本から応用まで

/ 初心者向け

GASでNotionデータベースを操作!基本から応用まで

GASでNotionデータベースを操作!基本から応用まで

Google Workspaceを日々活用されている皆さん、こんにちは!今回は、人気のある情報管理ツール「Notion」と、Googleが提供する業務自動化ツール「Google Apps Script (GAS)」を連携させる方法について、初心者の方にも分かりやすく解説していきます。

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

Notionは非常に柔軟でパワフルなツールですが、GASと連携することで、さらにその可能性は広がります。例えば、以下のようなことが実現できます。

  • Googleフォームからの回答をNotionデータベースに自動登録する
  • スプレッドシートのデータを元にNotionデータベースのレコードを更新する
  • Notionデータベースの特定条件のデータを抽出し、メールで通知する
  • GASからNotionカレンダーにイベントを自動登録する

これらの自動化により、日々のルーチンワークを効率化し、より創造的な業務に集中できるようになります。

Notion APIの概要

GASからNotionデータベースを操作するには、Notionが提供する「Notion API」を利用します。Notion APIは、RESTful APIであり、HTTPリクエストを送信することで、データベースの読み取り、書き込み、更新、削除などが可能です。

GASでAPI連携を行う場合、主にUrlFetchAppサービスを使用します。

事前準備:Notion APIキーの取得

まず、Notion APIを利用するための「インテグレーション」(APIキー)を作成する必要があります。以下の手順で取得してください。

1. Notionの「Settings & members」から「Integrations」を選択します。

2. 「New integration」ボタンをクリックし、Internal Integrationを選択します。

3. 「Select the workspace」で連携したいワークスペースを選択します。

4. 「Continue」をクリックし、表示された「Internal Integration Token」がAPIキーになります。このトークンは誰にも共有しないように注意してください。

5. 次に、GASから操作したいNotionデータベースのページを、作成したインテグレーションに共有(「Share」ボタンから)する必要があります。

GASでNotionデータベースのデータを取得する

ここでは、GASを使ってNotionデータベースのレコードを取得する基本的なコード例を紹介します。

まず、GASエディタを開き、以下のコードを記述します。

function getNotionDatabaseData() {
  const NOTION_API_KEY = 'YOUR_NOTION_API_KEY'; // 取得したAPIキーに置き換えてください
  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);
    return data;
  } catch (e) {
    Logger.log('Error fetching Notion data: ' + e);
    return null;
  }
}

コードの解説:

  • NOTION_API_KEY: 先ほど取得したNotion APIキーを設定します。
  • DATABASE_ID: NotionのURLに含まれるデータベースIDを指定します。https://www.notion.so/yourworkspace/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx の部分です。
  • url: Notion APIのデータベースクエリエンドポイントを指定します。
  • options: HTTPリクエストのヘッダーとペイロードを設定します。AuthorizationヘッダーにAPIキーを、Notion-VersionにはAPIのバージョンを指定します。
  • UrlFetchApp.fetch(): 指定したURLにHTTPリクエストを送信し、レスポンスを取得します。
  • JSON.parse(): レスポンスのJSONデータをJavaScriptオブジェクトに変換します。

データを追加する

次に、Notionデータベースに新しいレコードを追加する方法です。

function addNotionDatabaseItem(properties) {
  const NOTION_API_KEY = 'YOUR_NOTION_API_KEY';
  const DATABASE_ID = 'YOUR_DATABASE_ID';
  const url = `https://api.notion.com/v1/pages`;

  const payload = {
    'parent': {
      'database_id': DATABASE_ID
    },
    'properties': properties
  };

  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);
    Logger.log('Item added successfully: ' + response.getContentText());
    return JSON.parse(response.getContentText());
  } catch (e) {
    Logger.log('Error adding item to Notion: ' + e);
    return null;
  }
}

// 使用例:テキストとセレクトプロパティを持つデータベースにアイテムを追加
function exampleAdd() {
  const newItemProperties = {
    'Name': {
      'title': [
        {
          'type': 'text',
          'text': {
            'content': 'GASから追加したタスク'
          }
        }
      ]
    },
    'Status': {
      'select': {
        'name': 'ToDo'
      }
    }
  };
  addNotionDatabaseItem(newItemProperties);
}

properties引数には、Notionデータベースのカラム構造に合わせたJSONオブジェクトを渡します。上記例では、「Name」がタイトル(テキスト)、「Status」がセレクトプロパティのデータベースを想定しています。

まとめ

GASとNotion APIを組み合わせることで、業務の自動化と効率化は大きく進みます。今回ご紹介したデータの取得と追加は、Notion APIの基本ですが、これを応用することで、より複雑な処理も実現可能です。

ぜひ、皆さんのNotion活用にGASを取り入れてみてください!次回は、データの更新や削除、より高度なクエリについて掘り下げていきます。お楽しみに!

GAS自動化の導入相談

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

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