smart-assessment について
ServiceNow の管理者や評価設計者向けに、アンケートの作成、スコアリングや条件付き質問の設定、結果分析を行うスキルです。過去のデータに基づく AI 回答候補の設定方法も扱います。
主な機能
- 01複数の設問形式で評価を設計
- 02カテゴリの重みとスコア方式を設定
- 03回答に応じて質問を表示・非表示
- 04過去データに基づく回答候補の提示
- 05スコアの集計とベンチマーク分析
活用シーン
- 01GRC コンプライアンスリスク評価の作成
- 02ベンダー評価アンケートの構築
- 03従業員満足度調査の設計
- 04部門のセキュリティ・成熟度評価
MCP 対応
MCP ツールを使って評価、カテゴリ、指標を作成し、指標を更新して、結果や評価インスタンスを検索します。バックグラウンドスクリプトによる結果分析にも対応します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill smart-assessmentインストール後、Claude Code で/smart-assessmentを入力して読み込まれたか確認します。
詳細
スマートアセスメントの設定
概要
このスキルでは、スマートな AI 支援機能を備えた ServiceNow Assessments の設定について説明します。以下を取り上げます。
- 複数のメトリックタイプ(尺度、ブール値、選択肢、テキスト)を使ったアセスメント質問票の設計
- スコアリングモデルとカテゴリー間の重み付けの設定
- 過去の回答に応じて質問を表示/非表示にする条件付きロジックの構築
- 過去のデータから回答を事前入力する AI 支援の回答候補の設定
- 集計スコアとベンチマークを使ったアセスメント結果の分析
- アセスメントと GRC リスクプロファイル、HR 人材レビュー、ベンダー評価の統合
使用する場面:
- GRC コンプライアンス評価向けのリスクアセスメントの作成
- TPRM プログラム向けのベンダーアセスメント質問票の作成
- 従業員エンゲージメントまたは満足度調査の設計
- 部門のコンプライアンスチェック向けのセキュリティ自己評価の設定
- 能力評価向けの成熟度モデルアセスメントの設定
前提条件
- ロール:
assessment_admin、assessment_creator、またはadmin - プラグイン:
com.snc.assessment(Assessment Designer)、GRC 統合にはオプションでcom.sn_grc - アクセス権: asmt_metric、asmt_assessment、asmt_metric_result テーブルへの読み取り/書き込みアクセス
- 知識: アセスメント設計の原則、スコアリング手法、評価対象のビジネス領域に関する理解
主なアセスメントテーブル
| テーブル | 用途 | 主なフィールド |
|---|---|---|
asmt_metric | アセスメントの質問/メトリック | name, metric_type, category, order, weight, mandatory, condition, description, scale_definition |
asmt_assessment | アセスメント定義 | name, description, state, due_date, assessment_type, scoring_type, source_table, category |
asmt_metric_result | 個別の回答/結果 | metric, assessment_instance, value, string_value, actual_value, scored_value, notes |
asmt_metric_type | メトリックタイプの定義 | name, data_type, scale, choices, validation |
asmt_metric_category | 質問カテゴリー/セクション | name, assessment, order, weight, description |
asmt_assessment_instance | アセスメントのインスタンス(割り当て済み) | assessment, user, state, due_date, score, percent_answered, taken_on |
asmt_assessment_instance_question | 質問ごとのインスタンスデータ | instance, metric, response, score, skipped |
手順
ステップ 1:アセスメントの構成を設計する
作成前に、カテゴリー、メトリック、スコアリングを含むアセスメントを計画します。
アセスメント設計フレームワーク:
| コンポーネント | 設計上の決定事項 | 選択肢 |
|---|---|---|
| アセスメントタイプ | 何を評価しますか? | リスク、コンプライアンス、満足度、成熟度、ベンダー |
| スコアリングタイプ | 結果をどのように計算しますか? | 加重平均、合計、最大値、カスタム数式 |
| 尺度 | どのような回答形式を使いますか? | 1~5 のリッカート尺度、1~10 の数値、はい/いいえ、複数選択 |
| カテゴリー | 質問をどのようにグループ化しますか? | ドメイン別、管理策ファミリー別、トピック領域別 |
| 重み付け | 各セクションの重要度はどの程度ですか? | 均等な重み付け、リスクベース、カスタム割合 |
ステップ 2:アセスメント定義を作成する
MCP を使用する(Claude Code/Desktop):
Tool: SN-Create-Record
Parameters:
table_name: asmt_assessment
fields:
name: "Vendor Security Assessment 2026"
description: "Annual security posture assessment for critical and high-tier vendors. Covers access control, data protection, incident response, and business continuity."
state: draft
assessment_type: vendor
scoring_type: weighted_average
source_table: core_company
anonymous: false
allow_retake: false
introduction: "This assessment evaluates your organization's security controls and practices. Please answer all questions accurately based on your current capabilities."
due_date: 2026-06-30
REST API を使用する:
POST /api/now/table/asmt_assessment
Content-Type: application/json
{
"name": "Vendor Security Assessment 2026",
"description": "Annual security posture assessment for critical and high-tier vendors.",
"state": "draft",
"assessment_type": "vendor",
"scoring_type": "weighted_average",
"source_table": "core_company",
"due_date": "2026-06-30"
}
ステップ 3:アセスメントカテゴリーを作成する
質問を重み付けした論理的なセクションにグループ化します。
MCP を使用する:
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric_category
fields:
name: "Access Control"
assessment: [assessment_sys_id]
order: 100
weight: 25
description: "Evaluate identity management, authentication, authorization, and access review practices"
追加のカテゴリーを作成する:
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric_category
fields:
name: "Data Protection"
assessment: [assessment_sys_id]
order: 200
weight: 30
description: "Assess data classification, encryption, backup, and data handling procedures"
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric_category
fields:
name: "Incident Response"
assessment: [assessment_sys_id]
order: 300
weight: 25
description: "Review incident detection, response procedures, notification timelines, and recovery capabilities"
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric_category
fields:
name: "Business Continuity"
assessment: [assessment_sys_id]
order: 400
weight: 20
description: "Evaluate disaster recovery, redundancy, and operational resilience"
ステップ 4:アセスメントメトリック(質問)を作成する
適切なメトリックタイプを使って個々の質問を作成します。
尺度メトリック(1~5 のリッカート尺度):
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric
fields:
name: "Multi-factor authentication is enforced for all privileged access"
metric_type: scale
category: [access_control_category_sys_id]
order: 110
weight: 15
mandatory: true
scale_definition: "1=Not Implemented,2=Partially Implemented,3=Implemented but Not Enforced,4=Implemented and Enforced,5=Implemented, Enforced, and Audited"
description: "Rate the maturity of MFA implementation for privileged accounts including admin, root, and service accounts."
ai_suggestion_enabled: true
ブール値メトリック(はい/いいえ):
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric
fields:
name: "Does your organization maintain a documented incident response plan?"
metric_type: boolean
category: [incident_response_category_sys_id]
order: 310
weight: 10
mandatory: true
description: "A documented IRP should include roles, communication procedures, and escalation paths."
選択肢メトリック(複数選択):
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric
fields:
name: "What is your data encryption standard for data at rest?"
metric_type: choice
category: [data_protection_category_sys_id]
order: 210
weight: 12
mandatory: true
choices: "AES-256,AES-128,DES/3DES,No encryption,Other"
scored_choices: "AES-256=5,AES-128=4,DES/3DES=2,No encryption=0,Other=1"
テキストメトリック(自由回答):
Tool: SN-Create-Record
Parameters:
table_name: asmt_metric
fields:
name: "Describe your data breach notification process and timeline"
metric_type: text
category: [incident_response_category_sys_id]
order: 320
weight: 0
mandatory: false
description: "Include notification timeline, regulatory requirements, and communication channels."
max_length: 2000
ステップ 5:条件付きロジックを設定する
過去の回答に応じて質問を表示または非表示にします。
MCP を使用する:
Tool: SN-Update-Record
Parameters:
table_name: asmt_metric
sys_id: [follow_up_question_sys_id]
data:
condition: "javascript: current.metric == '[parent_metric_sys_id]' && current.value < 3"
condition_description: "Show only if MFA maturity is rated below 3 (Implemented)"
ステップ 6:AI 支援の回答候補を有効にする
過去のデータに基づいて回答を事前入力するスマートな候補を設定します。
MCP を使用する:
Tool: SN-Execute-Background-Script
Parameters:
script: |
// Enable AI suggestions for assessment metrics
var assessmentSysId = '[assessment_sys_id]';
var metric = new GlideRecord('asmt_metric');
metric.addQuery('category.assessment', assessmentSysId);
metric.addQuery('metric_type', 'IN', 'scale,choice,boolean');
metric.query();
var updated = 0;
while (metric.next()) {
// Check for historical responses to generate suggestions
var history = new GlideAggregate('asmt_metric_result');
history.addQuery('metric', metric.sys_id.toString());
history.addAggregate('COUNT');
history.addAggregate('AVG', 'actual_value');
history.query();
if (history.next()) {
var responseCount = parseInt(history.getAggregate('COUNT'));
var avgValue = parseFloat(history.getAggregate('AVG', 'actual_value')) || 0;
if (responseCount >= 5) {
metric.ai_suggestion_enabled = true;
metric.ai_suggestion_confidence = Math.min(responseCount / 50, 1.0);
metric.ai_suggested_value = Math.round(avgValue);
metric.update();
updated++;
}
}
}
gs.info('AI suggestions enabled for ' + updated + ' metrics based on historical response data.');
description: "Assessment: Enable AI response suggestions from historical data"
ステップ 7:評価結果を分析する
スコアの概要とベンチマークデータを生成します。
MCP を使用:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var assessmentName = 'Vendor Security Assessment 2026';
var analysis = {
assessment: assessmentName,
generated_date: new GlideDateTime().toString(),
summary: { total_instances: 0, completed: 0, in_progress: 0, not_started: 0, avg_score: 0 },
by_category: {},
score_distribution: { excellent: 0, good: 0, fair: 0, poor: 0 },
lowest_scoring_metrics: [],
highest_scoring_metrics: []
};
// Get assessment
var asmt = new GlideRecord('asmt_assessment');
asmt.addQuery('name', assessmentName);
asmt.query();
if (!asmt.next()) { gs.info('Assessment not found'); return; }
// Instance statistics
var inst = new GlideRecord('asmt_assessment_instance');
inst.addQuery('assessment', asmt.sys_id.toString());
inst.query();
var scores = [];
while (inst.next()) {
analysis.summary.total_instances++;
var state = inst.state.toString();
if (state == 'complete') { analysis.summary.completed++; scores.push(parseFloat(inst.score.toString()) || 0); }
else if (state == 'wip') analysis.summary.in_progress++;
else analysis.summary.not_started++;
}
if (scores.length > 0) {
var total = 0;
for (var i = 0; i < scores.length; i++) {
total += scores[i];
if (scores[i] >= 80) analysis.score_distribution.excellent++;
else if (scores[i] >= 60) analysis.score_distribution.good++;
else if (scores[i] >= 40) analysis.score_distribution.fair++;
else analysis.score_distribution.poor++;
}
analysis.summary.avg_score = Math.round(total / scores.length);
}
// Category scores
var cat = new GlideRecord('asmt_metric_category');
cat.addQuery('assessment', asmt.sys_id.toString());
cat.query();
while (cat.next()) {
var catResults = new GlideAggregate('asmt_metric_result');
catResults.addQuery('metric.category', cat.sys_id.toString());
catResults.addAggregate('AVG', 'actual_value');
catResults.query();
if (catResults.next()) {
analysis.by_category[cat.name.toString()] = {
avg_score: Math.round(parseFloat(catResults.getAggregate('AVG', 'actual_value')) || 0),
weight: cat.weight.toString() + '%'
};
}
}
gs.info('ASSESSMENT ANALYSIS:\n' + JSON.stringify(analysis, null, 2));
description: "Assessment: Analyze results with scoring and benchmarking"
ツールの使用方法
| 操作 | MCP ツール | REST エンドポイント |
|---|---|---|
| 評価を作成 | SN-Create-Record | POST /api/now/table/asmt_assessment |
| カテゴリを作成 | SN-Create-Record | POST /api/now/table/asmt_metric_category |
| メトリクスを作成 | SN-Create-Record | POST /api/now/table/asmt_metric |
| 結果を照会 | SN-Query-Table | GET /api/now/table/asmt_metric_result |
| インスタンスを照会 | SN-Query-Table | GET /api/now/table/asmt_assessment_instance |
| メトリクスを更新 | SN-Update-Record | PATCH /api/now/table/asmt_metric |
| 結果を分析 | SN-Execute-Background-Script | POST /api/now/table/sys_trigger |
| スキーマを検出 | SN-Discover-Table-Schema | GET /api/now/table/sys_dictionary |
ベストプラクティス
- 質問の明確さ: 回答者によって回答が異ならないよう、曖昧さのない質問を作成します
- バランスの取れたスコアリング: 中間スコアが完璧さではなく、妥当な基準を示すように尺度の定義を調整します
- 必須項目と任意項目: コンプライアンスの中核となる質問は必須にし、補足的な背景情報を尋ねる質問は任意にします
- カテゴリの重み付け: カテゴリの重みを組織のリスク優先度に合わせ、リスク許容度の変化に応じて毎年更新します
- AI 提案のしきい値: 信頼できる平均値を得るため、過去の回答が少なくとも 5 件ある場合にのみ AI 提案を有効にします
- 条件分岐による効率化: 条件ロジックを使って評価の長さを短縮し、関連する場合にのみ追加の質問を表示します
- パイロットテスト: 分かりにくい質問を特定するため、広く展開する前に小規模なグループで評価をテストします
- 匿名性に関する考慮事項: 従業員エンゲージメント調査は匿名にし、ベンダー評価は匿名にしないでください
- バージョン管理: サイクルの途中で有効な評価を変更するのではなく、新しい評価バージョンを作成します
トラブルシューティング
評価スコアが計算されない
症状: 完了した評価インスタンスのスコアが 0 または null になります
原因: メトリクスの重みの合計が正しくないか、スコアリングタイプの設定が誤っている可能性があります
解決策: カテゴリの重みの合計が 100% であることを確認します。各カテゴリ内で個々のメトリクスの重みが設定されていることを確認します。評価の scoring_type が "none" に設定されていないことを確認します。
条件付きの質問が常に非表示になる
症状: 親の質問への回答に関係なく、追加の質問が表示されません
原因: 条件スクリプトが誤ったメトリクス sys_id を参照しているか、値の比較方法が正しくありません
解決策: condition フィールドで正しい親メトリクス sys_id を使用していることを確認します。まず明示的な値でテストし、その後で動的ロジックを追加します。
AI 提案に古いデータが表示される
症状: 提案された回答が現在の基準ではなく、古い評価サイクルを反映しています
原因: AI 提案が、古い評価を含むすべての過去の結果からデータを取得しています
解決策: 提案の計算時に、日付範囲または評価バージョンで過去のデータをフィルタリングします。基準が変更された場合は ai_suggested_value を更新します。
メトリクスの結果が GRC にリンクされない
症状: 評価結果が GRC のリスクモジュールまたはコンプライアンスモジュールに表示されません
原因: 評価の source_table が GRC プロファイルテーブルと一致していないか、インテグレーションのマッピングがありません
解決策: 評価の source_table が GRC プロファイルテーブル(例:sn_grc_profile)に設定されていることを確認します。評価モジュールと GRC モジュール間のインテグレーションビジネスルールを確認します。
例
例 1:NIST CSF 成熟度評価
シナリオ: NIST サイバーセキュリティフレームワークに準拠したサイバーセキュリティ成熟度評価を作成します。
カテゴリ(重み付け):
- 識別(20%) - 資産管理、リスク評価、ガバナンス
- 防御(25%) - アクセス制御、意識向上、データセキュリティ
- 検知(20%) - 異常、監視、検知プロセス
- 対応(20%) - 対応計画、コミュニケーション、分析
- 復旧(15%) - 復旧計画、改善、コミュニケーション
尺度: 1=初期、2=管理、3=定義、4=定量的管理、5=最適化
例 2:従業員エンゲージメント調査
シナリオ: AI が提案するベンチマークを用いた四半期ごとのパルス調査
Tool: SN-Create-Record
Parameters:
table_name: asmt_assessment
fields:
name: "Q1 2026 Employee Engagement Pulse"
assessment_type: survey
scoring_type: weighted_average
source_table: sys_user
anonymous: true
allow_retake: false
due_date: 2026-03-31
結果分析: 平均スコアは3.8/5.0です。最も低いカテゴリはワークライフバランス(3.2)、最も高いカテゴリはチームのコラボレーション(4.3)です。AI は、低下傾向に基づき、ワークライフバランス施策を重点的に実施することを提案しています。
関連スキル
grc/risk-assessment-summarization- リスク評価結果を分析しますgrc/tprm-issue-summarization- TPRM 評価とベンダー評価hrsd/sentiment-analysis- 感情データで評価を補完しますadmin/workflow-creation- 評価の配布とフォローアップを自動化しますreporting/executive-dashboard- 評価結果のダッシュボードを作成します