Graph API Resilience & Privacy Skill
目的
Microsoft Graph を使ったデータ取得/更新を、
- 壊れにくく(429/一時障害に強い)
- 漏らさず(トークン/個人情報をログに出さない)
- 分かりやすく(日本語の失敗UX) 実装できる状態にする。
設計ルール(このリポジトリ方針)
- Graph呼び出しは
src/lib/graphに集約し、UIでfetch()を散らさない - 取得は必要最小限(select/fields絞り込み、ページング前提)
- 監視/一覧更新は差分取得(Modified以降)を優先し、フルスキャンを避ける
エラー分類とユーザー表示(推奨)
401(未認証)
- UI: 「セッションが切れました。再ログインしてください。」
- 対応: MSALで再ログイン導線
403(権限不足)
- UI: 「権限がありません。管理者に連絡してください。」
- 対応: scope/ロール/SharePoint権限の見直し
429(レート制限) / 503(混雑・一時障害)
- UI: 「混雑しています。しばらくしてから再試行してください。」
- 対応: 自動リトライ(上限あり)+ 手動リトライ導線
リトライ方針(必須)
- 429/503 は 指数バックオフ + リトライ上限
Retry-Afterヘッダがあれば最優先で尊重- “永遠に待つ” を避ける(最大試行回数 / 最大待機時間を定義)
ページング・差分取得
- 一覧取得はページング前提(nextLinkの追従)
- “毎回全件” を避ける:
lastModifiedDateTime等の差分キーで取得範囲を絞る
ログ/計測(秘匿)
- 絶対に出さない: アクセストークン、IDトークン、refresh token、Authorizationヘッダ
- 個人情報は最小化: メールアドレス・氏名は原則ログに載せない
- 代わりに出す: リクエスト種別、HTTPステータス、リトライ回数、待機時間、相関ID(あれば)
成果物(このスキルで必ず出す)
- Graphクライアントの共通関数方針(例:
graphFetch()) - 429/503 のリトライ仕様(上限、待機、Retry-After)
- 画面向けエラーメッセージ(日本語)のテンプレ
依頼例
- 「Graphで一覧取得してるけど、429が出る。Retry-After対応のリトライを入れたい」
- 「401/403/429 の時の画面表示と再試行導線を整えたい」
- 「SharePoint Lists の取得を差分更新にしたい(5分間隔で十分)」
References
Converted and distributed by TomeVault — claim your Tome and manage your conversions.