saas-user-resolution について
ServiceNow Software Asset ManagementのSAM分析担当者向けスキルです。SaaSアカウントと利用状況を照合し、未使用・重複ライセンスを特定して最適化案をまとめます。
主な機能
- 01契約数と利用状況の比較
- 02休眠・孤立アカウントの特定
- 03重複プロビジョニングの検出
- 04ライセンス階層の適合性確認
- 05回収可能なライセンス費用の推定
- 06ユーザー照合レポートの作成
活用シーン
- 01SaaS更新前のライセンス確認
- 02入退社プロセスの監査
- 03利用レポートの差異調査
- 04SaaS支出分析の作成
MCP 対応
SN-Query-Table、SN-Natural-Language-Search、SN-Get-RecordなどのServiceNow MCPツールで、契約とユーザーデータを取得します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill saas-user-resolutionインストール後、Claude Code で/saas-user-resolutionを入力して読み込まれたか確認します。
詳細
SaaS ユーザーの整理
概要
このスキルでは、ServiceNow Software Asset Management における SaaS ユーザーの不一致を解消し、SaaS ライセンスの利用を最適化するための体系的なアプローチを提供します。SAM アナリストが無駄を特定し、ユーザーアカウントを照合して、実行可能な最適化の提案を作成できるよう支援します。
主な機能:
- SaaS サブスクリプションのユーザー数と実際のアクティブな利用状況を比較します
- 非アクティブ、休眠状態、または孤立した SaaS ユーザーアカウントを特定します
- SaaS アプリケーション間でのユーザーの重複プロビジョニングを検出します
- 利用状況のパターンを分析し、ライセンス階層の適正化を提案します
- ライセンスの回収によるコスト削減の可能性を算出します
- サブスクリプション所有者向けのユーザー照合レポートを作成します
使用するタイミング: SaaS サブスクリプションの更新が近づいている場合、月次の利用状況レポートで不一致が見つかった場合、オンボーディングやオフボーディングのプロセスを監査する必要がある場合、または経営陣から SaaS 支出の最適化分析を求められた場合に使用します。
前提条件
- ロール:
sam_admin、sam_user、license_admin、またはitil - アクセス:
samp_saas_user、samp_saas_subscription、samp_sw_product、samp_license、samp_sw_install、およびsys_userテーブルへの読み取りアクセス - プラグイン: SaaS License Management モジュールが有効な Software Asset Management (com.snc.samp)
- データ: SaaS 連携が設定され、対象アプリケーションのユーザー同期が完了していること
手順
ステップ 1:SaaS サブスクリプションの詳細を取得する
対象アプリケーションの SaaS サブスクリプションレコードを取得します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: software_product.display_nameLIKESalesforce
fields: sys_id,display_name,software_product,vendor,total_licenses,used_licenses,available_licenses,cost_per_license,total_cost,renewal_date,contract,state,license_metric
limit: 10
REST API を使用する場合:
GET /api/now/table/samp_saas_subscription?sysparm_query=software_product.display_nameLIKESalesforce&sysparm_fields=sys_id,display_name,software_product,vendor,total_licenses,used_licenses,available_licenses,cost_per_license,total_cost,renewal_date,contract,state,license_metric&sysparm_limit=10&sysparm_display_value=true
ステップ 2:SaaS ユーザーアカウントを取得する
サブスクリプションに関連付けられているすべてのユーザーアカウントを取得します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^ORDERBYlast_login_date
fields: sys_id,user,user.email,user.active,subscription,last_login_date,status,license_type,created_on,role
limit: 500
REST API を使用する場合:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^ORDERBYlast_login_date&sysparm_fields=sys_id,user,subscription,last_login_date,status,license_type,created_on,role&sysparm_limit=500&sysparm_display_value=true
ステップ 3:非アクティブユーザーと休眠ユーザーを特定する
定義した非アクティブ期間のしきい値(通常は 30 日、60 日、または 90 日)以内にログインしていないユーザーを検索します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^last_login_date<javascript:gs.daysAgoStart(90)^status=active
fields: sys_id,user,user.email,user.department,last_login_date,license_type,created_on
limit: 200
一度もログインしていないユーザーの場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^last_login_dateISEMPTY^status=active
fields: sys_id,user,user.email,user.department,license_type,created_on
limit: 200
REST API を使用する場合:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^last_login_date<javascript:gs.daysAgoStart(90)^status=active&sysparm_fields=sys_id,user,last_login_date,license_type,created_on&sysparm_limit=200&sysparm_display_value=true
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^last_login_dateISEMPTY^status=active&sysparm_fields=sys_id,user,license_type,created_on&sysparm_limit=200&sysparm_display_value=true
ステップ 4:孤立したユーザーを検出する
対応する ServiceNow ユーザーレコードが非アクティブ(退職した従業員)になっている SaaS ユーザーを特定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^user.active=false^status=active
fields: sys_id,user,user.email,user.active,last_login_date,license_type
limit: 100
REST API を使用する場合:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^user.active=false^status=active&sysparm_fields=sys_id,user,last_login_date,license_type&sysparm_limit=100&sysparm_display_value=true
ステップ 5:ライセンス階層の利用状況を分析する
ユーザーのアクティビティレベルと割り当てられたライセンス階層を比較して、ダウングレードの機会を特定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^status=active^ORDERBYlicense_type
fields: sys_id,user,license_type,last_login_date,role,status
limit: 500
サブスクリプション階層のコストと照合します:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: software_product=[PRODUCT_SYS_ID]
fields: sys_id,display_name,license_metric,cost_per_license,total_licenses,used_licenses
limit: 10
REST API を使用する場合:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^status=active^ORDERBYlicense_type&sysparm_fields=sys_id,user,license_type,last_login_date,role&sysparm_limit=500&sysparm_display_value=true
ステップ 6:重複プロビジョニングを確認する
同じ製品の複数のサブスクリプションでプロビジョニングされているユーザーを特定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription.software_product=[PRODUCT_SYS_ID]^status=active^ORDERBYuser
fields: sys_id,user,user.email,subscription,license_type,status
limit: 500
REST API を使用する場合:
GET /api/now/table/samp_saas_user?sysparm_query=subscription.software_product=[PRODUCT_SYS_ID]^status=active^ORDERBYuser&sysparm_fields=sys_id,user,subscription,license_type,status&sysparm_limit=500&sysparm_display_value=true
ステップ 7:ユーザー整理レポートを作成する
調査結果を構造化された最適化レポートにまとめます:
=== SAAS USER RESOLUTION REPORT ===
Application: [product_name]
Subscription: [subscription_name]
Vendor: [vendor] | Renewal: [renewal_date]
Report Date: [current_date]
SUBSCRIPTION OVERVIEW:
Total Licenses: [total_licenses]
Active Users: [used_licenses]
Available: [available_licenses]
Monthly Cost: $[total_cost] ($[cost_per_license]/user)
USER DISCREPANCY ANALYSIS:
| Category | Count | Monthly Cost Impact |
|----------|-------|-------------------|
| Active & In Use | [count] | - |
| Inactive (90+ days) | [count] | $[savings] |
| Never Logged In | [count] | $[savings] |
| Orphaned (termed employees) | [count] | $[savings] |
| Duplicate Provisioning | [count] | $[savings] |
TOTAL RECLAIMABLE: [total_count] licenses = $[total_savings]/month
TIER OPTIMIZATION:
| Current Tier | Users | Recommended Tier | Savings/User |
|-------------|-------|-----------------|-------------|
| Enterprise | [count] | Standard | $[amount] |
| Professional | [count] | Basic | $[amount] |
TOP RECOMMENDATIONS:
1. [action] - Impact: $[savings]/month - Priority: [High/Med/Low]
2. [action] - Impact: $[savings]/month - Priority: [High/Med/Low]
3. [action] - Impact: $[savings]/month - Priority: [High/Med/Low]
ORPHANED USER DETAILS:
| User | Email | Department | Last Login | License Tier |
|------|-------|-----------|------------|-------------|
| [name] | [email] | [dept] | [date] | [tier] |
ツールの使用方法
MCP ツールのリファレンス
| ツール | 使用するタイミング |
|---|---|
SN-Natural-Language-Search | 自然言語でのクエリ(例:「未使用の Salesforce ライセンスを検索」) |
SN-Query-Table | サブスクリプション、ユーザー、利用状況データの構造化クエリ |
SN-Get-Record | sys_id を指定して特定のサブスクリプションまたはユーザーレコードを取得 |
REST API リファレンス
| エンドポイント | メソッド | 用途 |
|---|---|---|
/api/now/table/samp_saas_subscription | GET | SaaS サブスクリプションの詳細 |
/api/now/table/samp_saas_user | GET | SaaS ユーザーアカウントとアクティビティ |
/api/now/table/samp_sw_product | GET | ソフトウェア製品カタログ |
/api/now/table/samp_license | GET | ライセンスの権利レコード |
/api/now/table/samp_compliance_result | GET | コンプライアンス計算結果 |
/api/now/table/sys_user | GET | 相互参照用の ServiceNow ユーザーレコード |
ベストプラクティス
- 非アクティブ期間のしきい値を明確に定義する: ライセンスを回収する前に、関係者と30/60/90日の休眠期間について合意します
- プロビジョニング解除の前に確認する: ユーザーアクセスを削除する前に、必ず部門マネージャーに確認します
- 季節的な利用を考慮する: ユーザーによっては、正当な定期的アクセスパターン(例:四半期ごとのレポートツール)がある場合があります
- 共有アカウントを確認する: サービスアカウントと共有メールボックスは、休眠分析の対象から除外します
- 回収結果を追跡する: 回収したライセンスを記録し、再プロビジョニングのリクエストを監視します
- コンプライアンスへの影響を考慮する: 後から新しいユーザーが追加された場合、ライセンスを削除すると製品がコンプライアンス違反になる可能性があります
- 継続的な監視を自動化する: 更新サイクルの前に休眠アカウントを検出できるよう、定期レポートを設定します
- 人事部門と連携する: オフボーディングのワークフローを統合し、従業員の退職時にSaaSアカウントへ自動的にフラグを付けます
トラブルシューティング
「SaaS ユーザーレコードを利用できません」
原因: SaaS 統合が設定されていないか、同期が完了していません。 解決策: SAM Workspace の SaaS 統合設定を確認します。SaaS プロバイダーへの API 接続が有効であることを確認します。必要に応じて手動で同期を実行します。
「最終ログイン日がすべて空欄です」
原因: SaaS プロバイダーの統合が、ログイン日の同期に対応していない可能性があります。 解決策: SaaS コネクタが使用状況データに対応しているか確認します。一部のコネクタはプロビジョニングデータのみを同期します。ログインデータを補完するために、SaaS プロバイダーのネイティブなレポート API の利用を検討します。
「重複ユーザーが検出されません」
原因: サブスクリプション間で、異なるメールアドレスまたはユーザー識別子を使ってユーザーがプロビジョニングされている可能性があります。
解決策: メールアドレスではなく、sys_user.employee_number または sys_user.user_name フィールドを使って照合します。メールエイリアスの違いも確認します。
「コスト計算が不正確です」
原因: cost_per_license フィールドに、交渉済みの価格や段階的な数量割引が反映されていない可能性があります。
解決策: コストデータを実際の契約条件と照合します。調達部門から正確なライセンスあたりのコストを入手し、サブスクリプションレコードを更新します。
例
例 1:Salesforce ライセンスの最適化
シナリオ: SAM アナリストが、年次更新の前に Salesforce ライセンスを確認します。
ステップ 1 - サブスクリプションを取得:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: display_nameLIKESalesforce
fields: sys_id,display_name,total_licenses,used_licenses,cost_per_license,renewal_date
limit: 5
出力:
SALESFORCE USER RESOLUTION REPORT
Subscription: Salesforce Enterprise | Renewal: Jun 30, 2026
Total: 800 licenses | Active: 734 | Cost: $150/user/mo
FINDINGS:
- 42 users inactive 90+ days ($6,300/mo reclaimable)
- 18 orphaned accounts (termed employees) ($2,700/mo)
- 6 never-logged-in accounts ($900/mo)
- 23 users eligible for downgrade to Platform license ($1,150/mo)
TOTAL SAVINGS OPPORTUNITY: $11,050/month ($132,600/year)
IMMEDIATE ACTIONS:
1. Deprovision 18 orphaned accounts - $2,700/mo - Priority: High
2. Review 42 inactive users with managers - $6,300/mo - Priority: High
3. Downgrade 23 low-usage users to Platform - $1,150/mo - Priority: Medium
例 2:複数アプリケーションの SaaS 支出レビュー
シナリオ: CIO が、複数アプリケーションを横断する SaaS 最適化レポートを依頼します。
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: state=active^ORDERBYDESCtotal_cost
fields: display_name,software_product,total_licenses,used_licenses,available_licenses,cost_per_license,total_cost,renewal_date
limit: 20
出力:
SAAS PORTFOLIO OPTIMIZATION SUMMARY
Total SaaS Spend: $485,000/month across 14 applications
TOP OPTIMIZATION OPPORTUNITIES:
| Application | Unused Licenses | Monthly Waste | Renewal |
|-------------|----------------|---------------|---------|
| Salesforce Enterprise | 66 | $9,900 | Jun 2026 |
| Adobe Creative Cloud | 45 | $2,475 | Sep 2026 |
| Slack Business+ | 112 | $1,456 | Apr 2026 |
| Zoom Enterprise | 89 | $1,691 | Jul 2026 |
TOTAL ADDRESSABLE WASTE: $15,522/month ($186,264/year)
QUICK WINS (next 30 days): $12,356/month from orphaned accounts
関連スキル
sam/product-compliance- ソフトウェア製品のコンプライアンス分析と是正procurement/invoice-management- SaaS の請求書および契約管理admin/user-provisioning- ユーザーのライフサイクルおよびプロビジョニングのワークフローreporting/executive-dashboard- 経営陣向け SaaS 支出ダッシュボード