この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft identity platformとGraphの公式資料を確認し、旧記事の「SDKより3〜5秒速い」という未検証値や固定シークレット例を修正しました。検証ステータス:✅ Microsoft公式仕様確認済み
Microsoft Graph SDKを使わず、Invoke-RestMethodでREST APIを直接呼ぶ方法は有効です。ただし「SDK不要=必ず高速」ではありません。依存モジュールを減らせる一方、認証、ページング、再試行、エラー解析を自分で実装します。
Client Credentialsの最小構造
$body = @{
client_id = $ClientId
scope = 'https://graph.microsoft.com/.default'
client_secret = $ClientSecret
grant_type = 'client_credentials'
}
$token = (Invoke-RestMethod -Method Post `
-Uri "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" `
-Body $body).access_token
共有シークレットを使う場合も、コードやGitへ保存しません。長期運用では証明書やフェデレーション資格情報も比較します。
@odata.nextLinkを最後まで追う
一覧APIは1レスポンスで全件返るとは限りません。レスポンスに@odata.nextLinkがある限り、返されたURLをそのまま次の要求へ使います。ページサイズを固定値で推測しないことが重要です。
429はRetry-Afterに従う
Graphが429 Too Many Requestsを返したら、公式ガイダンスどおりRetry-Afterの秒数を待って再試行します。ヘッダーがない場合は指数バックオフを使います。
SDKとRESTの選び分け
| 観点 | 直接REST | Graph SDK |
|---|---|---|
| 依存モジュール | 少ない | 必要 |
| ページング | 自前実装 | 支援あり |
| 再試行 | 自前実装 | ハンドラーあり |
| APIの透明性 | 高い | 抽象化される |
起動時間や処理速度は環境で測り、固定の優劣として書きません。
公式情報
- Microsoft Learn ― Client credentials flow
- Microsoft Learn ― Microsoft Graph データのページング
- Microsoft Learn ― Microsoft Graph 調整ガイド
この記事の更新履歴
- 2026-09-14 追加:RESTとSDKの役割比較、Retry-Afterの扱いを追加。
- 2026-09-14 変更:「SDK不要=高速」という説明から、依存と実装責任のトレードオフへ変更。
- 2026-09-14 削除:内部style_prompt、本文H1、固定ClientSecret、根拠のない3〜5秒短縮値を削除。

