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通知、スプレッドシート連携などを業務に合わせて実装できます。