app-generation について
app-generationは、要件からServiceNowのスコープ付きアプリケーションを作成するスキルです。開発者向けに、データモデル、アクセス制御、ビジネスロジック、ナビゲーションの構築と検証を案内します。
主な機能
- 01アプリケーションスコープとメタデータの作成
- 02テーブルとフィールドの定義
- 03フォームとナビゲーションの設定
- 04ACLとアプリケーションロールの設定
- 05ビジネスルールの作成と成果物の検証
活用シーン
- 01業務要件からアプリケーションを試作
- 02再利用可能なスコープ付きアプリのテンプレート作成
- 03カスタム資産管理アプリの構築
MCP 対応
SN-Create-Recordでアプリケーションの成果物を作成し、SN-Query-Tableで確認・検証するMCPの手順を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill app-generationインストール後、Claude Code で/app-generationを入力して読み込まれたか確認します。
詳細
ServiceNow スコープ付きアプリケーションの生成
概要
このスキルでは、要件に基づいて ServiceNow のスコープ付きアプリケーション全体を生成する方法を説明します。以下が含まれます。
- アプリケーションスコープとメタデータの作成
- フィールド、インデックス、リレーションシップを含むカスタムテーブルの定義
- フォーム、リスト、UI 設定の生成
- ロールベースのアクセス制御のための ACL ルールの作成
- ビジネスルール、クライアントスクリプト、スクリプトインクルードの作成
- アプリケーションナビゲーションとモジュールの設定
- アプリケーションプロパティとシステム設定の構成
使用する場面: 新しいカスタムアプリケーションを一から構築する場合、ビジネス要件からソリューションのプロトタイプを作成する場合、または標準化されたアプリケーションテンプレートの作成を自動化する場合です。
前提条件
- ロール:
admin、maint(テーブル作成用)、またはapplication_creator - アクセス権: sys_scope、sys_app、sys_db_object、sys_dictionary、sys_security_acl、sys_script テーブル
- 知識: ServiceNow のアプリケーションモデル、スコープ付きアプリケーション、データモデリング、ACL アーキテクチャ
- プラグイン: 追加のプラグインは不要です。Studio(com.glide.studio)の使用を推奨します
- 関連スキル: スクリプト生成パターンについては
development/code-assistを完了してください
手順
ステップ 1:アプリケーションアーキテクチャを理解する
sys_scope (Application Scope)
├── sys_app (Application Record)
├── sys_db_object (Tables)
│ └── sys_dictionary (Fields/Columns)
├── sys_ui_form (Forms)
│ └── sys_ui_form_section (Form Sections)
├── sys_ui_list (List Views)
├── sys_security_acl (ACL Rules)
├── sys_script (Business Rules)
├── sys_script_client (Client Scripts)
├── sys_script_include (Script Includes)
├── sys_app_module (Navigation Modules)
└── sys_properties (Application Properties)
主要なテーブル:
| テーブル | 用途 |
|---|---|
| sys_scope | アプリケーションスコープの定義と名前空間 |
| sys_app | アプリケーションのメタデータとバージョン情報 |
| sys_metadata | すべてのアプリケーションアーティファクトのベースレコード |
| sys_db_object | テーブル定義 |
| sys_dictionary | テーブルのフィールド/列定義 |
| sys_security_acl | アクセス制御ルール |
ステップ 2:アプリケーションスコープを作成する
MCP の方法:
Tool: SN-Create-Record
Parameters:
table_name: sys_scope
data:
name: "Asset Tracking Pro"
scope: "x_happy_asset_trk"
short_description: "Custom asset tracking and lifecycle management application"
version: "1.0.0"
vendor: "Happy Technologies LLC"
vendor_prefix: "x_happy"
active: true
licensable: false
js_level: "helsinki_es6"
REST の代替方法:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_scope" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-X POST \
-d '{
"name": "Asset Tracking Pro",
"scope": "x_happy_asset_trk",
"short_description": "Custom asset tracking and lifecycle management application",
"version": "1.0.0",
"vendor": "Happy Technologies LLC",
"active": true
}'
ステップ 3:アプリケーションテーブルを作成する
プライマリテーブルを作成する:
MCP の方法:
Tool: SN-Create-Record
Parameters:
table_name: sys_db_object
data:
name: "x_happy_asset_trk_asset"
label: "Tracked Asset"
super_class: task
is_extendable: true
create_access: true
read_access: true
update_access: true
delete_access: true
sys_scope: [scope_sys_id]
REST の代替方法:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_db_object" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"name": "x_happy_asset_trk_asset",
"label": "Tracked Asset",
"super_class": "task",
"is_extendable": true,
"sys_scope": "[scope_sys_id]"
}'
サポートテーブルを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_db_object
data:
name: "x_happy_asset_trk_asset_history"
label: "Asset History"
is_extendable: false
sys_scope: [scope_sys_id]
ステップ 4:テーブルにフィールドを追加する
文字列フィールドを追加する:
MCP の方法:
Tool: SN-Create-Record
Parameters:
table_name: sys_dictionary
data:
name: "x_happy_asset_trk_asset"
element: "asset_tag"
column_label: "Asset Tag"
internal_type: "string"
max_length: 40
mandatory: true
unique: true
active: true
read_only: false
sys_scope: [scope_sys_id]
参照フィールドを追加する:
Tool: SN-Create-Record
Parameters:
table_name: sys_dictionary
data:
name: "x_happy_asset_trk_asset"
element: "assigned_user"
column_label: "Assigned User"
internal_type: "reference"
reference: "sys_user"
max_length: 32
mandatory: false
active: true
sys_scope: [scope_sys_id]
選択肢フィールドを追加する:
Tool: SN-Create-Record
Parameters:
table_name: sys_dictionary
data:
name: "x_happy_asset_trk_asset"
element: "asset_status"
column_label: "Asset Status"
internal_type: "string"
max_length: 40
choice: 1
mandatory: true
default_value: "available"
active: true
sys_scope: [scope_sys_id]
選択肢フィールドに選択肢を追加する:
Tool: SN-Create-Record
Parameters:
table_name: sys_choice
data:
name: "x_happy_asset_trk_asset"
element: "asset_status"
label: "Available"
value: "available"
sequence: 100
inactive: false
Tool: SN-Create-Record
Parameters:
table_name: sys_choice
data:
name: "x_happy_asset_trk_asset"
element: "asset_status"
label: "In Use"
value: "in_use"
sequence: 200
inactive: false
Tool: SN-Create-Record
Parameters:
table_name: sys_choice
data:
name: "x_happy_asset_trk_asset"
element: "asset_status"
label: "In Maintenance"
value: "in_maintenance"
sequence: 300
inactive: false
Tool: SN-Create-Record
Parameters:
table_name: sys_choice
data:
name: "x_happy_asset_trk_asset"
element: "asset_status"
label: "Retired"
value: "retired"
sequence: 400
inactive: false
日付フィールドを追加する:
Tool: SN-Create-Record
Parameters:
table_name: sys_dictionary
data:
name: "x_happy_asset_trk_asset"
element: "purchase_date"
column_label: "Purchase Date"
internal_type: "glide_date"
mandatory: false
active: true
sys_scope: [scope_sys_id]
通貨フィールドを追加する:
Tool: SN-Create-Record
Parameters:
table_name: sys_dictionary
data:
name: "x_happy_asset_trk_asset"
element: "purchase_cost"
column_label: "Purchase Cost"
internal_type: "currency"
mandatory: false
active: true
sys_scope: [scope_sys_id]
ステップ 5:ACL ルールを作成する
テーブルレベルの読み取り ACL を作成する:
MCP の方法:
Tool: SN-Create-Record
Parameters:
table_name: sys_security_acl
data:
name: "x_happy_asset_trk_asset"
operation: "read"
type: "record"
active: true
admin_overrides: true
advanced: false
condition: ""
sys_scope: [scope_sys_id]
ロールベースの ACL を作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_security_acl
data:
name: "x_happy_asset_trk_asset"
operation: "write"
type: "record"
active: true
admin_overrides: true
sys_scope: [scope_sys_id]
ロールを ACL に関連付ける:
Tool: SN-Create-Record
Parameters:
table_name: sys_security_acl_role
data:
sys_security_acl: [acl_sys_id]
sys_user_role: [role_sys_id]
カスタムアプリケーションロールを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_role
data:
name: "x_happy_asset_trk.manager"
description: "Asset Tracking Manager - full CRUD access"
assignable_by: [admin_role_sys_id]
sys_scope: [scope_sys_id]
Tool: SN-Create-Record
Parameters:
table_name: sys_user_role
data:
name: "x_happy_asset_trk.user"
description: "Asset Tracking User - read and create access"
assignable_by: [admin_role_sys_id]
sys_scope: [scope_sys_id]
ステップ 6:ビジネスロジックを作成する
挿入前ビジネスルール — アセットタグを自動生成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_script
data:
name: "Generate Asset Tag"
collection: "x_happy_asset_trk_asset"
when: "before"
order: 100
active: true
action_insert: true
sys_scope: [scope_sys_id]
script: |
(function executeRule(current, previous) {
if (!current.asset_tag) {
var prefix = 'AST';
var ga = new GlideAggregate('x_happy_asset_trk_asset');
ga.addAggregate('COUNT');
ga.query();
var count = 0;
if (ga.next()) {
count = parseInt(ga.getAggregate('COUNT'), 10);
}
current.asset_tag = prefix + '-' + gs.nowNoTZ().substring(0, 4) + '-' + String(count + 1).padStart(5, '0');
}
})(current, previous);
更新後ビジネスルール — ステータスの変更を追跡する:
Tool: SN-Create-Record
Parameters:
table_name: sys_script
data:
name: "Track Asset Status Change"
collection: "x_happy_asset_trk_asset"
when: "after"
order: 200
active: true
action_update: true
sys_scope: [scope_sys_id]
script: |
(function executeRule(current, previous) {
if (current.asset_status.changes()) {
var history = new GlideRecord('x_happy_asset_trk_asset_history');
history.initialize();
history.asset = current.sys_id;
history.previous_status = previous.asset_status;
history.new_status = current.asset_status;
history.changed_by = gs.getUserID();
history.changed_on = new GlideDateTime();
history.insert();
}
})(current, previous);
ステップ 7:アプリケーションナビゲーションを作成する
アプリケーションメニューを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_app_application
data:
title: "Asset Tracking"
hint: "Asset Tracking Pro application"
device_type: "browser"
category: "custom"
active: true
sys_scope: [scope_sys_id]
ナビゲーションモジュールを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_app_module
data:
title: "All Assets"
application: [app_menu_sys_id]
hint: "View all tracked assets"
link_type: "LIST"
name: "x_happy_asset_trk_asset"
query: ""
order: 100
active: true
sys_scope: [scope_sys_id]
Tool: SN-Create-Record
Parameters:
table_name: sys_app_module
data:
title: "Create New Asset"
application: [app_menu_sys_id]
hint: "Create a new tracked asset"
link_type: "NEW"
name: "x_happy_asset_trk_asset"
order: 200
active: true
sys_scope: [scope_sys_id]
Tool: SN-Create-Record
Parameters:
table_name: sys_app_module
data:
title: "My Assigned Assets"
application: [app_menu_sys_id]
hint: "Assets assigned to me"
link_type: "LIST"
name: "x_happy_asset_trk_asset"
query: "assigned_user=javascript:gs.getUserID()"
order: 300
active: true
sys_scope: [scope_sys_id]
ステップ 8:アプリケーションを検証する
すべてのアプリケーションアーティファクトを確認する:
MCP の方法:
Tool: SN-Query-Table
Parameters:
table_name: sys_metadata
query: sys_scope=[scope_sys_id]
fields: sys_id,sys_class_name,sys_name
limit: 200
REST の代替方法:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_metadata?sysparm_query=sys_scope=[scope_sys_id]&sysparm_fields=sys_id,sys_class_name,sys_name&sysparm_limit=200" \
-H "Accept: application/json"
ツールの使用
| 操作 | MCP ツール | REST エンドポイント |
|---|---|---|
| アプリケーションスコープを作成 | SN-Create-Record | POST /api/now/table/sys_scope |
| テーブルを作成 | SN-Create-Record | POST /api/now/table/sys_db_object |
| フィールドを追加 | SN-Create-Record | POST /api/now/table/sys_dictionary |
| ACL を作成 | SN-Create-Record | POST /api/now/table/sys_security_acl |
| ビジネスルールを作成 | SN-Create-Record | POST /api/now/table/sys_script |
| ナビゲーションを作成 | SN-Create-Record | POST /api/now/table/sys_app_module |
| メタデータをクエリ | SN-Query-Table | GET /api/now/table/sys_metadata |
| アプリケーションを検証 | SN-Query-Table | GET /api/now/table/sys_scope |
ベストプラクティス
- スコープ付きアプリケーションを使用する: 移植性と分離性を確保するため、アプリケーションは必ずスコープ内に作成します
- 命名規則に従う: すべてのアーティファクトにスコープの名前空間をプレフィックスとして付けます(例:
x_vendor_app) - タスクを中心にテーブルを設計する: ワークフロー対応のエンティティには、
taskテーブルを拡張します - 早い段階でロールを作成する: 一貫したアクセス制御を確保するため、ACL を作成する前にアプリケーションロールを定義します
- アプリケーションプロパティを使用する: 設定可能な値はハードコードせず、
sys_propertiesに保存します - 段階的に構築する: まずテーブルとフィールドを作成し、次に ACL、その後にビジネスロジック、最後に UI を作成します
- 構築しながら文書化する: すべてのテーブル、フィールド、ACL、スクリプトに説明を追加します
- 開発者インスタンスでテストする: 本番環境に移行する前に、必ず個人用開発者インスタンスで試作します
- アップグレードを計画する: ベースラインテーブルの変更を避け、代わりにカスタムテーブルを拡張または作成します
- データクリーンアップスクリプトを含める: クリーンアップ手順を用意し、アプリケーションの削除に備えます
トラブルシューティング
テーブルの作成に失敗する
症状: sys_db_object レコードの作成時にエラーが発生する 原因:
maintロールがない- テーブル名がスコープのプレフィックスと一致しない
- テーブル名がすでに存在する 解決策:
Tool: SN-Query-Table
Parameters:
table_name: sys_db_object
query: name=x_happy_asset_trk_asset
fields: sys_id,name,label,sys_scope
ACL が適用されない
症状: ACL ルールがあるにもかかわらず、ユーザーがレコードにアクセスできる 原因:
- ACL が有効になっていない
- 優先度の高い ACL がアクセスを許可している
- ユーザーに admin ロールがある(admin_overrides = true) 解決策: ACL の評価順序を確認します:
Tool: SN-Query-Table
Parameters:
table_name: sys_security_acl
query: name=x_happy_asset_trk_asset^active=true
fields: sys_id,name,operation,type,admin_overrides,condition
limit: 20
スコープアクセスエラー
症状: スクリプト実行時に「Scope access denied」が表示される 原因: クロススコープアクセスが設定されていない 解決策: スコープアクセスの設定を確認します:
Tool: SN-Query-Table
Parameters:
table_name: sys_scope_privilege
query: source_scope=[scope_sys_id]
fields: sys_id,source_scope,target_scope,type,operation,status
limit: 20
フォームにフィールドが表示されない
症状: 作成したフィールドがフォームに表示されない 原因: フィールドはディクショナリに存在するが、フォームのレイアウトに追加されていない 解決策: フォームセクションのエントリを作成するか、フォームデザイナーを使用します。フィールドの存在を確認します:
Tool: SN-Query-Table
Parameters:
table_name: sys_dictionary
query: name=x_happy_asset_trk_asset^active=true
fields: element,column_label,internal_type,mandatory
limit: 50
例
例:完全な訪問者管理アプリケーション
# 1. Create scope
Tool: SN-Create-Record
Parameters:
table_name: sys_scope
data:
name: "Visitor Management"
scope: "x_happy_visitor"
version: "1.0.0"
vendor: "Happy Technologies LLC"
# 2. Create visitor table extending task
Tool: SN-Create-Record
Parameters:
table_name: sys_db_object
data:
name: "x_happy_visitor_visit"
label: "Visitor Request"
super_class: task
# 3. Add fields: visitor_name, company, host, visit_date, badge_number
# 4. Create ACLs for receptionist and host roles
# 5. Create business rule to auto-assign badge numbers
# 6. Create client script for date validation
# 7. Create navigation modules
# 8. Validate all artifacts via sys_metadata
関連スキル
genai/app-summary- 既存のアプリケーションを分析して要約しますdevelopment/code-assist- スクリプトの AI 支援コード生成development/code-review- 生成されたコードの品質をレビューしますsecurity/acl-management- ACL の詳細な設定admin/update-set-management- デプロイ用にアプリケーションをパッケージ化します