Notionで記事チェックツールを作ろう! の巻の3本目です。
NGワードや要注意ワードを大量にチェックする場合、データベースの行の数だけ記事をコピペしないといけない。
ずっと目を逸らし続けていた「リレーション」と「ロールアップ」に、しっかりと向き合うことに決めた私(@saosaoyamayama)です。
リレーション・ロールアップは表計算関数「VLOOKUP」のような働きをするもので、これが理解できるとNotionで「できること」が増えます。
実際今この原稿を執筆しながら、別のツールを作っておる次第です……。暇かよ。
それでは、1つの記事で検出ワード120項目チェックするためにリレーション・ロールアップを活用しますよー!
過去2回の投稿はこちら↓
Contents
クライアントのワードチェック量は3桁超え
とあるクライアント用に作ったNGワードチェックのキャプチャです。
このクライアントは単語単位のルールがとても多かったので、正規表現を使ってチェック項目を減らしてみましたが、それでも120項目ありました(もっと減らせるかな)。
NGワードチェックツールを作成して不要なプロパティを非表示にした結果、横に5ワード分(×3列)、縦に24行です。
しかーし!
たとえ項目数が多くても、正規表現や関数をデータベースにセットしてツール化すれば、あとは遊んで暮らせます延々使い回せるんですよ。
ではなぜ今回「項目数が多い」ことに言及しているのか。何が問題なのか。
チェック対象記事のセッティングです。
キャプチャのグレーの部分はNGワードの検出列です。じゃあチェックしたい記事はどこにあるかというと……。
一番左の列に置くのが一般的でしょうか。私もそのつもりで作っておりました。そうすると、チェックするたびに24回、記事をコピペする必要があります。
1日1記事チェックならまだしも……。ということで、これを「コピペ1回」で完了できるようにしまーす!
リレーション・ロールアップを理解する
今回救世主となってくれたのがリレーションとロールアップです。難しそうだな……と思って避けていたリレーションとロールアップです。
これが使えると、マリオでいうところのBダッシュはできると思います。スターは無理かな。
リレーション・ロールアップはスプレッドシートの「VLOOKUP」に近い機能でした。
これを使う場合、参考資料を各種取り揃えた保管庫(データベース)と、実際の作業エリアを作成する必要があります。
保管庫と作業場と部屋と鍵
「部屋とワイシャツと私」みたいな見出しですけど。
保管庫(左)はチェック対象記事を貼り付ける場所です。ここには棚があります。上の図だと「WP・GD」2つが棚(のつもり)です。
棚には鍵がかかっていて、扉を開けると中に箱が置いてあります。チェック記事を入れる箱、余計な記述を除去した記事を入れる箱、あとは貸し出しメモを入れる箱、とかね。
保管庫は、作業場で働く室長に対して棚の鍵の貸し出しを行っています。借りパクされないように「貸し出していますよ」ってメモを入れて管理しています。
さて、続いては作業場です。作業場には部屋が複数あります。
部屋の室長は保管庫の棚を1つ選んで鍵を借ります。上の図では1号室・2号室の室長どちらも「WP」の鍵を借りていますね。
鍵を借りて棚から「ペぺぺ」というテキストをお持ち帰りして「CK文章」っていう箱に収納しました。
もし2号室が「GD」の鍵を借りたら「ポポポ」あるいいは「ポ★ポポ」っていうテキストをお持ち帰りすることになります。
どの箱から持ち帰るかは任意ですが、もし「ポ★ポポ」を持ち帰りたければ、部屋の中に「ポポポ」とは別の箱を用意しておかないといけません。今回はあまり考えなくてよいかと。
まとめると……。
- リレーション:保管庫と棚を指定して鍵を借りる・借りる鍵は部屋ごとに違ってよい
- ロールアップ:指定保管庫の指定棚の任意の箱から中身を持ち帰り、部屋の箱に収納する
非常に幼稚ではありますが、私はこれで何となく理解できました。
リレーション設定は1回のみで棚の選択は初日に24回
データベースとデータベースをつなぐリレーションの設定は1回やればOKです。ロールアップのプロパティ設定(どの箱からデータを持ってくるか)も1回です。関数と同じく縦方向に自動適用されます。
「どの棚の鍵を借りるか」の選択は24回です。
この「24回」は、リレーション初日に保管庫に行って、ICカードリーダーに貸し出しカードを24回ピピって読ませるレベルで楽勝です。終わったらカードは引き出しの奥にでもしまっておきましょう。
もし保管庫と契約しない(リレーションしない)場合、ツールを使うたびに24個の窓口でハンコを押します(コピペ)。
ツールを使うたびなので、1記事チェックするたびに24回。10記事だったら合計240回ハンコを押すんですよ。
正気かよ。
リレーション・ロールアップは、たくさんのデータの中から条件に合う値をピックアップするのが本来の使い方ですから、私の使い方はかなりイレギュラーです。
でもハンコを240回押したくないので、リレーションとロールアップをありがたく使わせてもらっています。
リレーション・ロールアップのやり方
では実際にNGワード検出ツールにリレーション・ロールアップを実装してみますよ。
- 保管庫を作成
- 作業場を作成
- リレーションでデータベースを連携
- ロールアップで値をピックアップ
それでは行ってみよう。
保管庫を作成
まずは保管庫用のインラインデータベースを作成します。
以下の3つのプロパティを作りました。入力するデータは以下のとおりです。
- 棚の名前:保管庫の棚の名前、基本1つしか使わないのでこだわらなくてOK
- (加工前)CK対象記事:チェックする記事を貼り付ける
- ΣCK対象記事:[(加工前)CK対象記事]から記号「★」を削除する関数(なぜ「★」を削除するのかは前の投稿で)
【ΣCK対象記事】
=replaceAll(prop("(加工前)CK対象記事"),"★","")
「★」の削除不要なら、棚の名前と記事貼り付け、プロパティ2つで事足ります。また記事チェックツールを作るだけなら保管庫の棚は1つでOK。
今回はリレーションとロールアップの機能をわかりやすくするために「GoogleDocument」という棚を増設しました。
作業場を作成
左端のプロパティ名を[作業室]にして、部屋の名前を「1号室」と名付けました。Notionのページ(データ)のタイトルですね。
2列目は保管庫とのリレーションに使いますが、とりあえず作業場はこれでOK。
リレーションでデータベースを連携
それではデータベース同士をつなぐ「リレーション」に入りますよ!
作業室の隣の見出し[タグ]部分をクリックしましょう。
ここはデフォルトで[マルチセレクト]プロパティが付与されているので、こいつを変更します。
[種類 マルチセレクト>]をクリック。
設定可能なプロパティが表示されます。
[↗リレーション]を選択しましょう。[Σ関数]のひとつ下ですね。
※多分矢印が絵文字になっていると思いますが、気にしないでください。
右側に[リレーション対象]が飛び出してきます。Notionにあるデータベースならどれでもリレーションできるようです。
今回は[元記事(保管庫)]を選択しました。
[新しいリレーション]が表示されます。
- リレーション対象:元記事(保管庫)
- 元記事(保管庫)に表示:ON(多分どっちでもいい)
これらを設定したら[リレーションを追加]をクリックしましょう。
[棚の鍵]というプロパティにはリレーションを意味する斜めの矢印が付きました。
右下の[プレビュー]に何のプレビューだかよくわからない『概念』って感じのものが表示されましたね。まあいいや。
ここまでの設定で、[棚の鍵]プロパティから保管庫のデータが参照できるようになりました。
では実際にデータを参照しましょう。
1号室の[↗棚の鍵]の空きセルをクリックします。
[ページをリンク]の下に、保管庫の[棚の名前]が2つ表示されました。
現在は[元記事(保管庫)]とリレーション中で、そこにある2つの棚から選べますよってこと。
今回は「WP」を選択しました。
保管庫には自動で[↗NGワードCK]が追加されました。1号室とつながっていますよってことですね。
作業場の[↗棚の鍵]には「WP」が入りました。
- 保管庫の[↗NGワードCK]:作業場とリレーション中で、「1号室」に鍵を貸し出し中
- 作業場の[↗棚の鍵]:保管庫とリレーション中で、「WP」の鍵を借りている
こんな形でしょうか。
ロールアップで値をピックアップ
保管庫の棚「WP」を開けるのに必要な鍵が用意できました。続いては、その棚から必要なパーツだけを持ち帰る「ロールアップ」に移りますよ!
具体的なゴールとしては、保管庫にあるチェック対象記事を作業場に表示させます。
お持ち帰りデータ用に新しいプロパティを追加します。
[+]を押し、プロパティの種類は[qロールアップ]です。[↗リレーション]の下にありますね。
[プロパティを編集]でプロパティ名を記入します。私は[お持ち帰り記事]という名前にしました。
その下の[リレーション 選択>]をクリックしましょう。
リレーション中のプロパティはどれですか? ってことですね。
今リレーションしているのは[↗棚の鍵]しかないので、これを選択します。
その結果[qお持ち帰り記事]には「WP」が表示されていますね。
ここにはテキストを表示させたいんだが?
右側を見てみると[プロパティ Aa棚の名前]になっていますよね。保管庫の「WP」という棚の[棚の名前]という箱からパーツをお持ち帰りしているってことです。
箱が違うので取り替えましょう。[プロパティ 棚の名前>]をクリックします。
そうすると、保管庫に置いてある箱(プロパティ)がすべて表示されます。わかりやすい。
お持ち帰りしたい箱[ΣCK対象記事]を選択します。
わー!
作業場の[qお持ち帰り記事]に記事が格納されました!
- リレーション:リレーションプロパティ[↗棚の鍵]の値(WP)を鍵にして
- プロパティ:保管庫内「WP」の棚に置いてある箱[ΣCK対象記事]の中身を持ち帰る
- ロールアップ:[qお持ち帰り記事]に格納する
こういうことですかね。スプレッドシートのVLOOKUPでいうと以下のとおりです。
q保管庫から持ち帰ったCK対象記事
=vlookup(↗棚の鍵,元記事(保管庫),3,false)
=vlookup(WP,元記事(保管庫),ΣCK対象記事,false)
チェックするワードが増えた場合の部屋増築方法
「1号室」というデータに対して、リレーション・ロールアップを使ってチェック対象テキストを引っ張る、という操作が完了しました。現時点で部屋は1つしかありません。
記事チェック項目が120ある場合は24号室まで必要です。当然、24個の部屋すべてに同一のチェック対象テキストを持ち帰らないといけません。
やることはめちゃくちゃ簡単で、新しい部屋を作って「WP」という鍵を渡すだけ。
- 新規でデータを増やす
- 既存データを複製
2パターンありますね。
新規でデータを増やす
「2号室」という作業室を作りました。続いてお隣のセルをクリックします。
リンクするページを選択します。「WP」ですね。
はい完了。2号室にもチェック対象記事が表示されました。
保管庫側には「2号室に鍵を貸していますよ〜」と記録されています。
って感じで1〜24号室までこの作業を繰り返します。保管庫の記事を変更すれば、当然こちらの記事も変更されます。
以下のキャプチャはプロパティ名が異なりますが、やっていることは一緒。
記事1・記事2……と部屋を増やし、すべて「WP」を選択すれば、必ず「ほげほげ」が出てきます。
24記事分バーっと作って、右側のチェックツールを整えればツール側の準備は完了。以降チェックツールの操作は発生しません。
元記事データベースの「テキスト」の記事を貼り替えるだけ。
既存データを複製
1つずつデータを増やしていくのは手間だな……ってときは複製を使いましょう。
複製したいデータの左側にあるクリリンを押して[複製]を選びます。
2号室とまったく同じデータが追加できました。
[↗棚の鍵]を変更する必要もないので簡単ですね!
ずっと「WP」ばかり選択していましたが、3号室では「GoogleDocument」を選択してみました。
お持ち帰り記事が変わりましたね〜!
【参考】どこに何を仕掛けたのか理解しておくとよい
リレーション・ロールアップを「何に対して」設定したか、がわかりにくいんですよね。
テーブルビューで考えた場合だと、縦方向すべてに作用する設定なのか、それとも1つのセルだけなのかってことです。
リレーション
- 1つのプロパティに対して、外部データベースを紐付けた
→[棚の鍵]に対して「元記事(保管庫)」を紐付けた - 1つのデータ内の1プロパティの値に対して、外部データベースのデータを紐付けた
→「1号室」内の[棚の鍵]の値に対して、[元記事(保管庫)]の「WP」を紐付けた
リレーション設定には2つの操作があるってことがわかります。
1はプロパティそのものに設定しているので、データベースが縦に伸びても再設定の必要はありません。
でも2は1データ→1プロパティ→1つの値に設定しているので、ここは再設定が必要です。
ロールアップ
1つのプロパティに対して、リレーション中のデータから1プロパティの値を取り出すという設定
→[お持ち帰り記事]に対して、「1号室」内にリンク中の「WP」から[CK対象記事]の値を取り出して表示するという設定
ロールアップは「1つのプロパティに対して」設定しているので縦方向自動適用。データベースが縦に伸びても再設定の必要はありません。
何に対して設定しているのか、が理解できるとリレーションやロールアップの活用場面がどんどん増やしていける気がします。