今回はGAS(Google Apps Script)に関して書いていきます。
以前、Notion活用事例として思いつきの雑多なメモを管理する内容を記事にしました(以下リンク)。
上記の記事で、メモを登録する導線としてNotionアプリのAndroidウィジェットを紹介しました。
Androidウィジェットでも機能的には十分だったのですが、せっかくなので登録導線を自作してみたいなと。
- GASでWebページを作れる
- GASでNotion連携できる
上記2点を駆使して、試しに作ってみることにしました。
今回の記事では、その辺りに関して書いていきます。
GASとは?
まずはGASとは?に関して書いておきます。
Google Apps Script(GAS)は、ひとことで言えばGoogleが提供する各種サービスの自動化/連携を行うためのローコード開発(※1)ツールです。GASを使うと、Gmailやカレンダー、Googleスプレッドシート、Googleドライブなど、Googleが提供する様々なサービス上で処理を自動化したり、複数のサービスを連携させたりできます。
※1:ローコード開発:可能な限りソースコードを書かずにアプリケーションを開発する手法出典:【入門】GASとは?できること&活用法を解説(サンプルコード付き) - マーケティングオートメーションツール SATORI
ついでに、今回の内容に関連しそうな記事をいくつかリンクしておきます。
miya-moto-memo.hatenablog.commiya-moto-memo.hatenablog.commiya-moto-memo.hatenablog.com
完成図デモ
まずは手っ取り早く、完成図のデモをします。
GASで実装したWebページを使って、Notionデータベースにメモを登録します。
プログラム事前準備
上記のデモで紹介したWebページのプログラムを載せていきます。
ただその前に、GASでNotionのデータを操作するためには事前準備が必要です。
事前準備の手順は別記事にて詳しく書いています。
以下あたりの記事を見てもらえればと思います。
miya-moto-memo.hatenablog.commiya-moto-memo.hatenablog.com
プログラム
準備が整ったところで、プログラムです。
※事前準備が完了している前提です。
プログラムは以下、3ファイルです。
- コード.gs
- index.html
- css.html
コード.gs
// Notionインテグレーションキー const NOTION_API_KEY = PropertiesService.getScriptProperties().getProperty('NOTION_API_KEY'); // 雑多メモNotionのデータベースID const DATABASE_ID = PropertiesService.getScriptProperties().getProperty('DATABASE_ID'); /** * GET処理 */ function doGet() { // 表示処理 return index(); } /** * POST処理 */ function doPost(e) { // 作成処理 create(e.parameter); // 完了メッセージ const msg = "登録が完了しました"; // 表示処理 return index(msg); } /** * インクルード処理 */ function include(filename) { return HtmlService.createHtmlOutputFromFile(filename).getContent(); } /** * 表示処理 */ function index(msg = null) { // HTML側に渡す変数をセット const template = HtmlService.createTemplateFromFile('index'); template.deployURL = ScriptApp.getService().getUrl(); template.msg = msg; // タイトルやmetaタグをセット const htmlOutput = template.evaluate(); htmlOutput.setTitle('雑多メモ'); htmlOutput.addMetaTag('viewport', 'width=device-width, initial-scale=1'); return htmlOutput; } /** * 作成処理 */ function create(param) { // Notionページ登録URL const url = 'https://api.notion.com/v1/pages'; // Notionページ登録実行 UrlFetchApp.fetch(url, composeFetchParam(param)); } /** * データ登録に必要なパラメータを組み立てる */ function composeFetchParam(param) { const payload = { 'parent': {'database_id': DATABASE_ID}, 'properties': composeProperties(param), 'children': composeBlocks(param) }; const params = { 'method': 'POST', 'headers': { 'Notion-Version': '2022-06-28', 'Authorization': 'Bearer ' + NOTION_API_KEY, 'Content-Type': 'application/json' }, 'payload': JSON.stringify(payload), }; return params; } /** * データ登録時のプロパティ */ function composeProperties(param) { return { 'タイトル': { 'title': [{ 'text': { 'content': param.title } }] } }; } /** * データ登録時のブロック */ function composeBlocks(param) { return [{ "type": "paragraph", "paragraph": { "rich_text": [{ "type": "text", "text": { "content": param.memo } }] } }] }
index.html
<!DOCTYPE html> <html> <head> <base target="_top"> <?!= include('css'); ?> </head> <body> <div class="header">雑多メモ</div> <div class="container"> <? if (msg) { ?> <div class="msg-area"><?= msg ?></div> <? } ?> <form method="post" action="<?= deployURL ?>"> <input type="text" name="title" placeholder="タイトルを入力" /> <textarea name="memo" rows="10" placeholder="メモの詳細を入力"></textarea> <button type="submit">登録</button> </form> </div> </body> </html>
css.html
<style> .header { padding: 10px; text-align: center; background-color: #111; color: #fff; font-weight: bold; } .container { width: 400px; margin: 0 auto; } .msg-area { width: 100%; padding: 10px; margin: 10px 0; box-sizing: border-box; background-color: #fee; border-radius: 5px; } input[type="text"] { font-family: inherit; width: 100%; padding: 10px; margin: 10px 0; line-height: 1; box-sizing: border-box; border-radius: 5px; border: 1px solid #313131; } textarea { font-family: inherit; width: 100%; margin: 10px 0; padding: 10px; line-height: 1.5; box-sizing: border-box; border-radius: 5px; border: 1px solid #313131; } button { width: 100%; padding: 10px; color: #fff; background-color: #6C6C6C; border: 1px solid #313131; border-radius: 5px; } button:hover { background-color: #9C9C9C; transition: 0.3s; cursor: pointer; } </style>
上記プログラムをWebページとして公開します。
公開手順は以下記事にて詳しく書いています。
miya-moto-memo.hatenablog.com
プログラムの具体的な説明は、長くなりそうなので割愛します。
別記事にて書こうかなと思います。
スマホにショートカットを配置
スマホにWebページのショートカットを配置する手順も書いておきます。
※Androidスマホ、Chromeブラウザを使用
これで完了です。
あとはメモを残したい時にショートカットをタップすればWebページが開きます。
おわりに
ということで、「GASでNotionにデータ登録するWebページを作ってみる」に関してアレコレ書いてみました。
今回の内容は、元々の記事と機能的に大きな差はないです。
ただ、今回の内容は自作したものです。
これから色々と追加実装して自分好みにカスタマイズしていこうかなと思います。
この記事が参考になれば幸いです。
関連記事
GAS(Google Apps Script)に関してはいくつか記事にしています。
気になる記事があればぜひ。
GASの活用事例
GASでNotionにデータ登録するWebページを作ってみる - 派生記事