Lesstep
Azure DevOps Services・Server・プルリクエスト・2026年10月25日

Azure DevOps:チームに割り当てられたプルリクエストを見つける

Azure DevOps は、人の代わりにチームやグループへレビューを頼めます。そのときプルリクエストのレビュー担当者はグループ全体で1つになり、メンバーの投票がそのグループの分として数えられます。自分の ID で探す一覧には、こうしたプルリクエストが出てきません。Azure DevOps Server 2022 で確かめました。

グループがレビュー担当者になる仕組み

誰かがチームやグループをレビュー担当者に加えるか、ブランチ ポリシー「Automatically included reviewers」がグループを指定しているときです。Microsoft のブランチ ポリシーの説明では、このポリシーのレビュー担当者に「人とグループ」を加えます。ポリシーが Required なら、加えたグループそれぞれで少なくとも1人の承認が必要です。同じページは、何人かを必須のレビュー担当者にしつつ承認は1人でよいときにグループを使うよう勧めています。Microsoft の Get Pull Requests の応答例にも、レビュー担当者がプロジェクトの既定のチームだけのプルリクエストがあります。

プルリクエストの reviewers の中で、グループの項目は isContainer が true です。グループ自身は投票しません。メンバーが投票すると、そのメンバーが votedFor にグループの名前を持つレビュー担当者として加わり、グループの投票もそれに合わせて変わります。私たちのサーバーでは、メンバー1人が承認した後、チームの投票は 10 になりました。

自分のレビュー担当者 ID では見つからない理由

REST の定義で searchCriteria.reviewerId は「この ID をレビュー担当者に持つプルリクエストを探す」もので、その ID だけに一致します。Azure DevOps Server 2022 で(2026年10月25日)、レビュー担当者がプロジェクトの既定のチームだけのプルリクエストを作りました。サインインしているユーザーはそのチームのメンバーです。ユーザーの ID で searchCriteria.reviewerId を付けると、リポジトリでもプロジェクトでも何も返りませんでした。チームの ID なら、そのプルリクエストが返りました。

スクリプトで一覧にする

  1. 自分の ID:GET {organization}/_apis/connectionData の authenticatedUser の id。
  2. プロジェクトでの自分のチーム:GET {organization}/_apis/projects/{project}/teams?$mine=true&api-version=7.0。Code(Read & write)のスコープだけのトークンで、ユーザーのチームが返りました。
  3. 自分の分とチームごとに1回ずつ:GET {organization}/{project}/_apis/git/pullrequests?searchCriteria.status=active&searchCriteria.reviewerId={id}&api-version=7.0。結果はリポジトリとプルリクエストの ID で重ねずにまとめます。
  4. まだ待っているか:自分が名前でレビュー担当者なら、自分の vote が 0 で hasDeclined が true でないこと。チームだけがレビュー担当者なら、チームの vote が 0(まだ誰も投票していない)こと。isDraft が true のプルリクエストは、まだレビューの準備ができていません。

同じサーバーで、Code だけのトークンは組織全体のチームの一覧(_apis/teams?$mine=true)を読めませんでした(401)。

チームではないセキュリティ グループ

[Project]\Release Approvers のようなセキュリティ グループには、スコープがもう1つ要ります。ID の API(_apis/identities)は、Code だけ、Code と Project のトークンには 401 を返し、Identity (Read)(vso.identity)も付けたトークンには答えました。そのトークンで、Azure DevOps Server 2022 では次のとおりです。

  1. 自分のグループ:GET {collection}/_apis/identities?identityIds={id}&queryMembership=Expanded&api-version=7.0。memberOf に、自分が入っている全グループの記述子(descriptor)が入れ子の分も含めて並びます(試験の利用者では8つ。プロジェクトのチームとグループ、コレクション全体のグループ)。
  2. その id と名前:GET {collection}/_apis/identities?descriptors={d1},{d2},…&queryMembership=None&api-version=7.0。プロジェクトのグループは [Project]\Group という名前で、id はプルリクエストのレビュー担当者(isContainer が true)の id と同じです。記述子は数個ずつ送ってください。IIS は既定で 2,048 文字を超える問い合わせ文字列を断ります。
  3. プロジェクトのグループごとにもう1回、チームと同じように問い合わせます。グループの vote はメンバーの投票に従います。メンバーの1人が承認すると、その人がレビュー担当者に加わり、両方とも 10 になりました。

逆向きは使えませんでした。グループの展開した memberIds に利用者は出ず、Graph の API は 401(Graph のスコープのトークンでは 404)でした。Azure DevOps Services では ID の API が別のホスト(vssps.dev.azure.com)にあり、そちらは試していません。

IntelliJ IDEA と Rider でチームに割り当てられたプルリクエストを

Azure DevOps Pull Requests は、Lesstep が作っている JetBrains IDE(2024.1 以降)と Android Studio のプラグインです。自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも使えます。1.0.47 からは「自分の投票待ち」と「自分かチームがレビュー担当」に、自分のチームに頼んでいるプルリクエストも出ます。チームは上の方法で読み、IDE で開いているリポジトリ、そのプロジェクト、組織の全プロジェクトから集めます。チームへの依頼は、メンバーの誰かが投票すると待ちから外れます。1.0.48 からは、Azure DevOps Server で Identity (Read) も付けたトークンなら、自分が入っているそのプロジェクトのセキュリティ グループ(入れ子も)も数えます。Azure DevOps Services と、そのスコープが無いトークンでは対象外です。ツールウィンドウを開いている間は5分ごとに一覧を読み直し、新しいレビュー依頼を知らせます。レビューの受け箱とブランチ ポリシーは無料、投票・コメント・完了・作成は Pro(30日間の無料試用つき)です。画面は日本語です。

JetBrains Marketplace で入れる

Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:通知と、メールが届かない時 · 承認が「最低レビュー担当者数」に数えられない理由 · 必須のレビュー担当者とパスの絞り込み · ポリシーを回避する明示的なオーバーライド · IntelliJ IDEA で使える Azure DevOps のプルリクエストのプラグインの比較 · English