技術ブログ

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

/ 初心者向け

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

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

Notionはその柔軟性と多機能性から、多くのユーザーに支持されています。しかし、日々のルーチンワークでNotionデータベースの更新やデータ取得に時間を取られていませんか?

そんな悩みを解決するのが Google Apps Script (GAS) です。GASを使えば、JavaScriptの知識を活かしてNotionデータベースを自動化し、作業効率を劇的に向上させることができます。

この記事では、GASでNotionデータベースを操作するための基本的な手順から、実践的な応用例までを、具体的なコード例とともに分かりやすく解説します。

1. Notion APIの基本とGASからの接続

NotionデータベースをGASから操作するには、まずNotion APIを利用する必要があります。GASからNotion APIへリクエストを送信するには、UrlFetchApp サービスを使用します。

1.1 Notion APIキーの取得

Notion APIを利用するためには、APIキー(Integrations Secret)が必要です。

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

2. 「New integration」ボタンをクリックし、新しいインテグレーションを作成します。

3. 「Internal Integration Token」として表示されるトークンをコピーします。このトークンは機密情報として扱ってください。

1.2 Notionデータベースへのアクセス権限付与

作成したインテグレーションを、操作したいNotionデータベースに共有(Share)する必要があります。

1. 対象のNotionデータベースのページを開きます。

2. 右上の「Share」ボタンをクリックします。

3. 「Invite」セクションで、作成したインテグレーションの名前を検索し、「Can edit」などの適切な権限を選択して招待します。

1.3 GASからNotion APIへ接続

GASでNotion APIに接続するための基本的なコードは以下のようになります。APIキーとデータベースIDはご自身のものに置き換えてください。

const NOTION_API_KEY = 'YOUR_NOTION_API_KEY'; // 取得したAPIキー
const DATABASE_ID = 'YOUR_DATABASE_ID'; // 操作したいデータベースのID

function getNotionDatabase() {
  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バージョンを指定
    }
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    Logger.log(data);
  } catch (e) {
    Logger.log(e);
  }
}
  • NOTION_API_KEY: 取得したNotion APIキーを入力します。
  • DATABASE_ID: 操作したいNotionデータベースのIDを入力します。これは、データベースのURLに含まれる https://www.notion.so/your-workspace/ の部分の - で区切られた部分です。
  • Notion-Version: Notion APIのバージョンを指定します。最新のバージョンを使用することをおすすめします。

2. Notionデータベースからのデータ取得

上記のコードを応用して、データベースからデータを取得してみましょう。

2.1 全てのページを取得

function getAllPages() {
  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'
    }
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());

    data.results.forEach(page => {
      const pageTitle = page.properties.Name.title[0]?.plain_text || '無題';
      Logger.log(`ページタイトル: ${pageTitle}`);
      // 他のプロパティも同様に取得できます
    });

  } catch (e) {
    Logger.log(e);
  }
}

data.results には、データベース内の各ページの情報が含まれています。page.properties には、Notionデータベースの各カラム(プロパティ)の情報が格納されています。プロパティ名(例: 'Name')は、ご自身のデータベースのカラム名に合わせてください。

2.2 特定の条件でページを絞り込む

query エンドポイントでは、filter パラメータを使って条件を指定できます。

例えば、「ステータスが'完了'のタスクのみを取得」したい場合:

function getCompletedTasks() {
  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'
    },
    payload: JSON.stringify({
      'filter': {
        'property': 'Status', // ステータスのカラム名
        'select': {
          'equals': '完了'
        }
      }
    })
  };

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

3. Notionデータベースへのデータ追加・更新

3.1 新しいページを作成する

pages エンドポイントの post メソッドを使用します。

function createNewPage() {
  const url = 'https://api.notion.com/v1/pages';
  const options = {
    method: 'post',
    headers: {
      'Authorization': `Bearer ${NOTION_API_KEY}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2022-06-28'
    },
    payload: JSON.stringify({
      'parent': {
        'database_id': DATABASE_ID
      },
      'properties': {
        'Name': {
          'title': [
            {
              'type': 'text',
              'text': {
                'content': 'GASから作成した新しいタスク'
              }
            }
          ]
        },
        'ステータス': {
          'select': {
            'name': '未着手'
          }
        }
      }
    })
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    Logger.log(JSON.parse(response.getContentText()));
  } catch (e) {
    Logger.log(e);
  }
}
  • parent.database_id: 作成するページを格納するデータベースのIDを指定します。
  • properties: 作成するページの各プロパティの値を指定します。プロパティの型(title, select など)に合わせて値を設定します。

3.2 既存のページを更新する

pages/{page_id} エンドポイントの patch メソッドを使用します。更新したいページのIDが必要です。

function updatePageExample(pageId) {
  const url = `https://api.notion.com/v1/pages/${pageId}`;
  const options = {
    method: 'patch',
    headers: {
      'Authorization': `Bearer ${NOTION_API_KEY}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2022-06-28'
    },
    payload: JSON.stringify({
      'properties': {
        'ステータス': {
          'select': {
            'name': '進行中'
          }
        }
      }
    })
  };

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

pageId には、更新したいページのIDを指定してください。

4. 実践的な応用例

4.1 Googleカレンダーとの連携

GoogleカレンダーのイベントをNotionデータベースに自動登録したり、NotionデータベースのタスクをGoogleカレンダーに反映させたりすることができます。

4.2 Googleスプレッドシートとの連携

スプレッドシートのデータをNotionデータベースにインポートしたり、その逆を行ったりすることが可能です。例えば、日々の売上データをスプレッドシートに記録し、それをNotionデータベースに自動集計するといった運用が考えられます。

4.3 Webhookによるリアルタイム更新

Notion側で変更があった際にGASに通知を受け取る Webhook を利用することで、よりリアルタイムな連携が実現できます。これは、Notionの変更をトリガーとして他のサービスを起動する際に非常に有効です。

まとめ

GASとNotion APIを組み合わせることで、Notionデータベースの運用を大幅に効率化できます。今回ご紹介した基本操作をマスターすれば、さらに高度な自動化や、様々なサービスとの連携も可能になるでしょう。

ぜひ、あなたのNotion活用にGASを取り入れて、よりスマートなワークフローを構築してみてください。

GAS自動化の導入相談

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

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