ServiceNowにおけるScriptの使い分けガイド

## はじめに
ServiceNowでは、さまざまな種類のスクリプトを使用してシステムのカスタマイズや自動化を行います。しかし、初心者(わたし)にとってはどのスクリプトをどの場面で使用すればよいかがわかりにくいことがありました。この記事では、主なスクリプトの種類とそのユースケース、注意ポイントをまとめたいと思います。

## 主なスクリプトの種類とユースケース

| スクリプト種類         | ユースケース                                                               | 注意ポイント                                                           |
|-----------------------|-------------------------------------------------------------------------|---------------------------------------------------------------------|
| ビジネスルール (Business Rule)  | レコードのCRUD操作（作成、更新、削除）時に実行するスクリプト。フィールドの値の設定やレコードの検証。 | パフォーマンスに影響を与える可能性があるため、実行条件を慎重に設定する。             |
| クライアントスクリプト (Client Script) | ユーザーインターフェース上での動作を制御するスクリプト。フォームのバリデーションや動的なフィールドの表示/非表示。 | ユーザー体験を向上させるために使用するが、過度なスクリプトはフォームのパフォーマンスを低下させる可能性がある。 |
| UIポリシー (UI Policy)        | フォーム上のフィールドの表示/非表示、必須/任意の設定を行うルール。条件に応じてフィールドの属性を変更する。 | クライアントスクリプトと併用する場合、互いの影響を考慮して設定を行う。                         |
| スクリプトインクルード (Script Include) | 再利用可能なサーバーサイドのスクリプトロジックを定義する。複数のビジネスルールや他のスクリプトから呼び出し可能。 | 公開メソッドを慎重に設計し、必要に応じてアクセス制御を行う。                               |
| UIアクション (UI Action)      | ボタンやリンククリック時に実行するスクリプト。フォームやリストのアクションをカスタマイズ。                   | ユーザーの操作に直結するため、意図しない動作を防ぐための十分なテストが必要。                     |

### ビジネスルール (Business Rule)

**ユースケース**:
- レコードの作成、更新、削除時に特定の処理を実行する
- フィールドの値を自動的に設定する
- レコードのデータを検証する

**注意ポイント**:
- パフォーマンスに影響を与える可能性があるため、実行条件（When to run）を適切に設定すること
- 多数のビジネスルールが同じテーブルでトリガーされる場合、実行順序に注意すること

参考：[Business Rules - ServiceNow Docs](https://docs.servicenow.com/ja-JP/bundle/washingtondc-api-reference/page/script/business-rules/concept/c_BusinessRules.html)

### クライアントスクリプト (Client Script)

**ユースケース**:
- フォームのバリデーション
- フォームのフィールドの動的な表示/非表示や編集可能/不可の制御
- データのリアルタイム更新

**注意ポイント**:
- 過度なクライアントスクリプトはフォームのパフォーマンスを低下させる可能性があるため、必要最小限に留めること
- 他のクライアントスクリプトとの競合を避けるため、スクリプトの順序や条件を明確にすること

参考：[Client Scripts - ServiceNow Docs](https://docs.servicenow.com/ja-JP/bundle/washingtondc-api-reference/page/script/client-scripts/concept/client-scripts.html)

### UIポリシー (UI Policy)

**ユースケース**:
- 特定の条件に基づいてフィールドの表示/非表示や必須/任意の設定を行う

**注意ポイント**:
- クライアントスクリプトと併用する場合、UIポリシーの影響を受けるフィールドとクライアントスクリプトの設定を整合させること
- 複数のUIポリシーが同じフィールドに影響を与える場合、その優先順位に注意すること

参考：[UI Policies - ServiceNow Docs](https://docs.servicenow.com/ja-JP/bundle/washingtondc-platform-administration/page/administer/form-administration/task/t_CreateAUIPolicy.html)

### スクリプトインクルード (Script Include)

**ユースケース**:
- 再利用可能なサーバーサイドのスクリプトロジックを定義する
- 他のスクリプトやビジネスルールから呼び出して使用する

**注意ポイント**:
- グローバルスコープで公開するメソッドを慎重に設計し、必要に応じてアクセス制御を行うこと
- 再利用性を高めるため、メソッドの設計を汎用的にすること

参考：[Script Includes - ServiceNow Docs](https://docs.servicenow.com/ja-JP/bundle/washingtondc-api-reference/page/script/server-scripting/concept/c_ScriptIncludes.html)


### UIアクション (UI Action)

**ユースケース**:
- ボタンやリンクのクリック時に実行するカスタムスクリプトを定義する
- フォームやリストの操作をカスタマイズする

**注意ポイント**:
- ユーザーの操作に直結するため、意図しない動作を防ぐための十分なテストが必要
- 他のUIアクションとの競合や影響を考慮すること

参考：[UI Actions - ServiceNow Docs](https://docs.servicenow.com/ja-JP/bundle/washingtondc-platform-administration/page/administer/list-administration/concept/c_UIActions.html)

主なスクリプトをまとめてみましたが、詳細のスクリプティングについて興味がある方は公式Docsもご確認ください。
参考：[スクリプティング - ServiceNow Docs](https://docs.servicenow.com/ja-JP/bundle/washingtondc-application-development/page/script/topic/c_Script.html)

## まとめ

ServiceNowにおけるスクリプトの使い分けは、システムのパフォーマンスやユーザー体験に大きな影響を与える重要なポイントです。それぞれのスクリプトの特性を理解し、適切なユースケースで使用することで、効率的かつ効果的なカスタマイズが可能になります。
この記事が皆さんのServiceNowの理解に役立てば幸いです。
コメントやフィードバックをお待ちしております！