Azure DevOps REST APIのバージョン管理とは?変更点・影響範囲・移行時の確認ポイント

Azure DevOpsのREST APIを使っているなら、まず確認すべき点はシンプルです。すべてのAPIリクエストでapi-versionを明示しているか、-preview付きのバージョンに依存していないか、Azure DevOps Serverのバージョンと利用APIの対応が合っているかを点検してください。

Microsoft Learnの「REST API Versioning for Azure DevOps」は、Azure DevOps REST APIを安全に使い続けるためのバージョン指定ルールを整理した公式情報です。Azure DevOpsのAPIは継続的に進化するため、バージョン指定を曖昧にしたまま運用すると、将来の仕様変更やプレビューAPIの無効化によって、連携アプリ、社内ツール、CI/CDパイプラインが突然失敗する可能性があります。公式ドキュメントでは、すべてのリクエストでAPIバージョンを指定する必要があること、バージョン表記の形式、プレビュー版から正式版へ移行すべきタイミングが示されています。(Microsoft Learn)

目次

Azure DevOps REST APIのバージョン管理で押さえるべき結論

Azure DevOps REST APIのバージョン管理は、新機能を使うためだけの仕組みではありません。実務では、API連携を壊さずに運用するための契約として扱うべきものです。

特に重要なのは、次の4点です。

確認項目実務上の意味放置した場合のリスク
api-versionを毎回指定しているかAPIの仕様を明示して呼び出せる将来の変更でレスポンスや挙動が変わる可能性がある
-previewを使い続けていないかプレビューAPIへの依存を把握できる正式版公開後、プレビュー版が無効化されるとリクエストが拒否される
Azure DevOps ServerのバージョンとAPIバージョンが合っているかオンプレミス環境で対応範囲を判断できる存在しないAPIバージョンを呼び出して失敗する
本番展開前にレスポンス差分を検証しているか仕様変更の影響を事前に確認できるJSON項目の差分やエラー処理漏れで障害につながる

公式ドキュメントでは、APIバージョンは{major}.{minor}[-{stage}[.{resource-version}]]という形式で、例として1.0、1.1、1.2-preview、2.0などが示されています。プレビュー段階では1.0-preview.1のように特定リビジョンを指定でき、正式版公開後はプレビュー版が非推奨となり、一定期間後に無効化される可能性があります。(Microsoft Learn)

何が変わるのか:新機能よりも「運用ルールの再点検」が重要

今回のテーマである「REST API Versioning for Azure DevOps」は、特定のAPIエンドポイントが一斉に変更されるというより、Azure DevOps REST APIを使う管理者・開発者が守るべきバージョン管理の基本を明確にする内容です。

実務での変更点は、次のように捉えると分かりやすいです。

API呼び出しでバージョン指定が前提になる

Azure DevOps REST APIでは、リクエストURIにapi-version={version}を含める形が基本です。Azure DevOps Servicesの場合、公式リファレンスでは次のような形式が示されています。(Microsoft Learn)

GET https://dev.azure.com/{organization}/_apis/{area}/{resource}?api-version={version}

たとえば、プロジェクト一覧を取得するAPIであれば、次のように指定します。

curl -u {username}:{personalaccesstoken} \
  "https://dev.azure.com/{organization}/_apis/projects?api-version=7.1"

ここで重要なのは、api-versionを「なんとなく付ける」のではなく、利用しているAzure DevOps ServicesまたはAzure DevOps Serverでサポートされるバージョンを選ぶことです。

ヘッダー指定とクエリパラメーター指定の両方を理解する

公式ドキュメントでは、APIバージョンはHTTPヘッダーまたはURLクエリパラメーターで指定できると説明されています。ヘッダーではAccept: application/json;api-version=1.0のように指定し、URLでは?api-version=1.0のように指定します。(Microsoft Learn)

実務では、チーム内で指定方法を統一することをおすすめします。

指定方法例向いているケース
URLクエリパラメーター?api-version=7.1curl、PowerShell、CI/CDスクリプト、検証用リクエスト
HTTPヘッダーAccept: application/json;api-version=7.1共通HTTPクライアントやSDKラッパーで制御したい場合

多くの現場では、ログやトラブルシューティングで確認しやすいURLクエリパラメーター方式が扱いやすいです。一方、APIクライアントを自社ライブラリ化している場合は、ヘッダーで一元管理する方法も有効です。

対象者:誰が確認すべきか

Azure DevOps REST APIのバージョン管理は、開発者だけの問題ではありません。Azure DevOpsを業務システムや自動化基盤に組み込んでいる組織では、管理者、開発者、運用担当者がそれぞれ確認すべきポイントがあります。

対象者確認すべき内容
Azure DevOps管理者組織内で利用しているAPI連携、PAT、サービス接続、拡張機能、オンプレミス版のバージョン
アプリ開発者ソースコード内のapi-version、-preview利用、レスポンス項目への依存
DevOpsエンジニアPipeline、PowerShell、Bash、Azure CLI、GitHub Actionsなどの自動化スクリプト
情シス・運用担当社内ツール、監視、レポート出力、棚卸しバッチ、チケット連携
セキュリティ担当古いPAT利用、不要な権限、失敗時ログにトークンが出ていないか

特に注意したいのは、昔作った社内ツールや一度だけ作ったつもりの自動化スクリプトです。担当者が変わったあとも動き続けているAPI連携は、バージョン指定が古いまま放置されやすく、障害時に原因追跡が難しくなります。

影響範囲:どのAPI連携を棚卸しすべきか

Azure DevOps REST APIは、Boards、Repos、Pipelines、Artifacts、Test Plansなど、さまざまな領域で使われます。影響範囲を確認するときは、「どのサービスを使っているか」ではなく、どこからHTTPリクエストを投げているかで棚卸しするのが効率的です。

棚卸し対象になりやすい場所

場所具体例探すべき文字列
ソースコードC#、Python、Node.js、GoなどのAPIクライアント_apis/、api-version、dev.azure.com
CI/CDAzure Pipelines、GitHub Actions、Jenkinscurl、Invoke-RestMethod、az devops
運用スクリプトPowerShell、Bash、バッチファイルPAT、Authorization、Basic
社内ツールチケット集計、ビルド状況表示、承認ワークフローworkitems、builds、release
拡張機能Azure DevOps Extension、社内ポータル連携REST API呼び出し箇所

たとえば、PowerShellでは次のような記述を検索すると、API連携を見つけやすくなります。

Select-String -Path .\* -Pattern "_apis","api-version","dev.azure.com" -Recurse

Gitリポジトリ全体で探す場合は、次のような検索も有効です。

git grep -n "_apis\|api-version\|dev.azure.com"

検索結果が多い場合は、まず-previewを含むものから確認してください。正式版に移行できるAPIであれば、優先度を上げて対応すべきです。

プレビューAPIを使っている場合の注意点

Azure DevOps REST APIでは、1.0-previewや7.1-preview.1のように、プレビュー段階のAPIを指定することがあります。プレビューAPIは新機能を早く使える一方で、仕様が変わる可能性が高く、長期運用には向きません。

公式ドキュメントでは、APIが正式リリースされた後、そのプレビュー版は非推奨となり、12週間後に非アクティブ化できると説明されています。非アクティブ化後は、-previewを指定したリクエストが拒否されます。(Microsoft Learn)

プレビューAPI利用時の判断基準

状況判断
正式版がすでに公開されている正式版へ移行する
正式版がないが業務上必須リスクを明記し、監視と代替手段を用意する
検証目的で一時的に使っている本番コードへ混入させない
レスポンス項目が頻繁に変わる固定的なJSONパースを避け、例外処理を厚くする
外部公開サービスで使っている仕様変更時の影響が大きいため、採用可否を慎重に判断する

プレビューAPIを使う場合は、コードコメントに「なぜpreviewが必要なのか」「正式版が出たら何を確認するのか」を残しておくと、後任者が判断しやすくなります。

このAPIは現時点で正式版がないため preview を利用。
正式版公開後は api-version を更新し、レスポンス項目の差分を確認する。

Azure DevOps ServicesとAzure DevOps Serverで確認ポイントは違う

Azure DevOps REST APIのバージョン管理では、クラウド版のAzure DevOps Servicesと、オンプレミス版のAzure DevOps Serverを分けて考える必要があります。

Azure DevOps Servicesは継続的に更新されるため、公式リファレンスでは最新のリリース版REST APIの利用が推奨されています。一方、Azure DevOps Serverや旧TFSでは、サーバーバージョンによって利用できるREST APIバージョンが異なります。(Microsoft Learn)

環境別の確認ポイント

利用環境確認ポイント
Azure DevOps Services最新の安定版APIを使っているか、古いapi-versionに固定されていないか
Azure DevOps Server 2022以降サーバーの更新レベルと対応APIバージョンが一致しているか
Azure DevOps Server 2019/2020使いたいAPIが対応バージョン内にあるか
TFS 2015〜2018古いAPIドキュメントや互換性の確認が必要
混在環境クラウド前提のスクリプトをオンプレミスへ流用していないか

注意したいのは、Azure DevOps Services向けに作ったAPI連携を、そのままAzure DevOps Server環境へ持ち込むケースです。エンドポイントのホスト名だけ変えても、APIバージョンや利用可能なリソースが一致するとは限りません。

Azure DevOps Serverでは、次のような観点で確認してください。

・現在のAzure DevOps Serverのバージョン
・適用済みUpdateやビルド番号
・利用しているREST APIバージョン
・参照しているMicrosoft Learnのドキュメント表示バージョン
・preview APIの有無

管理者が確認すべき設定と運用ポイント

管理者は、APIのコードそのものよりも、組織全体でどの連携が存在するかを把握する役割が重要です。特に、個人のPATに依存した古いスクリプトは、退職・異動・権限変更で突然止まる原因になります。

管理者向けチェックリスト

チェック項目確認方法
API連携の所有者が明確かリポジトリ、Pipeline、社内ツール台帳を確認
個人PATに依存していないか認証情報の管理場所を確認
不要なプレビューAPIが残っていないか-previewでコード検索
APIバージョンが古すぎないかapi-version=でコード検索
障害時の通知先があるかPipeline通知、監視、ログ出力を確認
本番反映前の検証環境があるかステージング組織やテストプロジェクトで確認

APIバージョンの見直しは、セキュリティ点検や棚卸しと相性が良い作業です。単にapi-versionを書き換えるだけでなく、認証方式、権限、ログ出力、失敗時のリトライも合わせて見直すと、運用リスクを減らせます。

開発者が確認すべき実装ポイント

開発者は、APIバージョンを「リクエストごとに直書き」するのではなく、設定値として一元管理することをおすすめします。複数箇所にapi-version=7.0やapi-version=7.1-previewが散らばっていると、移行時に漏れが発生しやすくなります。

悪い例:APIバージョンを各所に直書きする

var url = $"https://dev.azure.com/{org}/_apis/projects?api-version=7.0";

この書き方でも動作はしますが、複数APIに広がると変更が難しくなります。

良い例:共通設定として管理する

public static class AzureDevOpsApiSettings
{
    public const string ApiVersion = "7.1";
}

var url = $"https://dev.azure.com/{org}/_apis/projects?api-version={AzureDevOpsApiSettings.ApiVersion}";

さらに実務では、API領域ごとにバージョンを分けた方が安全な場合もあります。すべてのAPIが同じバージョンで同じように動くとは限らないためです。

public static class AzureDevOpsApiVersions
{
    public const string Core = "7.1";
    public const string WorkItemTracking = "7.1";
    public const string Git = "7.1";
    public const string Pipelines = "7.1-preview.1";
}

previewを使う場合は、定数名やコメントで目立たせておくと、棚卸し時に見落としにくくなります。

移行時に見るべきポイント

APIバージョンの移行では、単にリクエストが成功するかだけを見るのは不十分です。実際には、レスポンスの項目、型、ページング、エラーコード、権限チェックの違いが影響することがあります。

移行テストで確認する項目

確認項目具体的に見ること
HTTPステータス200、201、204だけでなく、400、401、403、404、429も確認
レスポンスJSON必須として扱っている項目が存在するか
ページングcontinuationTokenなどの扱いが変わっていないか
フィルター条件クエリパラメーターの解釈が変わっていないか
権限同じPATやOAuthスコープで取得できるか
エラー処理失敗時にログが十分か、再試行すべきか
パフォーマンス大量データ取得時にタイムアウトしないか

特に、JSONを厳密にクラスへマッピングしているアプリでは、レスポンス項目の追加や欠落で例外が出ることがあります。移行前後のレスポンスを保存し、差分を比較すると安全です。

curl -s "https://dev.azure.com/{organization}/_apis/projects?api-version=7.0" > before.json
curl -s "https://dev.azure.com/{organization}/_apis/projects?api-version=7.1" > after.json

差分確認には、jqで整形してから比較すると見やすくなります。

jq . before.json > before.pretty.json
jq . after.json > after.pretty.json
diff before.pretty.json after.pretty.json

展開時の注意点:一括変更より段階的な切り替えが安全

APIバージョンの変更は、見た目には小さな修正です。しかし、Azure DevOps REST APIはビルド、リリース、作業項目、リポジトリ、権限管理などに関わることが多く、影響範囲が広がりやすいです。

本番反映では、次の順序で進めると失敗を減らせます。

手順実施内容
現状把握既存コードからapi-versionと-previewを棚卸しする
優先順位付け本番影響が大きいAPI、preview利用API、古いAPIから対応する
検証テスト環境でレスポンス差分とエラー処理を確認する
段階展開一部プロジェクト、低リスクジョブから切り替える
監視失敗率、APIレスポンス時間、Pipeline失敗を確認する
文書化利用API、バージョン、認証方式、所有者を記録する

避けたいのは、全リポジトリのapi-versionを一括置換して、そのまま本番反映することです。APIによってサポート状況やレスポンスが異なる場合があるため、最低限、主要なAPIごとに疎通確認を行いましょう。

失敗しやすいポイント

Azure DevOps REST APIのバージョン管理でよくある失敗は、技術的に難しい部分ではなく、運用上の見落としです。

api-versionが指定されていない

古いサンプルコードや社内メモをもとに作ったスクリプトでは、api-versionが抜けていることがあります。公式リファレンスでは、APIの進化によってアプリやサービスが壊れるのを避けるため、すべてのAPIリクエストでapi-versionを含めるべきと説明されています。(Microsoft Learn)

previewを正式運用で使い続ける

検証時に便利だった-previewを、そのまま本番に入れてしまうケースです。正式版が公開されたAPIでは、preview版が非推奨となり、将来的に拒否される可能性があります。(Microsoft Learn)

Azure DevOps ServicesとServerを同じ扱いにする

Azure DevOps Servicesでは使えるAPIでも、Azure DevOps Serverではバージョンや更新レベルによって使えない場合があります。オンプレミス版では、サーバーバージョンとREST APIバージョンの対応を確認する必要があります。(Microsoft Learn)

APIバージョンだけ変えてレスポンス検証をしない

HTTP 200が返っても、業務ロジックが期待する項目が変わっていれば障害になります。特に、作業項目、ビルド結果、リリース情報、承認状態などを集計しているツールでは、レスポンス差分の確認が重要です。

実務でおすすめの管理方法

APIバージョン管理を属人化させないために、次のような運用にしておくと保守しやすくなります。

API利用台帳を作る

大げさな管理表である必要はありません。最低限、次の項目を記録しておくと、更新時の影響調査が楽になります。

項目記入例
利用システムビルド結果集計バッチ
所有者DevOpsチーム
API領域Build、Work Item Tracking
エンドポイント_apis/build/builds
APIバージョン7.1
preview利用なし
認証方式PATまたはOAuth
実行場所Azure Pipelines
影響範囲日次レポート、Teams通知

preview利用を定期レビューする

月次または四半期ごとに、-previewを含むコードを検索するだけでも効果があります。

git grep -n -- "-preview"

検索結果が出たら、次の順に判断します。

判断対応
正式版がある正式版へ移行
正式版がない利用理由と代替策を記録
使われていない削除または無効化
不明所有者を確認し、分からなければ検証環境で停止テスト

APIクライアントを共通化する

複数のツールがAzure DevOps REST APIを呼び出している場合、認証、URL生成、APIバージョン、リトライ、ログ出力を共通化すると、変更に強くなります。

たとえば、共通クライアントに次の処理を持たせます。

・ベースURLの生成
・api-versionの付与
・Authorizationヘッダーの設定
・429や一時的な5xxのリトライ
・エラー時のログ出力
・preview API利用時の警告ログ

小規模なスクリプトでも、URLを文字列連結で散らばらせないだけで、将来の移行コストを下げられます。

すぐに実施すべき確認アクション

Azure DevOps REST APIを使っている組織は、まず次の順番で確認してください。

  1. リポジトリ、Pipeline、運用スクリプトから_apisとapi-versionを検索する
  2. api-versionが未指定のリクエストを修正する
  3. -previewを使っているAPIを一覧化する
  4. 正式版へ移行できるAPIは、検証環境で差分確認する
  5. Azure DevOps Serverを使っている場合は、サーバーバージョンと対応APIバージョンを確認する
  6. 本番反映後に失敗率、ログ、Pipeline実行結果を確認する
  7. 利用API、バージョン、所有者を台帳化する

最初から完璧なAPI管理体制を作る必要はありません。まずは、api-version未指定と-preview依存をなくすことが、最も効果の高い第一歩です。

まとめ:Azure DevOps REST APIは「明示的なバージョン指定」が安全運用の基本

Azure DevOps REST APIのバージョン管理で最も重要なのは、APIバージョンを明示し、プレビュー版への依存を放置しないことです。

管理者は組織内のAPI連携を棚卸しし、開発者はコード内のapi-versionとレスポンス依存を確認しましょう。Azure DevOps Serverを利用している場合は、サーバーバージョンとREST APIバージョンの対応確認も欠かせません。

次に取るべき行動は明確です。まず、リポジトリとPipelineで_apis、api-version、-previewを検索し、どの連携がどのAPIバージョンに依存しているかを見える化してください。そこから正式版への移行、検証、段階展開を進めれば、Azure DevOps REST APIの変更に強い運用へ近づけます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次