技術ブログ

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

/ 初心者向け

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

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

皆さんは日々のタスク管理や情報整理にNotionを使っていますか? Notionは非常に柔軟でパワフルなツールですが、さらにその可能性を広げるのがGoogle Apps Script (GAS) です。

GASを使えば、NotionデータベースとGoogle Spreadsheetなどの他のサービスを連携させたり、定型的な作業を自動化したりと、夢のようなワークフローを実現できます。本記事では、GASを使ってNotionデータベースを操作する基本的な方法から、具体的なコード例まで、初心者の方でも理解できるように解説していきます。

1. Notion APIの準備

GASからNotionデータベースを操作するには、まずNotion APIを利用するための準備が必要です。

1. Notion Integrationsページにアクセス: https://www.notion.so/my-integrations にアクセスし、「New integration」ボタンをクリックします。

2. インテグレーションの作成:

  • 「Name」に分かりやすい名前(例: GAS Notion Integration)を入力します。
  • 「Associated workspace」で連携したいワークスペースを選択します。
  • 「Capabilities」はデフォルトのままで大丈夫です。
  • 「Submit」をクリックします。

3. Integration Tokenの取得: 作成されたインテグレーションの詳細ページに表示される「Internal integration token」をコピーしておきます。これがGASからNotionにアクセスするための「鍵」となります。

4. データベースへのインテグレーションの追加: 操作したいNotionデータベースを開き、右上の「…」メニューから「Add connections」を選択します。先ほど作成したインテグレーション名が表示されるので、それを選択して「Allow access」をクリックします。これで、GASからこのデータベースにアクセスできるようになります。

2. GASプロジェクトの作成とAPIキーの設定

次に、GASプロジェクトを作成し、取得したAPIキーを設定します。

1. GASプロジェクトの作成: Googleドライブなどで「新規」>「その他」>「Google Apps Script」を選択して、新しいプロジェクトを作成します。

2. スクリプトエディタの設定: スクリプトエディタが開いたら、Code.gs ファイルの先頭に、APIキーを定数として定義します。

// Notion API Key
const NOTION_API_KEY = 'YOUR_INTEGRATION_TOKEN'; // ここに先ほど取得したIntegration Tokenを貼り付けます

// 操作したいデータベースのID (URLから取得できます)
// 例: https://www.notion.so/your-workspace/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// このxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxの部分がDatabase IDです。
const DATABASE_ID = 'YOUR_DATABASE_ID';

// Notion API エンドポイント
const NOTION_API_URL = 'https://api.notion.com/v1/databases/' + DATABASE_ID + '/query';

YOUR_INTEGRATION_TOKENYOUR_DATABASE_ID は、ご自身のものに置き換えてください。Database IDはNotionデータベースのURLから取得できます。

3. データベースのデータを取得する (Query)

まずは、Notionデータベースのデータを取得する方法を見ていきましょう。

function getNotionData() {
  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(NOTION_API_URL, options);
    const data = JSON.parse(response.getContentText());
    
    Logger.log(data);
    
    // 取得したデータを加工して表示する例
    if (data.results.length > 0) {
      data.results.forEach(function(page) {
        const title = page.properties.Name.title[0].plain_text; // 'Name'はプロパティ名に合わせて変更してください
        const url = page.url;
        Logger.log('タイトル: ' + title + ', URL: ' + url);
      });
    } else {
      Logger.log('データが見つかりませんでした。');
    }
    
  } catch (e) {
    Logger.log('エラーが発生しました: ' + e);
  }
}

このコードは、Notion APIにPOSTリクエストを送信し、データベースの全データを取得します。Logger.log() で出力される内容を確認すると、Notionデータベースの構造を理解するのに役立ちます。

コードのポイント:

  • headersAuthorization ヘッダーでAPIキーを、Notion-Version でAPIバージョンを指定します。
  • UrlFetchApp.fetch() でAPIにリクエストを送信します。
  • JSON.parse() でレスポンスをJavaScriptオブジェクトに変換します。
  • data.results に取得したページ(レコード)の配列が入っています。
  • page.properties の中に各プロパティの値が含まれています。プロパティ名(例: Name)や型(例: title)は、ご自身のNotionデータベースに合わせて調整してください。

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

Notionデータベースに新しいデータを追加してみましょう。

function addNotionPage() {
  const createUrl = 'https://api.notion.com/v1/pages';

  const payload = JSON.stringify({
    'parent': {
      'database_id': DATABASE_ID
    },
    'properties': {
      'Name': {
        'title': [
          {
            'type': 'text',
            'text': {
              'content': 'GASから追加したタスク'
            }
          }
        ]
      },
      'ステータス': {
        'select': {
          'name': '未着手'
        }
      }
      // 他のプロパティもここに追加できます
    }
  });

  const options = {
    'method' : 'post',
    'headers' : {
      'Authorization' : 'Bearer ' + NOTION_API_KEY,
      'Content-Type' : 'application/json',
      'Notion-Version' : '2022-06-28'
    },
    'payload': payload
  };

  try {
    const response = UrlFetchApp.fetch(createUrl, options);
    Logger.log('ページが追加されました: ' + response.getContentText());
  } catch (e) {
    Logger.log('エラーが発生しました: ' + e);
  }
}

payloadproperties 部分が、追加したいデータの内容です。プロパティ名や型に合わせて記述してください。今回の例では、「Name」プロパティにテキストを追加し、「ステータス」プロパティに選択肢を追加しています。

5. 既存のページ(レコード)を更新する (Update)

既存のページの内容を変更する方法です。

function updateNotionPage(pageId) {
  const updateUrl = 'https://api.notion.com/v1/pages/' + pageId;

  const payload = JSON.stringify({
    'properties': {
      'Name': {
        'title': [
          {
            'type': 'text',
            'text': {
              'content': '更新されたタスク名'
            }
          }
        ]
      },
      'ステータス': {
        'select': {
          'name': '完了'
        }
      }
    }
  });

  const options = {
    'method' : 'patch',
    'headers' : {
      'Authorization' : 'Bearer ' + NOTION_API_KEY,
      'Content-Type' : 'application/json',
      'Notion-Version' : '2022-06-28'
    },
    'payload': payload
  };

  try {
    const response = UrlFetchApp.fetch(updateUrl, options);
    Logger.log('ページが更新されました: ' + response.getContentText());
  } catch (e) {
    Logger.log('エラーが発生しました: ' + e);
  }
}

// 使用例: 実際には取得したページIDを指定します
// updateNotionPage('page_id_to_update');

更新するには、更新したいページの pageId が必要です。pageId は、getNotionData() 関数で取得した page.id などから取得できます。methodpatch に変更し、payload で更新したいプロパティを指定します。

6. ページ(レコード)を削除する (Delete)

ページを削除するには、そのページの pageId が必要です。

function deleteNotionPage(pageId) {
  const deleteUrl = 'https://api.notion.com/v1/pages/' + pageId;

  const options = {
    'method' : 'delete',
    'headers' : {
      'Authorization' : 'Bearer ' + NOTION_API_KEY,
      'Notion-Version' : '2022-06-28'
    }
  };

  try {
    const response = UrlFetchApp.fetch(deleteUrl, options);
    Logger.log('ページが削除されました: ' + response.getContentText());
  } catch (e) {
    Logger.log('エラーが発生しました: ' + e);
  }
}

// 使用例: 実際には取得したページIDを指定します
// deleteNotionPage('page_id_to_delete');

methoddelete に設定してリクエストを送信するだけで、指定したページが削除されます。削除は元に戻せないので、実行には十分注意してください。

まとめ

GASを使ってNotionデータベースを操作する方法の基本をご紹介しました。データの取得、追加、更新、削除ができるようになれば、NotionとGASの連携による自動化の幅が大きく広がります。

  • Notion APIの準備: Integration Tokenの取得とデータベースへの追加が重要です。
  • GASでの設定: APIキーとDatabase IDを適切に設定します。
  • 各操作: GET (Query), POST (Create), PATCH (Update), DELETE (Delete) のHTTPメソッドと、適切なペイロードやヘッダーを理解することが鍵となります。

これらの基本をマスターすれば、Google SpreadsheetのデータをNotionに自動転記したり、Notionのデータを元にメールを自動送信したりと、様々な業務効率化のアイデアを実現できるはずです。ぜひ、ご自身のNotionデータベースで試してみてください!

次回は、より複雑なプロパティの操作や、エラーハンドリングの強化について掘り下げていく予定です。お楽しみに!

GAS自動化の導入相談

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

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