Canbus. のヒント #2 - 特定の条件を満たすときに通知を送らないようにする



前回の記事から、Web データベースの Canbus. を使用する際の Tips を数回に分けてまとめています。今回は通知設定について紹介します。

Canbus. アプリの通知設定では、「特定の条件を満たす時のみ」通知を送るようにルールを定義することができます。一方、「通常は通知を送るが、特定の条件を満たす場合には送らない」という除外ルールは直接設定できないように見えます。

通知設定に用意されているオプションを使って工夫すると、このような業務要件を満たす Canbus. 通知設定を実現できます。今回はその手順についてまとめました。


特定の条件を満たすときに通知を送る

Canbus. では、アプリにレコードが追加、更新、削除された時に、自動的に通知を送ることができます。通知の宛先は、アプリ管理者、レコードを操作した本人、特定の部署に所属するユーザー全員宛など、あらかじめ設定しておくことができます。

送られてくる通知は、Canbus. 画面内の通知リストで確認できるほか、通知対象となったユーザーのプロフィールにメールアドレスが登録されている場合には、メールでも同じ内容を受け取ることができます。

アプリの通知設定では、通知タイミングや宛先のほか、レコード上の項目の値を使用して通知条件を指定しておくことができます。つまり、通知を送るべきルールを定義できます。設定した条件に一致しない場合は、レコードの追加、更新、削除などのイベントが発生したとしても通知は送信されません。

例えば次のようにすれば、「金額が 1,000,000 円以上、または重要度が High の場合に通知を送る」という設定になります。


特定の条件を満たすときには通知を送らない

一方、例えば「金額が 1,000,000 円未満、または重要度が Low の場合には通知を送らない」(それ以外の場合にはすべて通知を送る)というビジネス要件がアプリの利用者から提示された場合はどうでしょうか。このような除外要件は、実務ではしばしば発生するといえます。

Canbus. の通知設定画面で指定できるのは「通知を送信する条件」なので、「通知を送信しない条件」を直接的に表現することができません。

一つの方法は、比較条件をすべて逆転させ、さらに条件の結合 (And / Or) も反転させてルールを設定することです。上記のケースでは、「金額が 1,000,000 円以上かつ重要度が Low でない場合に通知を送る」というように要件を読み替えて設定するのです。


確かにこの方法でも目的を達成できます。また、このケースではそれほど不自然に見えないかもしれませんが、個人的には、このような業務要件の読み替えをするやり方からはやや危険な香りを感じます。

というのも、ビジネス要件を提示している利用者は、あくまでも「特定の条件の場合には、通知を送りたくない。それ以外の場合は送りたい」という認識でいるわけです。

アプリを実装する時に、それらの個別の条件をそれぞれ反転し、さらに結合条件も反転させてしまうと、一回限りの設定としてはニーズが実現されたとしても、利用者の意図とは違う表現でアプリが構成されている状態になります。このような状態は、長期的なアプリの保守性を損なう可能性があり、心配になるところです。


「これより下の通知を抑止」機能

実はこのようなケースで、Canbus. の通知設定にある「これより下の通知を抑止」機能を流用すると、比較的すっきりと要件を実現することができます。


上の画像の設定ポイントは以下の 4 点です。

  • 要件である「通知を送らない条件」を、そのまま通知設定の条件として入力する
  • 通知の宛先タイプとして「ユーザー/組織選択」を選んだうえで、宛先の組織やユーザーを未選択状態のままにする
  • 通知条件の下にある「これより下の通知を抑止」チェックボックスをチェックする
  • 2 つ目の通知設定エントリとして、無条件の通知設定を追加する

この設定は、次のように動作します。

まずは通知から除外したいレコードの場合です。

  1. 金額が 1,000,000 円未満か、重要度が Low のレコードをアプリに追加します。
  2. 通知設定のリストが上から順番に、追加したレコードと照合されます。今回登録されたレコードは、一番上の設定の通知条件にヒットします。
  3. 設定されている宛先に通知が送信されます。ただし、ヒットした通知設定では宛先ユーザー/組織が 1 つも選択されていないので、実際には通知は誰にも送られません。
  4. 通知条件の「これより下の通知を抑止」オプションが有効になっているため、2 番目以降の通知設定は照合されることなく無視され、処理が終わります。

除外条件以外のケース(通知を送りたいレコードの場合)はこのようになります。

  1. 金額が 1,000,000 円以上で、重要度が Low ではないレコードをアプリに追加します。
  2. 通知設定のリストが上から順番に、追加したレコードと照合されます。今回登録されたレコードは、一番上の設定の通知条件にはヒットしません。
  3. 続いて 2 番目の設定と照合されます。2 番目の設定には通知条件が設定されていないので、当然にヒットします。
  4. 通知が(上の画像の設定であれば、アプリ管理者宛に)送信されます。


「これより下の通知を抑止」オプションがどのように効果的に作動しているか、分かるでしょうか?

このオプションは、通知が送信されるべきタイミングでいずれかの通知設定がヒットした時、ヒットした設定よりもリスト内で下に位置している通知設定をすべて無効化する効果を持ちます。これを踏まえると、特定の通知設定にヒットさせ、その通知の宛先を未選択にしておくことで、通知を送らない条件を表す設定の代わりに使うことができるということです。

以上が、「特定の条件を満たすときには通知を送らない」通知設定を Canbus. アプリで表現する方法です。


除外設定の意図を表現する

気になる点が少し残っています。将来、リストの一番上の設定を見た時、これが「除外設定」であると思い出せるかという点です。宛先タイプとして「ユーザー/組織選択」を選び、どのユーザーや組織も選択していないという状態が、設定漏れのように見えてしまう可能性はありそうです。

この点を解決するには、以下のような方法が考えられます。

  • 「通知しない」という名前のダミー組織を作り、宛先として選択する。この方法のメリットは、宛先組織にどのユーザーも含めなければ、実際に誰にも通知は送られないことです。ただし、Canbus. 内で組織選択ダイアログ等に「通知しない」という組織が表示されてしまいます。
  • 「通知しない」という名前のダミーユーザーを作り、宛先として選択する。ダミー組織と比べたこの方法のメリットは、プロフィール編集画面の「他のユーザーから隠す」設定を使えば、ユーザー選択ダイアログ等でもこのダミーユーザーを隠しておくことができる点です。ただし、実際にはこのユーザーに通知が送られます。ダミーユーザーにメールアドレスを割り当てず、ログインもしない限り、通知が送られても無視できるかもしれませんが、多少釈然としないところは残ります。
  • 通知設定の「アクション」欄にある「件名」または「本文」をメモ欄として使い、そこに除外条件としての意図や、下の通知設定とペアであるという説明を記載しておく。

個人的には、上記 3 番目の方法で十分だと考えていますので、この方法を多用しています。


まとめ

Canbus. の通知設定には、「通知を送らない条件」をルールとして定義する直接的な方法はありません。

アプリの利用者から「通知を送らない条件」がビジネス要件として提示された場合、「通知を送る条件」に読み替えて設定することもできますが、これは将来的なアプリ保守が難しくなる危険性のある回避方法だといえます。

Canbus. の「これより下の通知を抑止」機能を流用し、2 つの通知設定を組み合わせることで、比較的すっきりと「通知を送らない条件」を実現することができます。その際は、除外設定としての意図を設定画面に何らかの形で残しておくこともお勧めです。

将来的に Canbus. の機能がより進化し、「通知を送る条件」「通知を送らない条件」を直接的に表現できるようになることも、期待したいところです。