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_TOKEN と YOUR_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データベースの構造を理解するのに役立ちます。
コードのポイント:
headersにAuthorizationヘッダーで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);
}
}
payload の properties 部分が、追加したいデータの内容です。プロパティ名や型に合わせて記述してください。今回の例では、「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 などから取得できます。method を patch に変更し、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');
method を delete に設定してリクエストを送信するだけで、指定したページが削除されます。削除は元に戻せないので、実行には十分注意してください。
まとめ
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通知、スプレッドシート連携などを業務に合わせて実装できます。