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 なら、そのプルリクエストが返りました。
スクリプトで一覧にする
- 自分の ID:
GET {organization}/_apis/connectionDataのauthenticatedUserのid。 - プロジェクトでの自分のチーム:
GET {organization}/_apis/projects/{project}/teams?$mine=true&api-version=7.0。Code(Read & write)のスコープだけのトークンで、ユーザーのチームが返りました。 - 自分の分とチームごとに1回ずつ:
GET {organization}/{project}/_apis/git/pullrequests?searchCriteria.status=active&searchCriteria.reviewerId={id}&api-version=7.0。結果はリポジトリとプルリクエストの ID で重ねずにまとめます。 - まだ待っているか:自分が名前でレビュー担当者なら、自分の
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 では次のとおりです。
- 自分のグループ:
GET {collection}/_apis/identities?identityIds={id}&queryMembership=Expanded&api-version=7.0。memberOfに、自分が入っている全グループの記述子(descriptor)が入れ子の分も含めて並びます(試験の利用者では8つ。プロジェクトのチームとグループ、コレクション全体のグループ)。 - その id と名前:
GET {collection}/_apis/identities?descriptors={d1},{d2},…&queryMembership=None&api-version=7.0。プロジェクトのグループは[Project]\Groupという名前で、id はプルリクエストのレビュー担当者(isContainerが true)の id と同じです。記述子は数個ずつ送ってください。IIS は既定で 2,048 文字を超える問い合わせ文字列を断ります。 - プロジェクトのグループごとにもう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日間の無料試用つき)です。画面は日本語です。
Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:通知と、メールが届かない時 · 承認が「最低レビュー担当者数」に数えられない理由 · 必須のレビュー担当者とパスの絞り込み · ポリシーを回避する明示的なオーバーライド · IntelliJ IDEA で使える Azure DevOps のプルリクエストのプラグインの比較 · English