見出し画像

API初心者入門向け!GASを使ってスプレッドシートにNotionDBの内容を書き込んでみた(GAS使用)


はじめに

皆さん、Notionを使っていて、「このデータを加工したいな、Excelのシートに書き込めたら便利だな」と思うことはありませんか?
Notion上ではデータを加工する際に制限があるのが現状です。しかし、スプレッドシートにデータをエクスポートすることができれば、スプレッドシート上でグラフを作成したり、表を作成したりすることができ、それを資料に利用するというフローも可能になります。
そんな悩みを解決するため、今回の記事では、GASを使ってNotionDBの内容をスプレッドシートに書き込む方法を解説していきます。
また、今回はソースコードを共有させていただきますので、プログラムに詳しくない方でも、この記事の手順通りに行えば、API連携が可能になっております。

APIとは

APIとは、Application Programming Interfaceの略で、アプリケーション間を接続するためのインターフェースのことです。APIを使うことで、異なるソフトウェアやサービス間で機能を共有したり、データを連携することができます。

APIの主な特徴

アプリケーション間の連携: APIを通じて、異なるアプリケーション間でデータやサービスを共有・連携することができます。機能の共有: APIを使うことで、アプリケーションの機能を他のアプリケーションから呼び出して使うことができます。データ連携: APIを介してデータをやり取りすることで、アプリケーション間でデータを連携させることができます。

APIの主なメリット

業務の自動化: APIを使うことで、アプリケーション間の連携を自動化し、業務の効率化が図れます。開発の効率化: APIを活用することで、新しいアプリケーションの開発時間を短縮できます。イノベーションの促進: APIを通じて新しいサービスやビジネスモデルの創出が期待できます。

GASとは

Google Apps Script(GAS)は、JavaScriptをベースとしたスクリプト言語で、Googleのクラウドベースのサービスを自動化するためのツールです。GASを使用することで、Google Workspace(旧称G Suite)のアプリケーション(例:Google Sheets、Google Docs、Gmail、Google Driveなど)を連携させたり拡張したりすることができます。
GASの主な特徴は以下の通りです:

  1. 自動化:定期的なタスクを自動化するためのスクリプトを簡単に作成できます。

  2. 統合:異なるGoogleサービス間でデータをやり取りし、統合されたワークフローを構築できます。

  3. カスタマイズ:GoogleのアプリケーションにカスタムメニューやカスタムUIを追加して、ユーザー体験を向上させることができます。

  4. トリガー:特定のイベント(例:タイムベース、フォーム送信時、スプレッドシート編集時など)に応じてスクリプトを実行することができます。

  5. クラウドベース:GASはクラウド上で動作するため、インストールや設定が不要で、どこからでもアクセスしてスクリプトを実行できます。

Notion側構築準備

まずはNotion側で構築準備を行います。

①実験用のNotionデータベースを作成する

まずは実験用のデータベースを作成します。データベースの作成方法がわからないという方は、以下、過去記事をご覧ください。

https://www.notion.so/ja-jp/help/notion-academy/lesson/notion-admin-overview

上記が今回使用するDBになります。同じものを自分のNotion上に作っていただければと思います。

②Notionのアクセストークンを発行するため、以下サイトにアクセス

次にNotionのアクセストークンを発行します。こちらがAPI連携に必要なAPIキーとなります。
発行は以下サイトで行います。

※Notionにログインした状態のブラウザでクリックしてください。

③Notionのアクセストークンの発行

https://www.notion.so/my-integrations

アクセスするとこのような感じで、APIトークンを発行するページが出てきます。
私の場合は過去に作成したAPIトークンが出てきますが、初めての方は新しいものを作成しましょう。上記画像だと右下の『新しいインテグレーションを作成する』から発行可能です。

https://www.notion.so/my-integrations

発行画面に行くと、このような画面に入ります。APIを作成したいワークスペースを選択して名前も自分のわかりやすいものを記述しましょう。

https://www.notion.so/my-integrations

発行されると、このようにAPIトークンが発行されます。

④連携設定を行うNotionDBにAPIトークンを紐づける

最後にNotion側で行う設定として、APIトークンをNotionDBに紐づける必要があります。

https://www.notion.so/ja-jp/help/notion-academy/lesson/notion-admin-overview

連携させたいDBへ進み、画面右上の3点マークを押します。
右下に、コネクト『接続先』が出てきますので、先ほど発行したAPIトークンを選択します。
これでNotion側の設定は完了になります。

GASソースコード

const NOTION_API_TOKEN = 'NotionAPITOKEN';  // Notion APIトークン
const DATABASE_ID = 'Notion_DatabaseID';    // NotionデータベースID
const SHEET_ID = 'SHEET_ID';           // GoogleスプレッドシートID

function fetchNotionDatabase() {
  const url = `https://api.notion.com/v1/databases/${DATABASE_ID}/query`;
  const options = {
    method: 'post',
    headers: {
      'Authorization': `Bearer ${NOTION_API_TOKEN}`,
      'Content-Type': 'application/json',
      'Notion-Version': '2021-05-13'  // Notion APIのバージョン
    },
    payload: JSON.stringify({})
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    Logger.log(data);  // レスポンスデータをログに出力
    return data.results;
  } catch (error) {
    Logger.log(`Error fetching Notion database: ${error}`);
    return [];
  }
}

function writeToSheet(notionData) {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getActiveSheet();
  sheet.clear();  // 既存のデータをクリア

  // ヘッダーを書き込む
  const headers = ['見出し', 'テキスト', '日付', '数値'];
  sheet.appendRow(headers);

  notionData.forEach(page => {
    const title = page.properties['見出し']?.title[0]?.text?.content || '';
    const text = page.properties['テキスト']?.rich_text[0]?.text?.content || '';
    const date = page.properties['日付']?.date?.start || '';
    const number = page.properties['数値']?.number || '';

    const row = [title, text, date, number];
    sheet.appendRow(row);
  });
}

function main() {
  const notionData = fetchNotionDatabase();
  writeToSheet(notionData);
}

こちらが、GASで使用するスプレッドシートになります。
後々説明しますが、皆さんは基本的にコードを書き換える必要はありません。
ただ、『NotionAPITOKEN』『Notion_DatabaseID』『SHEET_ID』は自分の環境のものに、 headers部分は自分のDBの構造によって変える必要があります。
プログラミングが全く分からないという方は、NotionDBの構造も本記事と同じものにして、まずは理解するところから始めてください。

GAS側構築準備

①Googleアカウントにまずはアクセスし、スプレッドシートを開く
②スプレッドシート内の『拡張機能』を選択し、『Google App Script(GAS)』を開く

③上記スクリプトコードをコピーペーストして保存

保存に成功していると、赤枠部分に関数が表示されます。

④『NotionAPITOKEN』『Notion_DatabaseID』『SHEET_ID』を自分の環境のものに変える

  • 『NotionAPITOKEN』は先ほど発行したものです。

  • 『Notion_DatabaseID』は以下記事を参考にしてください。

  • 『SHEET_ID』は以下記事を参考にしてください。

ここまでの手順が出来た場合、NotionDBがこの記事と全く同じになっている場合はこれ以上何かすることはありませんが、異なる場合、headers部分は自分のDBの構造によって変える必要があります。

⑤実行してみる
準備は整いましたので、実際に実行していきます。
今回実行する関数は『main』になりますので、関数名が書いてあるところをプルダウンで開き、変更します。

mainへの変更が確認出来たら、『実行』ボタンをクリックします。
⑥実行した後の挙動確認

スプレッドシートに書き込みが完了していればエラーもなく連携が出来ていると言えます。

まとめ

以上がGASを使ったNotionからスプレッドシートへの書き込みとなります。
スプレッドシートへの書き込みが出来れば、そこから別のサービスへのデータ連携等も可能になります。
トリガー機能を使えば、時間ごとの定期実行も可能になります。
是非、Notionを別のサービスと連携して業務の効率化を行ってみてください。

お知らせ

電巧社ではセキュリティ分野専門のブログも公開しています。ゼロトラストセキュリティを始めとした、ランサムウェアへの対処法等を紹介しています。こちらもよろしくお願いします。

参考文献

[1] isfnet-services.com - Google Apps Script(GAS)の基本的な使い方|Hello Worldを ... (https://www.isfnet-services.com/blog/125/GoogleAppsScript)
[2] 株式会社ASTINA - Google Apps Script(GAS)の基本的な使い方|2つの開き方と ... (https://www.astina.co/media/1137/)
[3] dsk-cloud.com - Google Apps Script の書き方をわかりやすく解説 (https://www.dsk-cloud.com/blog/how-to-write-google-apps-script)
[4] Kobe University - Google Apps Script 入門 (https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-01.html)