mcpField
C
configuration-validation

configuration-validation

github.com/happy-technologies-llcテスト・品質4142 回インストール2 日前に更新
リポジトリ

configuration-validation について

ServiceNow の設定品質を担う管理者、開発者、リリース担当者向けのスキルです。カタログアイテム、ワークフロー、ビジネスルール、UI ポリシー、スクリプト、ACL の検証とレポート作成を扱います。

主な機能

  1. 01カタログアイテム、変数、依存関係の検証
  2. 02ワークフローのアクティビティと遷移の確認
  3. 03ビジネスルールのスクリプトと条件の確認
  4. 04UI ポリシーとフィールド参照の検証
  5. 05スクリプトインクルードと ACL の確認
  6. 06検証レポートの作成

活用シーン

  1. 01リリース前のカタログアイテムの完全性確認
  2. 02ワークフローの孤立アクティビティや行き止まりの検出
  3. 03デプロイ前のビジネスルールとアクセス制御の確認

MCP 対応

SN-Validate-Configuration による総合検証と、SN-Query-Table および SN-Get-Table-Schema による設定テーブルやフィールドの詳細確認を説明します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill configuration-validation

インストール後、Claude Code で/configuration-validationを入力して読み込まれたか確認します。

詳細

構成の検証

概要

構成の検証は、ServiceNow のデプロイメントの品質を維持し、エラーを防ぐために不可欠です。このスキルでは、カタログアイテム、ワークフロー、ビジネスルール、その他の構成をデプロイ前に検証する体系的な方法を学びます。

  • どのような問題を解決しますか? 構成エラー、依存関係の不足、参照切れをユーザーに影響したり本番環境の問題を引き起こしたりする前に検出します
  • このスキルは誰が使うべきですか? ServiceNow 構成の品質保証を担当する管理者、開発者、リリースマネージャー
  • どのような成果が期待できますか? 正しく動作する検証済みの構成、包括的なエラー検出、デプロイメントへの信頼

前提条件

  • 必要な ServiceNow のロール:admin または特定の管理者ロール(catalog_admin、workflow_admin)
  • 構成テーブル(sys_script、wf_workflow、sc_cat_item)への読み取りアクセス
  • ServiceNow の構成タイプに関する理解
  • 関連するスキル:admin/schema-discovery(構造の理解に役立ちます)

手順

ステップ 1:構成タイプの特定

検証が必要な構成のタイプを特定します。タイプごとに検証要件が異なります。

構成タイプとテーブル:

構成タイプテーブル主な検証項目
カタログアイテムsc_cat_item変数、ワークフロー、価格
カタログ変数item_option_newタイプ、参照、選択肢
ワークフローwf_workflowアクティビティ、遷移、条件
ビジネスルールsys_scriptスクリプト構文、条件、タイミング
UI ポリシーsys_ui_policy条件、アクション、トリガー
クライアントスクリプトsys_script_clientスクリプト構文、タイプ、テーブル
スクリプトインクルードsys_script_includeクライアントからの呼び出し可否、スコープ
ACLsys_security_acl条件、スクリプト、ロール
ステップ 2:カタログアイテムの検証

カタログアイテムの完全性、適切な構成、依存関係の動作を検証します。

MCP ツールを使用する場合:

Tool: SN-Validate-Configuration
Parameters:
  type: catalog_item
  sys_id: <catalog_item_sys_id>
  checks:
    - variables
    - workflows
    - pricing
    - approvals
    - fulfillment

REST API を使用する場合:

# Get catalog item details
GET /api/now/table/sc_cat_item/<sys_id>?sysparm_display_value=all

# Get associated variables
GET /api/now/table/item_option_new?sysparm_query=cat_item=<sys_id>&sysparm_fields=name,type,mandatory,reference,order

# Get associated workflows
GET /api/now/table/wf_workflow?sysparm_query=table=sc_req_item^published=true&sysparm_fields=name,sys_id

カタログアイテムの検証チェックリスト:

チェック項目説明重大度
有効ステータスアイテムが有効で、表示されている重大
カテゴリ有効なカテゴリが割り当てられている高
変数必須の変数がすべて存在する重大
変数の順序変数に重複しない順序値が設定されている中
変数の参照参照フィールドが有効なテーブルを指している重大
ワークフローフルフィルメントワークフローが存在し、公開されている高
承認ルール承認グループ/ユーザーが存在する高
価格価格と定期価格が有効である中
短い説明文字数制限内である低
アイコン有効なアイコンまたは画像がある低
ステップ 3:変数の検証

カタログ変数の適切な構成と機能を検証します。

MCP ツールを使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: item_option_new
  query: cat_item=<catalog_item_sys_id>
  fields: name,question_text,type,mandatory,reference,order,variable_set

変数タイプの検証ルール:

タイプ必須フィールドよくあるエラー
1(はい/いいえ)question_textなし
5(選択ボックス)question_text、choices選択肢がない
6(1 行テキスト)question_text、max_length長さが過剰
8(参照)question_text、reference無効なテーブル参照
9(日付)question_text日付形式の問題
14(マクロ)macroマクロが見つからない
18(ルックアップ)reference、lookup_tableテーブルの不一致
21(リストコレクター)reference、list_tableリスト構成が無効

変数の選択肢を検証:

Tool: SN-Query-Table
Parameters:
  table_name: question_choice
  query: question=<variable_sys_id>
  fields: text,value,order

判断基準:

  • タイプが 5(選択ボックス)で、選択肢がない場合 → エラー:選択肢がありません
  • タイプが 8(参照)で、参照先テーブルが存在しない場合 → エラー:参照が無効です
  • mandatory=true で、default_value が空の場合 → 警告:デフォルト値のない必須フィールドです
ステップ 4:ワークフローの検証

ワークフローの完全性、遷移の適切さ、行き止まりがないことを検証します。

MCP ツールを使用する場合:

Tool: SN-Validate-Configuration
Parameters:
  type: workflow
  sys_id: <workflow_sys_id>
  checks:
    - activities
    - transitions
    - conditions
    - end_states

REST API を使用する場合:

# Get workflow details
GET /api/now/table/wf_workflow/<sys_id>?sysparm_display_value=all

# Get workflow activities
GET /api/now/table/wf_activity?sysparm_query=workflow_version.workflow=<sys_id>&sysparm_fields=name,activity_definition,x,y

# Get workflow transitions
GET /api/now/table/wf_transition?sysparm_query=workflow_version.workflow=<sys_id>&sysparm_fields=from,to,condition

ワークフロー検証チェックリスト:

チェック項目説明重大度
公開済みワークフローが公開され、有効になっているCritical
開始アクティビティBegin アクティビティがちょうど 1 つあるCritical
終了アクティビティEnd アクティビティが 1 つ以上あるCritical
孤立したアクティビティすべてのアクティビティに入力遷移があるHigh
行き止まりのアクティビティEnd を除くすべてのアクティビティに出力遷移があるHigh
条件の網羅性すべての分岐条件が網羅的であるHigh
アクティビティスクリプトスクリプトの構文が有効であるCritical
タイムアウトハンドラー長時間実行されるアクティビティにタイムアウトが設定されているMedium
ロールバックアクティビティ承認が却下された場合に適切に処理されるMedium

孤立したアクティビティを検出する:

Tool: SN-Query-Table
Parameters:
  table_name: wf_activity
  query: workflow_version.workflow=<sys_id>^activity_definition.name!=Begin
  fields: sys_id,name

# Then check each activity has incoming transition
Tool: SN-Query-Table
Parameters:
  table_name: wf_transition
  query: to=<activity_sys_id>
  fields: sys_id
ステップ 5:ビジネスルールの検証

ビジネスルールの設定、構文、パフォーマンスに関する考慮事項が適切であることを検証します。

MCP ツールを使用する場合:

Tool: SN-Validate-Configuration
Parameters:
  type: business_rule
  sys_id: <business_rule_sys_id>
  checks:
    - syntax
    - conditions
    - performance
    - scope

REST API を使用する場合:

# Get business rule details
GET /api/now/table/sys_script/<sys_id>?sysparm_fields=name,when,collection,active,script,filter_condition,order

ビジネスルール検証チェックリスト:

チェック項目説明重大度
有効ルールが有効であるInfo
テーブル有効なテーブル参照であるCritical
実行タイミング適切なタイミング(before/after/async)であるHigh
条件フィルター条件が有効であるHigh
スクリプト構文JavaScript エラーがないCritical
Before での GlideRecordbefore ルールでは GlideRecord の更新を避けるHigh
Current.update()before ルールでは使用を避ける(再帰が発生するため)Critical
変更の確認効率化のために .changes() を使用しているMedium
順序適切な order 値であるMedium
スコープ適切なアプリケーションスコープであるHigh

よくあるビジネスルールのアンチパターン:

// ANTI-PATTERN 1: current.update() in before rule
// Causes infinite recursion
(function executeRule(current, previous) {
  current.priority = 1;
  current.update(); // BAD! Remove this line
})(current, previous);

// ANTI-PATTERN 2: Unnecessary GlideRecord in before rule
(function executeRule(current, previous) {
  var gr = new GlideRecord('incident');
  gr.get(current.sys_id);
  gr.priority = 1;
  gr.update(); // BAD! Just set current.priority = 1
})(current, previous);

// ANTI-PATTERN 3: No changes() check
(function executeRule(current, previous) {
  // Runs on every update even if priority didn't change
  notifyPriorityChange(current.priority);
})(current, previous);

// CORRECT: Check if field changed
(function executeRule(current, previous) {
  if (current.priority.changes()) {
    notifyPriorityChange(current.priority);
  }
})(current, previous);
ステップ 6:UI ポリシーの検証

UI ポリシーの設定とアクションの完全性が適切であることを検証します。

MCP ツールを使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: sys_ui_policy
  query: sys_id=<ui_policy_sys_id>
  fields: short_description,table,conditions,active,global,inherit

UI ポリシーのアクションを取得する:

Tool: SN-Query-Table
Parameters:
  table_name: sys_ui_policy_action
  query: ui_policy=<ui_policy_sys_id>
  fields: field,mandatory,visible,disabled

UI ポリシー検証チェックリスト:

チェック項目説明重大度
有効ポリシーが有効であるInfo
テーブル有効なテーブル参照であるCritical
条件条件が有効で、テスト可能であるHigh
アクションの存在少なくとも 1 つのアクションが定義されているHigh
フィールド参照アクションのフィールドがテーブルに存在するCritical
逆状態への対応ポリシーが true と false の両方の状態に対応しているMedium
順序同じフィールドに対して競合するポリシーがないMedium
ステップ 7:スクリプトインクルードの検証

スクリプトインクルードの設定とアクセス性が適切であることを検証します。

MCP ツールを使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: sys_script_include
  query: sys_id=<script_include_sys_id>
  fields: name,api_name,client_callable,access,active,script

スクリプトインクルード検証チェックリスト:

チェック項目説明重大度
有効スクリプトインクルードが有効であるInfo
名前の規約命名規約に従っているMedium
API 名一意で説明的であるMedium
クライアント呼び出し可能必要な場合に限る(セキュリティリスク)High
構文JavaScript の構文が有効であるCritical
Prototype パターン適切なクラスパターンを使用しているMedium
ドキュメントJSDoc コメントがあるLow
依存関係参照されているスクリプトインクルードが存在するHigh
ステップ 8:ACL の検証

アクセス制御リストのセキュリティ設定が適切であることを検証します。

MCP ツールを使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: sys_security_acl
  query: name=incident
  fields: name,operation,type,active,condition,script,role

ACL 検証チェックリスト:

チェック項目説明重大度
有効ACL が有効であるInfo
操作有効な操作タイプであるCritical
ロール少なくとも 1 つのロールまたは条件があるCritical
条件条件式が有効であるHigh
スクリプト使用されている場合、スクリプトが有効であるHigh
カバレッジすべての操作が対象になっているMedium
継承* ACL が適切に使用されているMedium
ステップ 9:検証レポートの生成

すべての検証結果をまとめて、包括的なレポートを作成します。

検証レポートのテンプレート:

# Configuration Validation Report

## Summary
- Configuration: [Name]
- Type: [Catalog Item / Workflow / Business Rule]
- Date: [Date]
- Validator: [Name]

## Overall Status: [PASS / FAIL / WARNING]

## Detailed Findings

### Critical Issues (Must Fix)
1. [Issue description and remediation]
2. [Issue description and remediation]

### High Priority Issues (Should Fix)
1. [Issue description and remediation]

### Medium Priority Issues (Consider Fixing)
1. [Issue description and remediation]

### Low Priority Issues (Nice to Have)
1. [Issue description and remediation]

## Validation Details

### Component 1: [Name]
- Status: [PASS/FAIL]
- Checks Performed: [List]
- Issues Found: [List]

### Component 2: [Name]
- Status: [PASS/FAIL]
- Checks Performed: [List]
- Issues Found: [List]

## Recommendations
1. [Recommendation]
2. [Recommendation]

## Sign-off
- [ ] All critical issues resolved
- [ ] All high priority issues resolved or documented
- [ ] Configuration approved for deployment

ツールの使用方法

MCP ツール(Claude Code/Desktop)
ツール目的使用するタイミング
SN-Validate-Configuration包括的な検証主な検証ツール
SN-Query-Table構成テーブルのクエリ詳細な調査
SN-Get-Table-Schemaテーブル構造の把握フィールド参照の検証
REST API(ChatGPT/Other)
エンドポイントメソッド目的
/api/now/table/sc_cat_itemGETカタログ項目の検証
/api/now/table/item_option_newGET変数の検証
/api/now/table/wf_workflowGETワークフローの検証
/api/now/table/sys_scriptGETビジネスルールの検証
/api/now/table/sys_ui_policyGETUI ポリシーの検証
/api/now/table/sys_script_includeGETスクリプトインクルードの検証
/api/now/table/sys_security_aclGETACL の検証
ネイティブツール(Claude Code)
ツール目的
Bash検証スクリプトの実行
Read検証テンプレートの読み取り

ベストプラクティス

  • 昇格前に検証する: インスタンス間で移行する前に、必ず構成を検証します
  • 自動検証を使用する: CI/CD パイプラインに自動検証を実装します
  • 例外を文書化する: 受け入れた検証警告を文書化します
  • データを使用してテストする: 空のレコードではなく、現実的なテストデータを使用して検証します
  • 依存関係を相互参照する: 参照されているすべてのオブジェクトがターゲット環境に存在することを確認します
  • バージョン管理: 更新セットのドキュメントとともに検証レポートを保管します
  • ITIL との整合性: 変更管理プロセスの一環として検証を実施します

トラブルシューティング

よくある問題 1:検証で誤検知が発生する

症状: 実際には正常に動作する構成が、検証で問題として検出されます
原因: 検証ロジックが有効な構成をすべて考慮していません
解決策: 該当する検証ルールを確認し、例外処理を追加します

# Check if the "error" is actually valid
Tool: SN-Query-Table
Parameters:
  table_name: <relevant_table>
  query: sys_id=<object_sys_id>
  display_value: all
よくある問題 2:ターゲットインスタンスに依存関係が不足している

症状: 開発環境では動作する構成が、テスト環境や本番環境では検証に失敗します
原因: 依存関係が更新セットに含まれていません
解決策: sys_update_xml をクエリして、関連するすべてのレコードを特定します

Tool: SN-Query-Table
Parameters:
  table_name: sys_update_xml
  query: update_set=<update_set_sys_id>
  fields: type,target_name,name
よくある問題 3:スクリプトの構文エラーが検出されない

症状: 無効な JavaScript が検証を通過しますが、実行時に失敗します
原因: 基本的な構文チェックでは、すべての JavaScript エラーを検出できません
解決策: ServiceNow の構文チェッカーまたはバックグラウンドスクリプトのテストを使用します

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    try {
      eval('<script_content>');
      gs.info('Syntax check passed');
    } catch(e) {
      gs.error('Syntax error: ' + e.message);
    }
よくある問題 4:ワークフローの検証がタイムアウトする

症状: ワークフローの検証に時間がかかりすぎる、または失敗します
原因: アクティビティと遷移が多数ある複雑なワークフローです
解決策: 検証を小さな単位に分割します

# Validate activities separately
Tool: SN-Query-Table
Parameters:
  table_name: wf_activity
  query: workflow_version.workflow=<sys_id>
  limit: 50
  offset: 0

# Then transitions
Tool: SN-Query-Table
Parameters:
  table_name: wf_transition
  query: workflow_version.workflow=<sys_id>
  limit: 100

例

例 1:カタログ項目の完全な検証
# Step 1: Get catalog item details
Tool: SN-Query-Table
Parameters:
  table_name: sc_cat_item
  query: sys_id=abc123
  fields: name,short_description,active,category,workflow
  display_value: all

# Result:
name: "New Laptop Request"
active: true
category: "Hardware"
workflow: "Standard Laptop Fulfillment"

# Step 2: Validate variables
Tool: SN-Query-Table
Parameters:
  table_name: item_option_new
  query: cat_item=abc123
  fields: name,question_text,type,mandatory,reference,order

# Result:
- laptop_type (Select Box, mandatory) - OK
- memory_size (Select Box) - OK
- justification (Multi-line, mandatory) - OK
- manager_approval (Reference to sys_user) - OK

# Step 3: Validate variable choices exist
Tool: SN-Query-Table
Parameters:
  table_name: question_choice
  query: question.cat_item=abc123
  fields: question.name,text,value

# Result:
laptop_type choices: Standard, Developer, Executive - OK
memory_size choices: 8GB, 16GB, 32GB - OK

# Step 4: Validate workflow exists and is published
Tool: SN-Query-Table
Parameters:
  table_name: wf_workflow
  query: name=Standard Laptop Fulfillment
  fields: name,published,active

# Result:
published: true
active: true - OK

# Final Status: PASS - All validations passed
例 2:ビジネスルールのパフォーマンス検証
# Step 1: Get business rule
Tool: SN-Query-Table
Parameters:
  table_name: sys_script
  query: name=Auto Assign Critical Incidents
  fields: name,when,collection,active,script,filter_condition

# Result:
name: "Auto Assign Critical Incidents"
when: "before"
collection: "incident"
filter_condition: "priority=1"
script: (see below)

# Step 2: Analyze script for anti-patterns
Script Content:
```javascript
(function executeRule(current, previous) {
  var gr = new GlideRecord('sys_user_group');
  gr.addQuery('name', 'Critical Incident Team');
  gr.query();
  if (gr.next()) {
    current.assignment_group = gr.sys_id;
  }

  // ISSUE FOUND: GlideRecord query in before rule
  // This runs on EVERY insert of P1 incident
})(current, previous);

Step 3: 推奨事項の生成

検出された問題:

  1. WARNING: before ルール内の GlideRecord クエリ
    • 影響:インシデント作成時のパフォーマンス低下
    • 推奨事項:グループの sys_id をシステムプロパティにキャッシュするか、gs.getProperty() を使用します

推奨される修正:

(function executeRule(current, previous) {
  // Use cached value instead of query
  var criticalTeamId = gs.getProperty('x_app.critical_team_sys_id');
  if (criticalTeamId) {
    current.assignment_group = criticalTeamId;
  }
})(current, previous);

最終ステータス:WARNING - パフォーマンスの問題が検出されました


### Example 3: Workflow Dead-End Detection

Step 1: ワークフローアクティビティの取得

ツール:SN-Query-Table パラメーター: table_name: wf_activity query: workflow_version.workflow=wf123 fields: sys_id,name,activity_definition.name

結果:

  • act1: 開始
  • act2: タスクの作成
  • act3: 承認
  • act4: 承認された場合(分岐)
  • act5: リクエストの履行
  • act6: 終了
  • act7: 拒否メールの送信

Step 2: すべての遷移の取得

ツール:SN-Query-Table パラメーター: table_name: wf_transition query: workflow_version.workflow=wf123 fields: from.name,to.name,condition

結果:

  • 開始 -> タスクの作成
  • タスクの作成 -> 承認
  • 承認 -> 承認された場合
  • 承認された場合 -> リクエストの履行(条件:承認済み)
  • 承認された場合 -> 拒否メールの送信(条件:拒否)
  • リクエストの履行 -> 終了

ステップ 3:問題を分析する

問題が見つかりました:行き止まりのアクティビティ

  • 「Send Rejection Email」(act7)に出力先の遷移がありません
  • そのため、拒否後にワークフローが停止します

推奨事項:

「Send Rejection Email」から「End」への遷移を追加してください

最終ステータス:失敗 — ワークフローに行き止まりのアクティビティがあります


### Example 4: ACL Coverage Validation

ステップ 1:テーブルのすべての ACL を取得する

ツール:SN-Query-Table パラメーター: table_name: sys_security_acl query: name=x_app_custom_table fields: name,operation,type,active,admin_overrides,role.name

結果:

  • x_app_custom_table(読み取り) - ロール:x_app.user - 有効
  • x_app_custom_table(書き込み) - ロール:x_app.admin - 有効
  • x_app_custom_table(作成) - ロール:x_app.admin - 有効
  • x_app_custom_table(削除) - ロール:x_app.admin - 有効
  • x_app_custom_table.*(読み取り) - ロール:x_app.user - 有効

ステップ 2:カバレッジを分析する

対象の操作:

  • read:はい
  • write:はい
  • create:はい
  • delete:はい

フィールドレベル ACL:

  • .(すべてのフィールド):はい

ステップ 3:不足を確認する

問題が見つかりました:行レベルの制限がありません

  • x_app.user ロールを持つすべてのユーザーが、すべてのレコードを読み取れます
  • レコードレベルのセキュリティのため、条件の追加を検討してください

推奨事項:

レコードをユーザーごとに制限する場合は、次の条件を追加してください: created_by=javascript:gs.getUserID()

最終ステータス:警告 — 行レベルのセキュリティを検討してください


## Related Skills

- `admin/schema-discovery` - Understanding table structures for validation
- `admin/update-set-management` - Managing validated configurations
- `admin/batch-operations` - Fixing validation issues in bulk
- `admin/deployment-workflow` - Deploying validated configurations

## References

- [ServiceNow Instance Scan](https://docs.servicenow.com/bundle/utah-application-development/page/build/instance-scan/concept/instance-scan.html)
- [Catalog Item Best Practices](https://docs.servicenow.com/bundle/utah-servicenow-platform/page/product/service-catalog-management/concept/c_ServiceCatalogBestPractices.html)
- [Workflow Best Practices](https://docs.servicenow.com/bundle/utah-servicenow-platform/page/administer/workflow-administration/concept/c_WorkflowBestPractices.html)
- [Business Rule Best Practices](https://docs.servicenow.com/bundle/utah-application-development/page/script/server-scripting/concept/c_BusinessRuleBestPractices.html)
- [ACL Best Practices](https://docs.servicenow.com/bundle/utah-platform-security/page/administer/contextual-security/concept/access-control-best-practices.html)

コメント