Microsoft Graph SDKなしでユーザー一覧を取得する ― REST API・ページング・429対策

Microsoft 365・Azureカテゴリを表すパンダのイラスト Microsoft 365・Azure

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft Graphのapp-only認証とスロットリング公式資料を確認し、旧記事の性能値と危険な並列化前提を修正しました。

検証ステータス:✅ Microsoft公式仕様確認済み

Microsoft Graph PowerShell SDKを使わず、Invoke-RestMethodでREST APIを直接呼ぶことは可能です。重要なのは「SDKを外せば速くなる」と決めつけることではなく、認証、ページング、スロットリング、失敗時の再開を自分で実装する点です。

app-only認証の基本

クライアント資格情報フローでは、トークンエンドポイントへclient_id、client_secret、grant_type=client_credentialsを送り、Microsoft Graph用のscopeにはhttps://graph.microsoft.com/.defaultを指定します。アプリには事前に必要なApplication permissionと管理者同意が必要です。

ユーザー一覧は@odata.nextLinkを最後までたどる

$headers = @{ Authorization = "Bearer $AccessToken" }
$url = 'https://graph.microsoft.com/v1.0/users?$select=id,displayName,userPrincipalName&$top=999'
$users = @()

do {
    $r = Invoke-RestMethod -Method Get -Uri $url -Headers $headers
    $users += $r.value
    $url = $r.'@odata.nextLink'
} while ($url)

$users

$topを指定しても全件が一度に返るとは限りません。レスポンスに@odata.nextLinkがある間は、そのURLをそのまま使って次ページを取得します。

並列化より先に429へ対応する

Microsoft Graphは過剰な呼び出しに対してHTTP 429を返します。公式ガイダンスでは、レスポンスのRetry-Afterを待って再試行することが基本です。固定10秒待機より、サービスが返す待機時間を優先します。

ユーザーごとにlicenseDetailsを並列取得する設計は、テナント規模やAPI負荷によっては逆に429を増やします。まず必要な属性を$selectでまとめて取得できないか検討し、追加APIが必要な場合だけ並列度を小さく始めます。

SDKなし運用で増える責任

  • アクセストークンの取得と更新
  • ページング
  • 429・5xxの再試行
  • 権限設計
  • エラー詳細と失敗対象の保存

SDKの有無は目的ではありません。軽量な単機能スクリプトにはREST直呼びが向き、認証・再試行・型付きコマンドレットを含む保守性を重視するなら公式SDKも比較対象です。

公式情報

この記事の更新履歴

  • 2026-09-14 追加:app-only認証、@odata.nextLink、Retry-Afterを使う実装ポイントを追加。
  • 2026-09-14 変更:「SDK不要=高速」という構成から、REST直呼びの運用責任を含む実務記事へ変更。
  • 2026-09-14 削除:内部執筆指示、本文H1、根拠のない60〜70%高速化・規模別性能断定を削除。

文書情報

記事タイトル
Microsoft Graph SDKなしでユーザー一覧を取得する ― REST API・ページング・429対策
作成日
更新日
Source URL
https://papanda925.com/?p=5749

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました