mcpField
A
app-generation

app-generation

github.com/happy-technologies-llc開発4141 回インストール2 日前に更新
リポジトリ

app-generation について

app-generationは、要件からServiceNowのスコープ付きアプリケーションを作成するスキルです。開発者向けに、データモデル、アクセス制御、ビジネスロジック、ナビゲーションの構築と検証を案内します。

主な機能

  1. 01アプリケーションスコープとメタデータの作成
  2. 02テーブルとフィールドの定義
  3. 03フォームとナビゲーションの設定
  4. 04ACLとアプリケーションロールの設定
  5. 05ビジネスルールの作成と成果物の検証

活用シーン

  1. 01業務要件からアプリケーションを試作
  2. 02再利用可能なスコープ付きアプリのテンプレート作成
  3. 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-RecordPOST /api/now/table/sys_scope
テーブルを作成SN-Create-RecordPOST /api/now/table/sys_db_object
フィールドを追加SN-Create-RecordPOST /api/now/table/sys_dictionary
ACL を作成SN-Create-RecordPOST /api/now/table/sys_security_acl
ビジネスルールを作成SN-Create-RecordPOST /api/now/table/sys_script
ナビゲーションを作成SN-Create-RecordPOST /api/now/table/sys_app_module
メタデータをクエリSN-Query-TableGET /api/now/table/sys_metadata
アプリケーションを検証SN-Query-TableGET /api/now/table/sys_scope

ベストプラクティス

  • スコープ付きアプリケーションを使用する: 移植性と分離性を確保するため、アプリケーションは必ずスコープ内に作成します
  • 命名規則に従う: すべてのアーティファクトにスコープの名前空間をプレフィックスとして付けます(例:x_vendor_app)
  • タスクを中心にテーブルを設計する: ワークフロー対応のエンティティには、task テーブルを拡張します
  • 早い段階でロールを作成する: 一貫したアクセス制御を確保するため、ACL を作成する前にアプリケーションロールを定義します
  • アプリケーションプロパティを使用する: 設定可能な値はハードコードせず、sys_properties に保存します
  • 段階的に構築する: まずテーブルとフィールドを作成し、次に ACL、その後にビジネスロジック、最後に UI を作成します
  • 構築しながら文書化する: すべてのテーブル、フィールド、ACL、スクリプトに説明を追加します
  • 開発者インスタンスでテストする: 本番環境に移行する前に、必ず個人用開発者インスタンスで試作します
  • アップグレードを計画する: ベースラインテーブルの変更を避け、代わりにカスタムテーブルを拡張または作成します
  • データクリーンアップスクリプトを含める: クリーンアップ手順を用意し、アプリケーションの削除に備えます

トラブルシューティング

テーブルの作成に失敗する

症状: sys_db_object レコードの作成時にエラーが発生する 原因:

  1. maint ロールがない
  2. テーブル名がスコープのプレフィックスと一致しない
  3. テーブル名がすでに存在する 解決策:
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 ルールがあるにもかかわらず、ユーザーがレコードにアクセスできる 原因:

  1. ACL が有効になっていない
  2. 優先度の高い ACL がアクセスを許可している
  3. ユーザーに 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 - デプロイ用にアプリケーションをパッケージ化します

コメント