NotionのDBのリレーション作成・更新を自動化するGitHub Actions

TL;DR

  • notion-db-auto-relatorをNotion上における複数DB間の複雑なリレーションを自動かつ定期的に更新したい場合に導入してみてほしいです

notion-db-auto-relatorとは

NotionのDBにはRelationという機能(DBにあるページの相互参照可能な仕組み)が存在しますが、このリレーションを定期的に自動更新させたいと考え、今回 notion-db-auto-relator という仕組みを作成しました。
この仕組はローカルでも実行可能ですし、GitHub Actionsとしても公開していますので利用環境に応じて好きな方を使ってください。 github.com

リレーションの自動作成方法

notion-db-auto-relatorを使用したリレーションを行うためにNotion上で4ステップの準備が必要です。
準備の手順や詳細はレポジトリにあるドキュメントを参照して準備を行ってください。

DBの準備と設定

今回はNotionのRelationの説明ページに例として使われているCustomersとItemsのDBと似たスキーマのDBを用意し、今回CustomersをParentDB、ItmesをChildDBとみなしてこれらに対してのリレーションを自動作成・更新してみます。

f:id:litencatt:20220213221843p:plain
notion-db-auto-relator実行前のCustomersとItems DB

ここでnotion-db-auto-relatorは共通のプロパティをリレーションキーとしてDB同士のリレーションを自動作成・更新するため共通のプロパティをそれぞれのDBに作成しておく必要があります。今回の場合でいうとリレーションキーにcustomerというプロパティを指定したいため、CustomersとItemsどちらのDBにもcustomerというプロパティを作成しておく必要があります(現時点でリレーションキーに使用可能なプロパティタイプはtitle, select, multi-select)。また、ItemsのcustomerにはCustomersのcustomerに設定された値を設定しておく必要があります。

DBのIDの調べ方

また、notion-db-auto-relator用のSettings DBにはParent、Child DBのIDを設定する必要があります。DBのIDの調べ方は対象のDBを以下のようにOpen as pageまたはOpen in new tabで開き、

f:id:litencatt:20220214000318p:plain
DBのIDの調べ方

表示された以下のようなURLの0b5f5f7a753d46ec8d6a8af7f5035371がそれに該当します。

https://www.notion.so/.../0b5f5f7a753d46ec8d6a8af7f5035371?v=xxx

そしてわかった各DB IDを以下Parent DB IdChild DB Idに設定します。

f:id:litencatt:20220213221923p:plain
notion-db-auto-relatorの設定例

notion-db-auto-relatorの実行

今回はLocalでnotion-db-auto-relatorを実行します

$ git clone git@github.com:litencatt/notion-db-auto-relator.git
$ cd /path/to/notion-db-auto-relator
$ yarn
$ NOTION_TOKEN=<YOUR_NOTION_TOKEN> SETTINGS_DB_ID=<YOUR_SETTINGS_DB_ID> yarn start

実行結果

f:id:litencatt:20220213222328p:plain
notion-auto-db-relator実行後のリレーション結果

CustomersにRelation with customerというプロパティが追加され、Itemsのcustomerプロパティに名前があるitemのリレーションが自動作成されました。 今回の例では動作説明のためにあえてシンプルなリレーションを行っているためこの程度の規模感であれば設定の手間を考えると手動でリレーションをしたほうが早いでしょう。

notion-db-auto-relatorを導入することでメリットが得られるケース

次に示すのは3つのDB間において2つのプロパティ値をリレーションキーとしてリレーションする方法を紹介します。 ここでは例としてサービス毎に機能名がまとめられたFeatureというDBをParent DBとし、このDBに対して機能仕様のページを持つSpecificationや運用マニュアル集であるOperation Manualをリレーションさせてみます。ここではDBのIDをわかりやすくするためにあえてDB名横の()内にIDを記載しています。

f:id:litencatt:20220213232114p:plain
設定

このケースでは複数のプロパティをリレーションキーとして使用するためにカンマ区切りでServiceとFeatureのプロパティ名を設定しています。 そうすることでFeatureDBのServiceとFeatureの値のペアでリレーション作成時の紐付け対象をフィルタすることができます。

f:id:litencatt:20220213233353p:plainf:id:litencatt:20220213233502p:plain
(左)auto-relator実行前、(右)auto-relator実行後

右のauto-relator実行後の結果から分かる通り、FeatureDBにはサービス毎かつ機能名毎にSpecificationとOperation Manual DBのページがリレーションされている事がわかります。 また、GitHub Actionsなどでこの設定のnotion-db-auto-relatorを定期的に実行させておくようにしておけばSpecificationやOperation Manualのページが追加されたとしてもServiceとFeatureのプロパティ値が適切に設定されていればリレーションも自動的に更新させていくことが可能です。

以上、もし良ければ使用してみた感想やフィードバックなどもいただけるとありがたいです。