技術ブログ

GASでNotionデータベースを操作!初心者向け徹底解説

/ 初心者向け

GASでNotionデータベースを操作!初心者向け徹底解説

NotionデータベースをGASで操作!夢が広がる自動化の世界

皆様、こんにちは!GAS専門ブロガーの[あなたの名前]です。今回は、今や多くのプロジェクト管理や情報整理で活用されているNotionと、Google Apps Script (GAS) の連携について、初心者の方にも分かりやすく解説していきます。

「GASでNotionを操作できたら、もっと便利になるのに…」そう思っていませんか? 実は、GASを使えばNotionデータベースの情報を取得したり、新しいページを作成したり、既存のページを更新したりと、様々な自動化が可能です。これにより、日々のルーチンワークを劇的に効率化できるだけでなく、これまで不可能だった高度なワークフローも実現できるようになります。

この記事では、GASでNotionデータベースを操作するための基本的な考え方から、具体的なコード例までを、ステップバイステップでご紹介します。NotionとGAS、それぞれの基本に触れつつ、実際に手を動かしながら学んでいきましょう。

Notion APIの基本を理解する

GASからNotionデータベースを操作するには、Notionが提供するAPIを利用します。APIとは、異なるソフトウェア間で情報をやり取りするための「窓口」のようなものです。

Notion APIを利用するには、まずNotion側で「インテグレーション」を作成し、「インテグレーショントークン」を取得する必要があります。このトークンが、GASからNotionへアクセスするための「鍵」となります。

インテグレーションの作成手順

1. Notionの設定とメンバーシップ にアクセスします。

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

3. インテグレーションの名前(例: GAS連携)と、連携したいワークスペースを選択します。

4. 「概要」タブに表示される「インテグレーショントークン」をコピーしておきます。これは、後でGASのコードで使用するので、安全な場所に保管してください。

データベースへのアクセス権限を付与する

作成したインテグレーションが、特定のNotionデータベースにアクセスできるように、データベースの共有設定で許可を与える必要があります。

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

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

3. 「招待」の入力欄に、作成したインテグレーション名を入力し、追加します。

4. 「招待」ボタンをクリックして、アクセス権限を付与します。

GASからNotionデータベースにアクセスしてみよう!

インテグレーションの準備が整ったら、いよいよGASのコードを書いていきます。GASからNotion APIへリクエストを送信するには、UrlFetchApp サービスを利用します。

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

まずは、特定のデータベースに含まれる全てのページを取得するコードを見てみましょう。

function getNotionDatabaseItems() {
  const NOTION_API_KEY = 'YOUR_INTEGRATION_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.results);
    
    // 取得したページの情報(タイトルなど)を加工して表示する処理をここに追加
    data.results.forEach(page => {
      Logger.log('ページタイトル: ' + page.properties.Name.title[0].plain_text);
      // 他のプロパティも取得可能
    });

  } catch (e) {
    Logger.log('エラーが発生しました: ' + e);
  }
}

コードの解説:

  • NOTION_API_KEY: 先ほど取得したインテグレーショントークンをここに入力します。
  • DATABASE_ID: NotionのURLに含まれるデータベースIDを指定します。URLが https://www.notion.so/your-workspace/XXXXXXXXXX のような形式の場合、XXXXXXXXXX の部分がデータベースIDです。
  • url: Notion APIのデータベースクエリエンドポイントを指定します。
  • options: リクエストに必要なヘッダー情報(APIキー、APIバージョンなど)と、HTTPメソッド(POST)を指定します。
  • payload: クエリの条件などを指定しますが、今回は全件取得のため空のオブジェクト {} を渡しています。
  • UrlFetchApp.fetch(): 指定したURLへHTTPリクエストを送信し、レスポンスを取得します。
  • JSON.parse(): Notion APIからのレスポンスはJSON形式なので、JavaScriptのオブジェクトに変換します。
  • Logger.log(): 取得したデータをログに出力します。GASのエディタの「実行ログ」で確認できます。
  • data.results.forEach(): 取得した各ページの情報にアクセスし、タイトルなどのプロパティを取り出しています。page.properties.Name.title[0].plain_text の部分は、Notionデータベースの「名前」プロパティ(タイトル)を取得する例です。データベースのプロパティ名に合わせて適宜変更してください。

新しいページを作成する

次に、GASから新しいページを作成する方法を見てみましょう。

function createNotionPage() {
  const NOTION_API_KEY = 'YOUR_INTEGRATION_TOKEN';
  const DATABASE_ID = 'YOUR_DATABASE_ID';
  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 {
    UrlFetchApp.fetch(url, options);
    Logger.log('新しいページが作成されました!');
  } catch (e) {
    Logger.log('エラーが発生しました: ' + e);
  }
}

コードの解説:

  • url: Notion APIのページ作成エンドポイントを指定します。
  • payload: 新しく作成するページの情報を含めます。
  • parent.database_id: 作成するページが属するデータベースのIDを指定します。
  • properties: 作成するページの各プロパティの値を指定します。
  • 'Name' はタイトルプロパティです。content の部分に設定したいタイトルを記述します。
  • 'ステータス' はセレクトボックスプロパティの例です。name の部分に選択したいオプションの名称を記述します。

まとめと今後の展望

いかがでしたでしょうか? GASとNotion APIを連携させることで、Notionデータベースの操作が格段に楽になることがお分かりいただけたかと思います。今回ご紹介した「全ページ取得」と「新規ページ作成」は、ほんの入り口に過ぎません。Notion APIには、ページ内容の更新、ブロックの追加・削除、データベースの検索条件の指定など、さらに多くの機能が用意されています。

これらの機能を活用すれば、例えば以下のような自動化が実現できます。

  • Googleフォームで受け取った情報をNotionデータベースに自動登録する。
  • 定期的(毎日、毎週など)にNotionデータベースの進捗状況をSlackなどに通知する。
  • 特定の条件を満たすNotionデータベースのレコードを抽出し、Googleスプレッドシートに転記する。

GASとNotionの連携は、あなたの業務効率を劇的に向上させる強力な武器となります。ぜひ、今回学んだことを元に、ご自身の業務に合わせた自動化に挑戦してみてください。今後もGASとNotionに関するさらに詳しい情報をお届けしていきますので、お楽しみに!

GAS自動化の導入相談

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

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