• Reading time:16 mins read

Notionで記事チェックツールを作ろう! の巻の3本目です。

NGワードや要注意ワードを大量にチェックする場合、データベースの行の数だけ記事をコピペしないといけない。

ずっと目を逸らし続けていた「リレーション」と「ロールアップ」に、しっかりと向き合うことに決めた私(@saosaoyamayama)です。

リレーション・ロールアップは表計算関数「VLOOKUP」のような働きをするもので、これが理解できるとNotionで「できること」が増えます。

実際今この原稿を執筆しながら、別のツールを作っておる次第です……。暇かよ。

それでは、1つの記事で検出ワード120項目チェックするためにリレーション・ロールアップを活用しますよー!

過去2回の投稿はこちら↓

こんな情報に出会えるかも

Notionのデータベースで大量のデータに同じ値を一括挿入&一括入れ替えする方法。あと、リレーション・ロールアップをやわやわに噛み砕いた情報。

クライアントのワードチェック量は3桁超え

120項目のNGワード検出
120項目チェックするよ

とあるクライアント用に作ったNGワードチェックのキャプチャです。

このクライアントは単語単位のルールがとても多かったので、正規表現を使ってチェック項目を減らしてみましたが、それでも120項目ありました(もっと減らせるかな)。

NGワードチェックツールを作成して不要なプロパティを非表示にした結果、横に5ワード分(×3列)、縦に24行です。

しかーし!

たとえ項目数が多くても、正規表現や関数をデータベースにセットしてツール化すれば、あとは遊んで暮らせます延々使い回せるんですよ。

ではなぜ今回「項目数が多い」ことに言及しているのか。何が問題なのか。

チェック対象記事のセッティングです。

キャプチャのグレーの部分はNGワードの検出列です。じゃあチェックしたい記事はどこにあるかというと……。

一番左の列に置くのが一般的でしょうか。私もそのつもりで作っておりました。そうすると、チェックするたびに24回、記事をコピペする必要があります。

1日1記事チェックならまだしも……。ということで、これを「コピペ1回」で完了できるようにしまーす!

リレーション・ロールアップを理解する

今回救世主となってくれたのがリレーションとロールアップです。難しそうだな……と思って避けていたリレーションとロールアップです。

これが使えると、マリオでいうところのBダッシュはできると思います。スターは無理かな。

リレーション・ロールアップはスプレッドシートの「VLOOKUP」に近い機能でした。

これを使う場合、参考資料を各種取り揃えた保管庫(データベース)と、実際の作業エリアを作成する必要があります。

保管庫と作業場と部屋と鍵

リレーションとロールアップ
2つのデータベース

部屋とワイシャツと私」みたいな見出しですけど。

保管庫(左)はチェック対象記事を貼り付ける場所です。ここには棚があります。上の図だと「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つだけ

左端のプロパティ名を[作業室]にして、部屋の名前を「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つめのデータを作成

「2号室」という作業室を作りました。続いてお隣のセルをクリックします。

データを選択する

リンクするページを選択します。「WP」ですね。

2つ目のデータ連係完了

はい完了。2号室にもチェック対象記事が表示されました。

保管庫側には「2号室に鍵を貸していますよ〜」と記録されています。

って感じで1〜24号室までこの作業を繰り返します。保管庫の記事を変更すれば、当然こちらの記事も変更されます。

以下のキャプチャはプロパティ名が異なりますが、やっていることは一緒。

記事1・記事2……と部屋を増やし、すべて「WP」を選択すれば、必ず「ほげほげ」が出てきます。

24記事分バーっと作って、右側のチェックツールを整えればツール側の準備は完了。以降チェックツールの操作は発生しません。

元記事データベースの「テキスト」の記事を貼り替えるだけ。

既存データを複製

1つずつデータを増やしていくのは手間だな……ってときは複製を使いましょう。

データの複製

複製したいデータの左側にあるクリリンを押して[複製]を選びます。

複製結果

2号室とまったく同じデータが追加できました。

[↗棚の鍵]を変更する必要もないので簡単ですね!

別のデータを連係する

ずっと「WP」ばかり選択していましたが、3号室では「GoogleDocument」を選択してみました。

お持ち帰り記事が変わりましたね〜!

【参考】どこに何を仕掛けたのか理解しておくとよい

どこに何を設定したのか理解
プロパティなのかデータなのかデータの中の値なのか

リレーション・ロールアップを「何に対して」設定したか、がわかりにくいんですよね。

テーブルビューで考えた場合だと、縦方向すべてに作用する設定なのか、それとも1つのセルだけなのかってことです。

リレーション

  1. 1つのプロパティに対して、外部データベースを紐付けた
    →[棚の鍵]に対して「元記事(保管庫)」を紐付けた
  2. 1つのデータ内の1プロパティの値に対して、外部データベースのデータを紐付けた
    →「1号室」内の[棚の鍵]の値に対して、[元記事(保管庫)]の「WP」を紐付けた

リレーション設定には2つの操作があるってことがわかります。

1はプロパティそのものに設定しているので、データベースが縦に伸びても再設定の必要はありません。

でも2は1データ→1プロパティ→1つの値に設定しているので、ここは再設定が必要です。

ロールアップ

1つのプロパティに対して、リレーション中のデータから1プロパティの値を取り出すという設定
→[お持ち帰り記事]に対して、「1号室」内にリンク中の「WP」から[CK対象記事]の値を取り出して表示するという設定

ロールアップは「1つのプロパティに対して」設定しているので縦方向自動適用。データベースが縦に伸びても再設定の必要はありません。

何に対して設定しているのか、が理解できるとリレーションやロールアップの活用場面がどんどん増やしていける気がします。

S.Nakayama

一帖半執筆工房代表。 WEBコンサル・マーケ企業のフリーランスPMとして計9サイトの運営を指揮。DigitalCameraWorldの認定フォトグラファー。 現在は2社5メディアの進行管理をしながら文章校閲・校正者・ライターとしても活動中。