1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UiPath】超簡単✨ライセンスの実消費量の調べ方

1
Last updated at Posted at 2026-08-03

はじめに

  • 本記事は、UiPath CLIをもちいたライセンス消費量の調べ方を紹介しています。
  • 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
  • 製品仕様や参考画像は2026年7月29日時点のもので構成しています。

前提条件

本記事でご紹介する操作は、UiPath CLIがインストールされている、かつ、Automation Cloudの組織管理者権限を保有していることが前提となります。

UiPathのCLIは次の要領でインストールできます↓↓

  1. Node.js のインストール → 参考記事
  2. PowerShell起動して「npm install -g @uipath/cli」を実行

もっとも簡単なライセンス消費量の調べ方

Coding Agent に次の指示書を覚えさせます。(Claudeの例)

image.png

緑色背景部の内容を .md 拡張子で保存してお使いください(メニューの「Markdawnで本文を見る」から ::: note ::: で囲まれた範囲をテキストコピーしてファイル保存すればOKです)

UiPath 当月ライセンス消費量の調査手順

任意のテナントについて、割当済み・アクティベート済み数ではなく、当月に実際に消費されたライセンス量を確認するための手順です。主な対象は Robot Units (RU)、AI Units (AIU)、Agent Units (AGU) です。

前提

  • UiPath CLI (uip) にログイン済みであること
  • 組織のライセンス消費量を参照できる権限があること
  • platform 拡張が利用可能であること

ログイン状態を確認します。

uip login status --output json

ログイン先と対象が異なる場合は、対象テナントを選択します。

uip login tenant set "<TENANT_NAME>" --output json

当月の消費量を一覧で取得する

<TENANT_NAME> を対象テナント名に置き換え、開始日を当月1日、終了日を翌月1日にします。--unit を指定しないことで、テナントで有効な消費可能ライセンスをすべて一覧取得します。日付は日本時間で指定します。

uip platform licenses consumables get `
  --tenant "<TENANT_NAME>" `
  --start-date 2026-07-01 `
  --end-date 2026-08-01 `
  --output json

出力の見方:

項目 意味
consumedFromTenantPool テナントに予約された対象ライセンスからの実消費量
consumedFromOrgPool テナント予約を超えて組織プールから消費した対象ライセンス量
consumedAmount --mode daily 時の日別・サービス別消費量

実消費量は次で算出します。

各ライセンスの実消費量 = consumedFromTenantPool + consumedFromOrgPool

主なライセンスコード:

コード ライセンス
RU Robot Units
AIU AI Units
AGU Agent Units

特定ライセンスだけを取得する

--unit を指定すると、対象ライセンスに絞り込めます。

uip platform licenses consumables get `
  --tenant "<TENANT_NAME>" `
  --unit AGU `
  --start-date 2026-07-01 `
  --end-date 2026-08-01 `
  --output json

日別の推移を確認する

uip platform licenses consumables get `
  --mode daily `
  --tenant "<TENANT_NAME>" `
  --unit AIU `
  --start-date 2026-07-01 `
  --end-date 2026-08-01 `
  --output json

実行実績も併記する場合

RU消費量と、ロボット実行ジョブ数は別の指標です。実際に実行された件数も確認する場合は、以下を利用します。

uip or jobs list `
  --started-after 2026-07-01T00:00:00+09:00 `
  --started-before 2026-08-01T00:00:00+09:00 `
  --limit 1000 `
  --all-fields `
  --output json

特に RuntimeType = Serverless のホスト名は一時的な実行環境です。ホスト名のユニーク数を、固定ロボットのライセンス数として数えないでください。

実行アカウント別に漏れなく集計する

次のスクリプトはページングを行い、対象期間・全フォルダーのジョブを取得します。LocalSystemAccount ごとに集計するため、確認できた実行アカウントは1アカウントにつき1行で出力されます。アカウントが3種類なら3行、10種類なら10行です。

$start = '2026-07-01T00:00:00+09:00'
$end = '2026-08-01T00:00:00+09:00'
$limit = 1000
$offset = 0
$allJobs = @()

do {
  $raw = uip or jobs list `
    --started-after $start `
    --started-before $end `
    --limit $limit `
    --offset $offset `
    --all-fields `
    --output json | Out-String

  $page = $raw | ConvertFrom-Json
  if ($page.Result -ne 'Success') {
    throw "ジョブ一覧の取得に失敗しました。"
  }

  $items = @($page.Data | Where-Object { $null -ne $_ })
  $allJobs += $items
  if ($page.Pagination.HasMore -and $items.Count -eq 0) {
    throw "次ページがあるにもかかわらずジョブを取得できませんでした。"
  }
  $offset += $items.Count
} while ($page.Pagination.HasMore)

$allJobs |
  Where-Object { $_.LocalSystemAccount } |
  Group-Object LocalSystemAccount |
  Sort-Object Count -Descending |
  ForEach-Object {
    [PSCustomObject]@{
      実行アカウント = $_.Name
      ジョブ数       = $_.Count
      ランタイム種別 = ($_.Group.RuntimeType | Sort-Object -Unique) -join ', '
    }
  } |
  Format-Table -AutoSize

出力例:

実行アカウント                 ジョブ数  ランタイム種別
----------------------------  ------  -----------------------
UIPATH\\TEST.TAROU               3  Unattended
ROBOTUSER                            3  Serverless

ROBOTUSER はServerlessなどが使用するシステム実行アカウントであり、必ずしも人のユーザー名ではありません。人の起動者を判定したい場合は、ジョブの起動元や監査ログを追加確認します。

報告テンプレート

項目
対象テナント <TENANT_NAME>
対象期間 YYYY-MM-01 00:00 JST翌月1日 00:00 JST
RU 実消費量合計 <合計>
AIU 実消費量合計 <合計>
AGU 実消費量合計 <合計>
実行ジョブ数(参考) <件数>
固定ホストで実行したロボット数(参考) <件数>

注意点

  • ライセンス割当数・アクティベート数と、消費量は異なります。今回の主指標は各ライセンスの実消費量です。
  • RU = 0 でも、Serverless や別種のランタイムでジョブが実行されている場合があります。また、AIU や AGU の消費とは独立しています。
  • --end-date は開始日より後の日付にし、月次集計では翌月1日を指定します。
  • CLI に platform 拡張がない場合は、対応する UiPath CLI のバージョンへ更新してから導入します。

実行方法

  1. PowerShell を起動し、次のコマンドで調査対象のテナントに接続します。uip login "--authority" "https://cloud.uipath.com/★組織名" "--tenant" "★テナント名"
  2. 「当月のライセンス消費量を教えてー」と打ち込むだけ

(出力例 - 実行時が月初第一営業日だったので実消費は0になっています)

image.png

uip コマンドで直接調べる

利用可能な Coding Agent が手元にない場合は、PowerShellを起動して uip コマンドを直接打つことでも簡単にライセンス消費量を調べることができます。

<ユニット消費を調べるコマンド例>

uip platform licenses consumables get --tenant "DefaultTenant" --start-date 2026-07-01 --end-date 2026-08-01 --output json

(出力例 --output json)

uip_platform_licenses_consumables.png

(出力例 --output table)

uip_platform_licenses_consumables_table.png

--output オプションで利用可能な出力形式

  • table
  • json
  • yaml
  • plain>

<ジョブを実行したマシン数を調べるコマンド例>

$start = '2026-07-01T00:00:00+09:00'
$end = '2026-08-01T00:00:00+09:00'
$limit = 1000
$offset = 0
$allJobs = @()

do {
  $raw = uip or jobs list `
    --started-after $start `
    --started-before $end `
    --limit $limit `
    --offset $offset `
    --all-fields `
    --output json | Out-String

  $page = $raw | ConvertFrom-Json
  if ($page.Result -ne 'Success') {
    throw "ジョブ一覧の取得に失敗しました。"
  }

  $items = @($page.Data | Where-Object { $null -ne $_ })
  $allJobs += $items
  if ($page.Pagination.HasMore -and $items.Count -eq 0) {
    throw "次ページがあるにもかかわらずジョブを取得できませんでした。"
  }
  $offset += $items.Count
} while ($page.Pagination.HasMore)

$allJobs |
  Where-Object { $_.LocalSystemAccount } |
  Group-Object LocalSystemAccount |
  Sort-Object Count -Descending |
  ForEach-Object {
    [PSCustomObject]@{
      実行アカウント = $_.Name
      ジョブ数       = $_.Count
      ランタイム種別 = ($_.Group.RuntimeType | Sort-Object -Unique) -join ', '
    }
  } |
  Format-Table -AutoSize

(出力例)

image.png

PowerShellのスクリプトサンプル

image.png

上の様な出力でよければ、PowerShellスクリプトでも調べられます。

(Get-UiPathLicenseUsage.ps1)

#Requires -Version 5.1
<#
.SYNOPSIS
    UiPath の組織全体ライセンス利用状況を「Contracted / Activated / Provisioned / Usage%」形式で出力します。

.DESCRIPTION
    uip CLI を用いて、以下3ソースを組織全体で集計し、固定フォーマットの表を作成します。
      - Named User バンドル   : uip platform users licenses available(アカウント集計済み)
      - Unattended 系         : uip platform tenants licenses get(全Enabledテナントを集計)
      - 消費ユニット系(AIU/RU/PLTU/AGU): uip platform licenses consumables get(組織集計済み)

    列の定義(組織全体・②Activated=実消費/実使用):
      ①# Contracted  : 契約数(保有総数)        = TotalUnitsInAccount / Total(Named User)
      ②# Activated   : 実消費/実使用             = Consumed / 消費列合計 / Allocated(Named User=leased)
      ③# Provisioned : 割当済み合計              = Total-Available / Allocated / Allocated(Named User)
      Usage % (③÷①) : プロビジョニング率

.PARAMETER StartDate
    消費ユニット系②の集計開始日 (yyyy-MM-dd)。既定は当月1日(JST)。

.PARAMETER EndDate
    消費ユニット系②の集計終了日 (yyyy-MM-dd)。既定は翌月1日(JST)。

.PARAMETER NamedUserCodes
    Named User 行に集計するユーザーバンドルコード。既定は代表的な5シート。
    契約中の全バンドルは `uip platform users licenses available` で確認できます。

.PARAMETER IncludeAutomationKit
    指定すると AKIT (Automation Kit) も Named User 行に含めます。

.PARAMETER AsMarkdown
    指定すると Markdown テーブルとして出力します(未指定時は Format-Table)。

.EXAMPLE
    .\Get-UiPathLicenseUsage.ps1
    当月の表をコンソールに表示。

.EXAMPLE
    .\Get-UiPathLicenseUsage.ps1 -AsMarkdown | Set-Content report.md -Encoding utf8
    Markdown を report.md に保存。

.EXAMPLE
    .\Get-UiPathLicenseUsage.ps1 -StartDate 2026-01-01 -EndDate 2027-01-01
    集計期間を年間に変更。

.NOTES
    前提: uip にログイン済み / ライセンス参照権限 / platform 拡張が利用可能であること。
#>
[CmdletBinding()]
param(
    [string]   $StartDate,
    [string]   $EndDate,
    [string[]] $NamedUserCodes = @('ATTUNU','RPADEVPRONU','CTZDEVNU','ACNU','TSTNU'),
    [switch]   $IncludeAutomationKit,
    [switch]   $AsMarkdown
)

# uip(ネイティブ)のstderr(更新チェック等)が停止エラー化しないよう Continue のままにする。
# 失敗は各呼び出しの Result 判定と throw で個別に制御する。
$ErrorActionPreference = 'Continue'

# ===== 集計期間(既定=当月, JST) =====
$firstOfMonth = Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0 -Millisecond 0
if (-not $StartDate) { $StartDate = $firstOfMonth.ToString('yyyy-MM-01') }
if (-not $EndDate)   { $EndDate   = $firstOfMonth.AddMonths(1).ToString('yyyy-MM-01') }

# ===== 行 → コード対応 =====
$namedUser = @($NamedUserCodes)
if ($IncludeAutomationKit -and ($namedUser -notcontains 'AKIT')) { $namedUser += 'AKIT' }

$RowMap = [ordered]@{
    'Named User'         = $namedUser
    'Unattended'         = @('UNATT')
    'AI Unit(AIU)'      = @('AIU')
    'Robot Unit(RU)'    = @('RU')
    'Platform Unit(PU)' = @('PLTU')
    'Agent Unit(AU)'    = @('AGU')
}
$ConsumableCodes = @('AIU','RU','PLTU','AGU')
$UserBundleCodes = @('ATTUNU','RPADEVPRONU','CTZDEVNU','ACNU','TSTNU','AKIT')

# ===== uip 呼び出しヘルパー =====
function Invoke-Uip {
    param([Parameter(Mandatory)][string[]]$CliArgs)
    $raw = & uip @CliArgs --output json 2>$null | Out-String
    if (-not $raw.Trim()) { throw "uip $($CliArgs -join ' ') から応答がありません。ログイン状態を確認してください。" }
    $obj = $raw | ConvertFrom-Json
    if ($obj.Result -ne 'Success') {
        throw "uip $($CliArgs -join ' ') が失敗しました: $($obj.Message)"
    }
    return $obj.Data
}

# ===== ログイン確認 =====
$login = (Invoke-Uip @('login','status'))
Write-Verbose "組織: $($login.Organization) / Base: $($login.BaseUrl)"

# ===== 1) 消費ユニット系(組織集計済み) =====
$consumable = @{}
$consData = Invoke-Uip @('platform','licenses','consumables','get','--start-date',$StartDate,'--end-date',$EndDate)
foreach ($g in ($consData | Group-Object Code)) {
    $rows  = @($g.Group)
    $first = $rows[0]
    $perTenant = ($rows | Measure-Object -Property ConsumedFromTenantPool -Sum).Sum `
               + ($rows | Measure-Object -Property ConsumedFromOrgPool -Sum).Sum
    $consumable[$g.Name] = @{
        Contracted  = [double]$first.TotalUnitsInAccount
        Provisioned = [double]$first.Allocated
        Consumed    = [double]$first.ConsumedFromOrgWithoutTenant + [double]$perTenant
    }
}

# ===== 2) Named User バンドル(アカウント集計済み) =====
$userBundle = @{}
foreach ($b in (Invoke-Uip @('platform','users','licenses','available'))) {
    $userBundle[$b.Code] = @{ Total = [double]$b.Total; Allocated = [double]$b.Allocated }
}

# ===== 3) その他ユーザーライセンス系(全テナント集計。Unattended 等) =====
$tenants = @(Invoke-Uip @('admin','tenants','list') | Where-Object { $_.Status -eq 'Enabled' })
$userLic = @{}
foreach ($t in $tenants) {
    foreach ($p in (Invoke-Uip @('platform','tenants','licenses','get',$t.Id))) {
        if (-not $userLic.ContainsKey($p.Code)) {
            $userLic[$p.Code] = @{
                Contracted = [double]$p.TotalUnitsInAccount
                Available  = [double]$p.AvailableForAllocation
                Consumed   = 0.0
            }
        }
        $userLic[$p.Code].Consumed += [double]$p.Consumed
    }
}

# ===== 4) 行ごとに集計 =====
function Get-CodeMetrics {
    param([string]$Code)
    if ($ConsumableCodes -contains $Code -and $consumable.ContainsKey($Code)) {
        $c = $consumable[$Code]
        return @{ Contracted = $c.Contracted; Activated = $c.Consumed; Provisioned = $c.Provisioned }
    }
    elseif ($UserBundleCodes -contains $Code -and $userBundle.ContainsKey($Code)) {
        # Named Userは割当(leased)=実使用とみなす(別途の消費メーター無し)
        $u = $userBundle[$Code]
        return @{ Contracted = $u.Total; Activated = $u.Allocated; Provisioned = $u.Allocated }
    }
    elseif ($userLic.ContainsKey($Code)) {
        $u = $userLic[$Code]
        return @{ Contracted = $u.Contracted; Activated = $u.Consumed; Provisioned = ($u.Contracted - $u.Available) }
    }
    return @{ Contracted = 0.0; Activated = 0.0; Provisioned = 0.0 }
}

$table = foreach ($row in $RowMap.Keys) {
    $ct = 0.0; $ac = 0.0; $pr = 0.0
    foreach ($code in $RowMap[$row]) {
        $m = Get-CodeMetrics $code
        $ct += $m.Contracted; $ac += $m.Activated; $pr += $m.Provisioned
    }
    $usage = if ($ct -gt 0) { '{0:N1}%' -f ($pr / $ct * 100) } else { '-' }
    [PSCustomObject]@{
        'License'        = $row
        '①# Contracted'  = $ct
        '②# Activated'   = $ac
        '③# Provisioned' = $pr
        'Usage % (③÷①)'  = $usage
    }
}

# ===== 出力 =====
if ($AsMarkdown) {
    "<!-- 対象組織: $($login.Organization) / 集計期間(消費ユニット系②): $StartDate 〜 $EndDate (JST) -->"
    "| License | ①# Contracted | ②# Activated | ③# Provisioned | Usage % (③÷①) |"
    "|---|---:|---:|---:|---:|"
    foreach ($r in $table) {
        "| {0} | {1:N0} | {2:N0} | {3:N0} | {4} |" -f `
            $r.'License', $r.'①# Contracted', $r.'②# Activated', $r.'③# Provisioned', $r.'Usage % (③÷①)'
    }
}
else {
    Write-Host "対象組織      : $($login.Organization)"
    Write-Host "集計期間(②)   : $StartDate 〜 $EndDate (JST)"
    Write-Host ""
    $table | Format-Table -AutoSize
}

さいごに

いかがでしたでしょうか。
ライセンス画面をいちいち確かめにいく必要はもうなくなりますね(*´▽`*)
上で紹介した指示書は当月分を調べる雛形ですが、これを一度覚えさせておけば
前月や半期、年次も自然言語で追加オーダーするだけでサクッと取得できます。
PowerShellでuipコマンドさへ実行できればよいので、ロボ化して定時実行してもよさそうですね
最後までお読みいただきありがとうございますm(_ _)m

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?