GASでNotionデータベースを自由自在に操作!基本から応用まで
/ 初心者向け
NotionデータベースとGASの連携で自動化の世界へ!
Notionは、ドキュメント作成、タスク管理、データベースなど、多機能なワークスペースとして多くの人に利用されています。一方、Google Apps Script (GAS) は、Google Workspaceの各サービスを連携させたり、外部サービスと連携させたりできる強力な自動化ツールです。
この二つを組み合わせることで、Notionデータベースの情報をGASで取得・更新したり、GASで処理した結果をNotionに書き込んだりといった、様々な自動化が実現可能になります。本記事では、GASを使ってNotionデータベースを操作するための基本的な手順と、具体的なコード例を解説していきます。
1. Notion APIの準備
GASからNotionデータベースを操作するためには、まずNotion APIを利用するための準備が必要です。以下の手順で進めましょう。
1. Notion Integrationsページへのアクセス: https://www.notion.so/my-integrations にアクセスします。
2. 「New integration」ボタンのクリック: 新しい連携を作成します。
3. 連携情報の入力: 「Name」に任意の名前(例: GAS Notion Connector)を入力し、「Associated workspace」で連携したいワークスペースを選択します。
4. 「Submit」ボタンのクリック: 連携が作成され、「Internal Integration Token」が表示されます。このトークンは後ほどGASで利用するため、必ずコピーして安全な場所に保管してください。
5. Notionデータベースへの連携: 操作したいNotionデータベースを開き、右上の「Share」ボタンをクリックします。「Invite」セクションで、先ほど作成した連携名(例: GAS Notion Connector)を検索し、「Invite」をクリックします。これで、GASからこのデータベースにアクセスできるようになります。
2. GASプロジェクトの作成とAPIキーの設定
次に、GASプロジェクトを作成し、先ほど取得したAPIキーを設定します。
1. GASプロジェクトの作成: Googleドライブの任意の場所で右クリックし、「新規」>「その他」>「Google Apps Script」を選択して新しいプロジェクトを作成します。プロジェクト名も分かりやすいものに変更しましょう。
2. APIキーの定数化: GASエディタを開き、以下のコードのように、APIキーとデータベースIDを定数として定義しておくと便利です。
// .envファイルがあればそこから読み込むのがベストですが、ここでは直接記述します
const NOTION_API_KEY = 'YOUR_INTERNAL_INTEGRATION_TOKEN'; // ここにNotionのAPIキーを貼り付け
const DATABASE_ID = 'YOUR_DATABASE_ID'; // ここに操作したいNotionデータベースのIDを貼り付け
// データベースIDは、NotionデータベースのURLに含まれています。
// 例: https://www.notion.so/your-workspace/DATABASE_ID?v=... の DATABASE_ID 部分です。
注意: .env ファイルのように機密情報を直接コードに書かない方法もありますが、ここでは簡易的に直接記述します。実際の運用では、よりセキュアな方法を検討してください。
3. Notionデータベースからデータを取得する
Notion APIの databases.query エンドポイントを利用して、データベースの情報を取得できます。GASでは UrlFetchApp サービスを使用します。
3.1 データベースの全件取得
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' // 利用可能な最新バージョンを指定
},
'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 database: ' + e);
return null;
}
}
この関数を実行すると、Notionデータベースの全ページ(レコード)の情報が data.results に配列として返ってきます。各要素はNotionのページオブジェクトです。
3.2 特定の条件でデータを絞り込む (Filter)
databases.query エンドポイントでは、filter パラメータを使ってデータを絞り込むことができます。例えば、「ステータス」プロパティが「完了」のページのみを取得する場合:
function getFilteredDatabase() {
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': 'Completed' // ここに指定したい値(選択肢)を入力
}
}
})
};
try {
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
Logger.log(data.results);
return data.results;
} catch (e) {
Logger.log('Error fetching filtered Notion database: ' + e);
return null;
}
}
Notionのプロパティタイプ(text, number, date など)によって、filter の書き方が異なります。詳しくはNotion APIのドキュメントを参照してください。
4. Notionデータベースに新しいページを追加する
pages エンドポイントの post メソッドを使用します。新しいページを作成するには、親となるデータベースIDと、追加したいプロパティの情報を指定します。
function addPageToDatabase() {
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': '新しいタスク'
}
}
]
},
'Status': {
'select': {
'name': 'To Do' // 初期ステータスを設定
}
}
// 他のプロパティもここに追加できます
// 例: 'Due Date': { 'date': { 'start': '2024-08-01' } }
}
})
};
try {
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
Logger.log('Page added successfully: ' + JSON.stringify(data));
return data;
} catch (e) {
Logger.log('Error adding page to Notion database: ' + e);
return null;
}
}
properties の部分には、Notionデータベースで定義されているプロパティ名と、その値(型に合わせた形式)を指定します。タイトルプロパティは title タイプ、セレクトプロパティは select タイプといった具合です。
5. 既存のページを更新する
pages/{page_id} エンドポイントの patch メソッドを使用します。更新したいページのIDを指定し、変更したいプロパティを送信します。
function updateNotionPage(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': {
'Status': {
'select': {
'name': 'In Progress'
}
}
}
})
};
try {
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
Logger.log('Page updated successfully: ' + JSON.stringify(data));
return data;
} catch (e) {
Logger.log('Error updating Notion page: ' + e);
return null;
}
}
// 例: 最初のページを更新する場合
// function testUpdate() {
// const pages = getNotionDatabase();
// if (pages && pages.results.length > 0) {
// const pageIdToUpdate = pages.results[0].id;
// updateNotionPage(pageIdToUpdate);
// } else {
// Logger.log('No pages found to update.');
// }
// }
更新したいページのIDは、getNotionDatabase() 関数などで取得した結果から page.id で取得できます。
まとめ
GASとNotion APIを連携させることで、Notionデータベースをより強力に活用できます。今回ご紹介した「データの取得」「追加」「更新」は、自動化の基本となる機能です。これらの機能を応用すれば、以下のような自動化も可能になります。
- Googleフォームから送信されたデータをNotionデータベースに追加する
- Googleスプレッドシートのデータを基にNotionデータベースを更新する
- Notionデータベースの特定の条件を満たすページをGASで処理し、結果をSlackに通知する
まずは、今回紹介したコードを参考に、ご自身のNotionデータベースで試してみてください。APIの仕様は変更される可能性があるため、常にNotion Developersの公式ドキュメントを参照することをおすすめします。
Notion APIのドキュメント: https://developers.notion.com/reference/intro
GASとNotionの連携で、あなたのワークフローをさらに効率化しましょう!
GAS自動化の導入相談
請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。