[Notion]GASをウェブアプリケーション化してNotionページ上から各種APIを任意実行できるようにしてみた

Notionに関するAPI処理を実施する際に、一番のネックとなったのはNotionページ編集に伴ったAPI発火がし難いところ。何か方法はないものかと考えた末に、GASをウェブアプリ化してNotionページ上にGETリクエストURLを貼ることで、GAS経由でAPIを呼び出してみました。
2022.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Notion上のデータを用いて外部サービスのAPIをも絡めつつ処理したい場合に、色々と試しているとネックになるのが処理の発火方法です。

GitHubでのコードレビューに基づいた処理であればGitHub Actionsを用いるのが楽ですが、コードレビュー等に紐付かない場合には他に何らかの発火方法を用意する必要があります。GASが利用できる場合はトリガーを設定するのが手軽で無難でしょう。

GASのトリガーはスクリプトの実行時間は6分まで、関数の実行時間は30秒とそこまできつくはありません。ただ、トリガーの総実行時間は無料アカウントの場合には1日辺り90分までという制約があります。Google Workspaceを使っている場合は1日辺り6時間まで延長されます。無料アカウントの場合、時間をトリガーにしている場合は気をつけないと上限にかかりやすくなります。

となると、呼び出したい時だけ都度実行できるようにしておきたいものですが、毎回スクリプトエディタを開くのも億劫です。そこでウェブアプリケーション化することでNotion上からも実行できるようにしてみました。

ウェブアプリケーション化

ウェブアプリケーションにすることで実行される関数はdoGet(e)です。呼び出したい関数をdoGet内で実行しましょう。

function doGet(e) {
  pickupDatabase()
  return ContentService.createTextOutput("Test")
}

GASのウェブアプリケーション化はエディタ右上のデプロイから「ウェブアプリ」を選択するだけです。トラブルを考慮して自身のみが実行できるようにしておくのが無難です。

Notion上に発行されるURLを貼り付けます。URLにアクセスするだけで実行されます。

実行後、以下の画面に遷移します。

あとがき

Notion上での編集を元にAPIを発火させることはできませんが、GASをウェブアプリケーション化するという手もあるという紹介でした。GASの実行制限内には留まりますが、重すぎず、かつ頻発しない処理であればそこまで問題にはならないかと思われます。