背景
2024年1月にNotionCalendarが登場したことがきっかけで、すべてのタスク管理をNotionに一元化しました。
ただ、Notionはかなり高性能であるがゆえ、シンプルなテキストエディタに比べとっさのメモをとるときに腰の重さを課題に感じていました。
ページを開かずとも気軽にメモがとれるようにしたかったので、Notion API を利用してどこからでもメモを追加できるようなエントリーポイントを作りました。
今回やりたいこと
- 今日の日報ページ(データベース上で作成日が最新のページ)にメモを追加するエントリーポイントを作る
- text, embed, video のいずれかの形式で追加できる
- メモは日報ページの一番下に追加される
- 無料で運用できる
- とにかく簡単に速く、構築・デプロイができる
- 自分好みに簡単にカスタムできる
考えたこと
GAS
最初に、無料+簡易API = GAS!とよく考えずにclaspで作成しましたが、外部モジュールを使うのにとても苦労しました(公式で rollup でバンドルして使うことを推奨されていましたが全くうまくいかず)Promise 使えないのも地味につらいです。
外部モジュールを使うほどのことでもないので大人しくGASエディタで直書きしてしばらく運用するも、何日か経つと承認エラーが発生し、手動で承認しなおさないといけないという問題が発生しました。(昔はそんなことなかった気がするのですが…)
GASは手軽ですが、今回の用途には向いていませんでした。
iPaaS
IFTTT、Zapier、makeなど便利なiPaaSがありますが、今回のようにqueryを使ってNotionページを取得する要件がある場合、まぁまぁな課金が必要でした。IFTTTだとPro+プラン$12.5ドル/monthなので、個人のちょっとした用途としてはちょっと高いかなと思いました。
ただし、IFTTTはProプラン$2.92/monthには課金しました。XがIFTTTしか対応してなさそうだったので、無料プランの2Appletだと不足だった(Proは20Appletまで)のでこちらは致し方ないです。
Vercel Functions
Vercel FunctionsはHobbyプランでも利用でき、API作成も簡単そうなので今回はこちらを選択しました。
他サーバーレスのCloud FunctionsやAWS Lambdaでも同じことは実現できると思いますが、結果的にBasic認証ややりたいことのシンプルさを加味するとVercel Functionsを選んで正解だったと思いました。
つくったもの
/api/notion/latest
にGETリクエストを送ると今日の日報ページのURLを返し、PUTリクエストを送るとメモを追加します。
詳細についてはこの記事では割愛しますが、Vercel FunctionsのQuickstartを上から実行しただけになります。GASで苦労したのが嘘のようにスイスイ進みました 🤗
今回はNext.jsのAppRouterを使っているので、/app/api
以下にルーティングを作成するだけで、NodeランタイムのAPIを追加できました🎉
保守に関して何も考えなくていいので、楽ちんです。アクセスログもdashboardから確認できます。
たださすがにこのままだと、エントリーポイントが漏れたら誰でも私の日報を書き換えられてしまうので、Basic認証はかけました。
middleware.ts
を追加し、/api/auth
にroutingを追加するだけです。
活用事例
iOSショートカットのオートメーションを使って、起床時に睡眠時間を追加するようにしています。
このデータを書いていると、AIで振り返るときの精度があがります。
まとめ
日報を1日の最後にまとめて書こうとすると、その日の出来事を思い出すのに時間がかかります。
サービスのwebhookやiOSショートカットなどを活用してライフログ的に勝手に日報を更新してくれるようになったことで、並んでいるNotionブロックを並べて整えるだけで日報が完成するようになりました。つい日報をさぼった日でも、何かしらの記録が残っていると補完ができるので、日報を書かない日がほとんどなくなるという相乗効果を発揮しました😄