ServiceNow Business Ruleは「いつ」動く?Before/After/Asyncを実務目線で整理

ServiceNow

Business Ruleの「いつ動く?」が重要な理由

ServiceNowを触り始めると、同じ「自動化」でも選択肢が多いことに気づきます。Business Rule、Client Script、UI Policy、Flow Designer、(環境によっては)Workflow……。この中でBusiness Ruleは、サーバ側でデータが保存される瞬間に密接に関わるため、タイミングの理解が曖昧だと挙動がブレやすいです。

たとえば、こんな経験はありませんか?

  • レコードを保存したはずなのに、値が思った通りにならない
  • 保存後に別のフィールドが勝手に書き換わる
  • 通知が二重に飛ぶ、または飛ばない
  • 更新が重くなった/原因が追いづらい

この手の“謎挙動”は、だいたい次のどれかに分類できます。

  • Before / After / Async の選び方がズレている
  • Business Ruleの実行順(Order)や条件の組み合わせが複雑化している
  • 他の仕組み(FlowやScript Include、クライアント側)と責務がかぶっている

CSAを目指す学習でも、暗記より「仕組みの理解」が効いてきます。Business Ruleの種類(Before/After/Async)を、単に言葉で覚えるのではなく、**“どの瞬間に、何が確定していて、何がまだ変わるのか”**を掴むと、実務でも試験学習でも迷いが減ります。

この記事では、Before/After/Asyncを「やれること・やってはいけないこと・判断基準」の形で整理します。コードは最小限にしつつ、初学者でもイメージできる例で説明していきます。

本番形式で慣れるのが合格への近道。UdemyのServiceNow模擬問題集を人気順で一覧比較できます👇

Before Business Rule:保存前にできること/やるべきこと

Before Business Ruleは、ざっくり言うと 「DBに書き込まれる前」 に動くルールです。ここが腑に落ちると、Beforeに置くべき処理が自然に決まります。

Beforeが得意なこと

Beforeで強いのは、次のような“保存前に整えておきたい”処理です。

  • 入力値の正規化(空白除去、表記ゆれ修正、フォーマット統一)
  • 初期値・自動採番の補助(条件によってフィールドを埋める)
  • 保存を止める系のバリデーション(不正ならエラーを出して更新しない)
  • 値の整合性を取る(AがこうならBはこう、のような制約)

例:短い説明文が空なら自動で補完する

「short_descriptionが空のまま保存されると困る」ケースを想像してみます。保存後に直すより、保存前に埋めた方が自然です。

  • 条件:short_descriptionが空
  • 処理:categoryやcallerをもとに仮の文言を入れる

こういうのはBefore向きです。

Beforeの注意点

Beforeは便利ですが、なんでも置くと事故ります。典型的な注意点はこれです。

  • 重い処理を詰め込みすぎない
    保存前に重い検索や外部連携をやると、ユーザー体験が悪化しやすいです(保存が遅い=不満)。
  • “通知”のような結果依存の処理は慎重に
    保存前の状態は、まだ確定していない前提で考えると安全です。

Beforeに置くと安定する判断基準

迷ったら、この質問を自分に投げてみてください。

  • 「この処理は、保存される値そのものを整えるため?」
    → YesならBeforeが第一候補。

After Business Rule:保存後にできること/注意点

After Business Ruleは 「DBに書き込まれた後」 に動きます。ここでのポイントは、保存が完了しているため、“確定したレコード”を前提に次の処理へ進めることができる点です。

Afterが得意なこと

Afterは、保存の結果に基づいて動く処理と相性が良いです。

  • 関連レコードの更新(子→親へ集計、ステータス連動など)
  • 履歴や監査に近い処理(変更結果に応じてログやコメントを追加)
  • 保存後に発火してよい自動処理(ただし負荷に注意)

例:子レコード更新後に親のカウントを更新する

たとえば、Incidentに紐づくTaskを管理していて、子が増減したら親の「子件数」を更新したい、など。これは保存後に“確定した変更”を見て動いた方が安全です。

Afterでよくある落とし穴:自分で自分を更新してループ

Afterでやりがちな失敗が、Afterでcurrentを更新して、またBusiness Ruleが走るパターンです。

  • Afterで current.update() を呼ぶ
  • その更新がさらにAfter/Beforeを呼ぶ
  • 気づかないうちに処理が重くなる/二重実行になる

対策の方向性は次の通りです。

  • そもそもAfterでupdateしない設計にできないか(Beforeで済むならBeforeへ)
  • 条件を厳密にする(「このときだけ」動くようにする)
  • 再実行を防ぐフラグ設計(必要な場合のみ)

「Afterに置いたのに二重で動く」「通知が2回飛ぶ」などは、ここが原因のことが多いです。

Afterに置くと安定する判断基準

  • 「この処理は、保存が完了したことを前提にしたい?」
    → YesならAfterが第一候補。

Async Business Rule:非同期の意味、向いている処理、落とし穴

Async Business Ruleは、言葉の通り 非同期(ユーザーの保存処理と切り離して後で実行) されます。体感としては「保存ボタンを押した瞬間の待ち時間に影響しにくい」方向です。

Asyncが向いている処理

Asyncを考えたくなるのは、だいたい次のようなケースです。

  • 通知・連携など時間が読めない処理
  • 重い集計や検索(ただし設計次第)
  • ユーザー操作のレスポンスを優先したい処理

例:更新をトリガに通知したい(ただし二重送信に注意)

「状態がResolvedになったら関係者に通知」といった要件はよくあります。ユーザーが保存した瞬間にメール送信処理で待たされるのは嫌なので、Asyncで切り離したくなります。

ただし、ここにも落とし穴があります。

Asyncの落とし穴:その瞬間のcurrentを“確定情報”として扱いすぎる

Asyncは“あとで動く”ので、極端に言うと、実行までの間にレコードがさらに更新されている可能性があります。

  • 状態をA→Bに更新した直後にAsyncが走る想定
  • でもその間に別の更新でB→Cになっていた
  • 結果として「Bになった通知」を送るつもりが、Cの内容で送られる/条件を満たさない など

対策はシンプルで、設計の時点で次を意識します。

  • “何を基準に処理するか”を明確にする
    変更前後(previous/current)に依存するなら、扱いを丁寧にする。
  • イベント駆動(Event + Notification)も選択肢に入れる
    通知をBusiness Rule直書きにせず、イベント設計に寄せると整理しやすいことがあります。

Asyncに置くと安定する判断基準

  • 「この処理は、ユーザーの保存を遅くしたくない時間がかかる可能性がある?」
    → YesならAsyncが候補。
    ただし「あとで動く=状態が変わり得る」前提で設計するのがコツです。

迷ったときの判断基準とデバッグ手順(順序・競合・再現性)

Before/After/Asyncを理解しても、現場や学習環境では“複数の仕組みが同時に動く”ので混乱しがちです。ここでは、迷ったときの判断基準と、最小の手順で原因を切り分ける方法をまとめます。

まずは判断基準を固定する(迷いを減らす3問)

  1. 保存される値を整える処理か?
    → Yes:Before
  2. 保存完了を前提に、関連レコードへ影響させたい処理か?
    → Yes:After
  3. 時間がかかる/ユーザー操作を遅くしたくない処理か?
    → Yes:Async(ただし状態変化を前提に)

この3問で8割は整理できます。

Business Rule同士の“順序”で崩れることがある

Business Ruleは1つだけなら分かりやすいですが、増えると次の問題が出ます。

  • 同じテーブルに複数のBusiness Ruleがある
  • 似た条件で動いてしまう
  • Orderの違いで結果が変わる
  • さらに他の仕組み(Flowなど)も絡む

この状態で「なんとなく動かない」を追うと沼ります。おすすめは、再現性のある最短ルートを作って、順番に潰すやり方です。

デバッグ手順(初心者でもやりやすい現実的な流れ)

  • 対象テーブルのBusiness Ruleを一覧で確認する
    “同じタイミング(Before/After)で同じフィールドを触っていないか”を見るだけで、原因が見えることがあります。
  • 条件を言語化する(日本語で書けるか)
    「どの状態で、何が変わったら、何をする」を一文で書く。書けない場合、条件が曖昧で二重実行の温床になりがちです。
  • ログを仕込んで“どれが動いたか”を先に確定する
    いきなり正解を当てにいかず、「動いてる/動いてない」を確定させるのが近道です。
  • 一時的に条件を絞る(対象ユーザー、特定番号など)
    全体に影響させず、自分のテストデータだけで再現できるようにすると安全です。

Business RuleとFlow Designerの役割分担で詰まる場合

最近はFlow Designerを併用する機会も増えています。ここで重要なのは「どちらが正しい」ではなく、責務が重なっていないかです。

  • Business Rule:保存に密接な整形・制約・整合性
  • Flow:プロセス(承認、通知、タスク作成など)を見通しよく構成したい領域

もちろん例外はありますが、「同じ目的を両方でやっていないか?」を疑うだけで、挙動のブレが減ります。

学習を体系化したい人へ

Business Ruleは“なんとなく書ける”段階から、“設計の意図を説明できる”段階に上がると一気に楽になります。独学だと、Before/After/Asyncの使い分けを自分の経験だけで補うのが難しいこともあります。

そこで、体系的に学べる教材の一例として、UdemyのServiceNow入門〜スクリプティング基礎(Business Ruleやサーバサイドの考え方を扱う講座)を1本持っておくと、知識の穴が埋まりやすいです。講座選びのコツは、最新リリースに完全一致しているかよりも、「なぜそのタイミングに置くのか」まで説明しているかを見ること。そこが分かる講座は、応用が効きます。

本番形式で慣れるのが合格への近道。UdemyのServiceNow模擬問題集を人気順で一覧比較できます👇

まとめ

Business RuleのBefore/After/Asyncは、言葉だけ覚えると混乱しやすいのですが、ポイントはシンプルです。

  • Before:保存される値を整える(正規化、初期値、バリデーション)
  • After:保存完了後の結果を使って処理する(関連更新、結果に基づく処理)
  • Async:重い処理や通知など、保存のレスポンスを優先して切り離す(ただし“あとで状態が変わる”前提で設計)

そして、挙動が不安定なときは「タイミング」だけでなく、Business Rule同士の順序・条件の重なり・他の仕組み(Flow等)との責務の重複を疑うのが近道です。

CSAの学習でも、実務でも、ここを理解していると「なぜこの設計にするのか」を自分の言葉で説明できるようになります。暗記に寄せるより、仕組みとして掴んでおくと、応用問題や現場の“謎挙動”に強くなります。

タイトルとURLをコピーしました