Azure bicep-deploy-commonの自動バージョニング対応とは?Nerdbank.GitVersioning導入の影響と確認ポイント

2026年5月21日扱いで確認したい「Microsoft Azure documentation update: Add Nerdbank.GitVersioning auto-versioning for bicep-deploy-common」は、Azureのリソース仕様変更ではなく、@azure/bicep-deploy-common のパッケージ公開時のバージョン付けを自動化する変更です。結論から言うと、開発者は今後 package.jsonversion を手作業で編集せず、version.json と Git のコミット履歴をもとに Nerdbank.GitVersioning がバージョンを計算する運用になります。元となる Azure/bicep-deploy の PR は 2026年5月20日に main へマージされています。(GitHub)

この変更で特に確認すべきなのは、CI/CD の checkout が浅いクローンになっていないか、公開ワークフローで npm run stamp-versionnpm run reset-version が正しく動くか、そして依存側が 0.0.6 前提の固定バージョンや許可リストを持っていないかです。Bicep テンプレートそのものの書き方が変わる更新ではありませんが、パッケージ公開、リリース管理、ロックファイル、社内ミラー運用には影響が出る可能性があります。

目次

Microsoft Azure documentation update: Add Nerdbank.GitVersioning auto-versioning for bicep-deploy-common の概要

今回の更新は、Azure/bicep-deploy リポジトリ内の packages/bicep-deploy-common に対して、Nerdbank.GitVersioning による自動バージョニングを追加するものです。Nerdbank.GitVersioning は、version.json と Git の履歴から SemVer 互換のバージョンを生成し、NPM パッケージなどにもバージョン情報をスタンプできるツールです。(GitHub)

@azure/bicep-deploy-common は、bicep-deploy の GitHub Action や Azure DevOps Task で使われる共通コードのパッケージです。PR上の package.json では、説明として「Common Code for bicep-deploy (GitHub Action/ADO Task)」と記載されています。(GitHub)

重要なのは、この更新が Azure の本番リソースや Bicep 構文を直接変更するものではない点です。影響の中心は、@azure/bicep-deploy-common をビルド・パック・公開するリリース工程にあります。

何が変わったのか

変更の中心は、package.json の固定バージョンを人が更新する方式から、Git 履歴に基づいて公開時にバージョンを計算する方式へ移行したことです。PRの説明では、version.jsonnbgv-setversionupload-package ワークフローに組み込み、@azure/bicep-deploy-common のパッチ番号を packages/bicep-deploy-common/ にスコープした commit height から計算するとされています。(GitHub)

項目変更前変更後
バージョン管理package.jsonversion を手作業で更新version.json と Git 履歴から自動計算
package.jsonversion0.0.60.0.0-placeholder
パッチ番号手作業または従来ワークフロー依存対象パッケージ配下の commit height から算出
CI/CD通常の checkout で足りる可能性があったfetch-depth: 0 による完全な Git 履歴が必要
開発者の作業バージョン欄を直接編集する可能性ありpackage.jsonversion は編集しない
minor / major 更新手作業で package.json を更新version.jsonversion を更新

PRの最終差分では、packages/bicep-deploy-common/version.json が追加され、version0.1pathFilters"."publicReleaseRefSpec^refs/heads/main$ になっています。(GitHub)

また、当初の説明では base 0.0versionHeightOffset 6 を使う案が示されていましたが、レビュー後のコミットで version.json0.1 に変更され、versionHeightOffset は外されています。PR上でも、既存公開済みパッケージとの衝突を避けるため 0.1.x から始める方向へのレビューコメントと、その後の修正が確認できます。(GitHub)

version.json の役割

今回追加された version.json は、Nerdbank.GitVersioning がどのようにバージョンを計算するかを決める設定ファイルです。最終的な内容は、概ね次の考え方です。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
  "version": "0.1",
  "pathFilters": [
    "."
  ],
  "publicReleaseRefSpec": [
    "^refs/heads/main$"
  ]
}

version0.1 なので、公開されるパッケージは 0.1.<commitHeight> のような形で計算されます。Nerdbank.GitVersioning の FAQ では、git height は HEAD から、現在の major/minor を設定した起点までのコミット数として説明されています。(DotNet)

pathFilters"." になっている点も重要です。この version.jsonpackages/bicep-deploy-common 配下に置かれているため、バージョンのパッチ番号はこのパッケージに関係する変更にスコープされます。PR内の VERSIONING.md でも、pathFilters: ["."] により、リポジトリ内の別の場所の変更ではこのパッケージのパッチ番号が増えないと説明されています。(GitHub)

publicReleaseRefSpec は、どの ref を「公開リリース」として扱うかを決める設定です。今回の設定では main ブランチだけがクリーンな X.Y.Z 形式の公開バージョンになり、それ以外のブランチでは Git SHA を含むサフィックス付きのバージョンになる想定です。(GitHub)

package.json を手で編集しない運用に変わる

開発者にとって最も分かりやすい変更は、packages/bicep-deploy-common/package.jsonversion0.0.6 から 0.0.0-placeholder に変わったことです。あわせて、stamp-versionreset-version の npm script が追加されています。(GitHub)

"scripts": {
  "typecheck": "tsc --noEmit",
  "build": "npm run typecheck && tsdown --config ./tsdown.config.mts",
  "stamp-version": "nbgv-setversion",
  "reset-version": "nbgv-setversion --reset"
}

通常の開発では、package.jsonversion を見て「現在の公開予定バージョン」を判断しないようにする必要があります。リポジトリ上の値はプレースホルダーであり、実際の公開バージョンはワークフロー実行時に nbgv-setversion によって一時的に書き込まれます。

この設計には、古い固定バージョンを誤って公開するリスクを減らす狙いがあります。PRで追加された VERSIONING.md では、package.jsonversion は意図的に sentinel value として 0.0.0-placeholder に設定され、公開ワークフローで上書きされ、パッケージング後に戻されると説明されています。(GitHub)

upload-package ワークフローで変わる処理

.github/workflows/upload-package.yml では、Nerdbank.GitVersioning が commit height を計算できるように、checkout に fetch-depth: 0 が追加されました。GitHub Actions の浅いクローンでは十分な履歴が取得できず、Git 履歴に基づくバージョン計算が正しく動かない可能性があるためです。(GitHub)

ワークフローの流れは、次のように変わります。

順序処理確認ポイント
1リポジトリを checkoutfetch-depth: 0 で完全な履歴を取得する
2npm ci を実行nerdbank-gitversioning が devDependency として入る
3npm run stamp-versionpackage.json に実際の公開バージョンを一時反映
4build / packnpm pack の出力から filename と version を取得
5npm run reset-versionpackage.json0.0.0-placeholder に戻す
6パッケージをアップロード生成された tarball のバージョンを使う

PRでは、Stamp version (Nerdbank.GitVersioning) ステップとして npm run stamp-version が追加され、パッケージング後には Reset version ステップで npm run reset-versionalways() 条件付きで実行されるようになっています。(GitHub)

この always() は実務上かなり重要です。途中で build や pack が失敗しても、作業ツリーにスタンプ済みのバージョンが残りにくくなります。ローカル検証や self-hosted runner で作業ディレクトリを再利用する場合は、特に差分の残留に注意が必要です。

管理者が確認すべき影響範囲

Azure 管理者や DevOps 管理者は、Azure のデプロイ設定そのものよりも、CI/CD と依存管理の確認を優先すべきです。

確認対象見るべきポイント放置した場合のリスク
GitHub Actions / Azure DevOps Pipeline完全な Git 履歴を取得できるかcommit height が計算できず、バージョン生成が失敗する
パッケージ許可リスト0.0.6 固定になっていないか0.1.x 系の取り込みがブロックされる
lockfile / 社内ミラー新しいバージョンを取得できるかビルド環境だけ古いパッケージを使い続ける
release note / 監査ログ実際の公開バージョンをどこから取得するかpackage.json の placeholder を誤って記録する
ブランチ運用main 以外から公開していないかサフィックス付きバージョンになる、または期待と異なる公開形式になる

特に、社内で GitHub リポジトリをミラーしている場合や、CIで sparse checkout、shallow clone、手動 tarball 生成を行っている場合は注意が必要です。Nerdbank.GitVersioning は Git 履歴を前提にバージョンを計算するため、ソースコードだけをコピーした環境では同じ結果にならない可能性があります。

開発者がやるべき確認

開発者は、まず「どのファイルを触るべきか」を整理すると失敗を減らせます。

やりたいこと触るファイル・コマンド注意点
通常の修正を入れるソースコードを変更するだけpatch 番号は自動で進む
patch を手動で上げたい原則不要package.jsonversion は編集しない
minor を上げたいversion.jsonversion0.2 などに変更patch height は新しい minor で再計算される
major を上げたいversion.jsonversion1.0 などに変更破壊的変更の扱いとリリースノートを合わせる
ローカルで確認したいnpx nbgv get-versionpackages/bicep-deploy-common 配下で実行する
tarball を検証したいstamp-version → build → pack → reset-versionreset を忘れると作業ツリーに差分が残る

PRで追加された VERSIONING.md では、ローカル確認用に npx nbgv get-version を実行し、NpmPackageVersion を確認する方法が案内されています。また、手元で npm run stamp-versionnpm run buildnpm packnpm run reset-version を順に実行する検証手順も示されています。(GitHub)

実務では、レビュー時に package.jsonversion 変更が含まれていたら、まず不要な手作業変更ではないか確認しましょう。今回の変更後は、version の直接編集は「親切な修正」ではなく、リリースワークフローを壊す可能性がある変更になります。

移行時に起きやすい失敗

package.json の placeholder を実バージョンだと誤解する

最も起きやすいのは、0.0.0-placeholder を見て「パッケージが 0.0.0 に戻った」と判断してしまうことです。これは公開用の実バージョンではありません。実際のバージョンは、公開ワークフロー内で nbgv-setversion が書き込んだ値を npm pack が読み取ります。

CIログ、生成された .tgznpm pack の JSON 出力、または npx nbgv get-versionNpmPackageVersion を確認してください。

shallow clone のままにしている

GitHub Actions の actions/checkout は、設定によっては履歴が浅い状態になります。今回のワークフローでは fetch-depth: 0 が明示されましたが、社内で同等の処理を別パイプラインに移植している場合は、同じ設定を忘れやすいです。(GitHub)

特に Azure DevOps Pipeline に置き換えている場合は、checkout の fetch depth 設定を確認してください。履歴が不足すると、commit height の計算結果が期待とズレたり、バージョン計算に失敗したりする可能性があります。

main 以外から公開している

publicReleaseRefSpec^refs/heads/main$ のみです。つまり、クリーンな公開バージョンを作る前提は main ブランチです。リリースブランチやタグから公開する運用に変える場合は、version.jsonpublicReleaseRefSpec も設計し直す必要があります。

この設定を見落とすと、意図せず -g<sha> のようなサフィックス付きバージョンになり、パッケージ利用側のバージョン制約や社内ポリシーに引っかかる可能性があります。

パッケージ外の変更で patch が進むと思い込む

pathFilters によって、バージョン計算は packages/bicep-deploy-common にスコープされています。リポジトリの別ディレクトリだけを変更しても、このパッケージの patch 番号は進まない設計です。PR内の説明でも、pathFilters により他の場所の変更ではこのパッケージの patch 番号が増えないとされています。(GitHub)

これはモノレポでは合理的ですが、「リポジトリにコミットが増えたら必ず全パッケージのバージョンも上がる」と考えているチームでは認識のズレが出ます。リリースノートや監査手順では、「どのパスの変更がどのパッケージのバージョンに反映されるか」を明確にしておくべきです。

依存している側は何を見ればよいか

@azure/bicep-deploy-common を直接または間接的に利用している場合は、まず依存関係の指定を確認してください。

固定バージョンで 0.0.6 を参照している場合、新しい 0.1.x 系は自動では入りません。^0.0.6 のような指定でも、SemVer 上は 0.1.x へ広がらないケースがあります。利用側で更新を取り込むには、依存バージョンの明示的な変更や lockfile の更新が必要になる可能性があります。

一方で、この変更はパッケージのバージョニング方法に関するものです。PR上で確認できる主な変更は、ワークフロー、version.jsonpackage.json、VERSIONING/CONTRIBUTING の更新であり、Azure リソースのデプロイ挙動そのものを変える内容としては示されていません。(GitHub)

そのため、確認の優先順位は次の順で考えると実務的です。

優先度確認内容判断基準
ビルドや公開が失敗しないかCIで nbgv-setversionnpm pack が成功する
依存バージョンを取得できるかlockfile、社内レジストリ、許可リストが 0.1.x を許容する
リリース監査に残す値package.json ではなく、生成された package version を記録する
main 以外の公開運用publicReleaseRefSpec と実際のリリースブランチが一致する
Bicep テンプレート修正今回の変更だけなら通常は不要

展開前のチェックリスト

本番に近いリリース工程で使っている場合は、次の順で確認すると安全です。

  1. packages/bicep-deploy-common/package.jsonversion を手で戻そうとしていないか確認する
  2. CIの checkout が完全な履歴を取得しているか確認する
  3. npm ci 後に nerdbank-gitversioning が使えるか確認する
  4. npm run stamp-version 後の package.json に期待するバージョンが入るか確認する
  5. npm pack の出力バージョンと tarball 名を確認する
  6. npm run reset-version 後に 0.0.0-placeholder に戻るか確認する
  7. 依存側の lockfile、社内ミラー、パッケージ許可リストを更新する
  8. リリースノートでは 0.0.0-placeholder ではなく、実際の公開バージョンを記録する

ローカルで確認する場合は、次のような流れが分かりやすいです。

cd packages/bicep-deploy-common

npx nbgv get-version
npm run stamp-version
npm run build
npm pack
npm run reset-version

reset-version 後に差分が残る場合は、生成物や lockfile、ビルド成果物が意図せず変更されていないか確認してください。

今回の変更をどう評価すべきか

この更新の価値は、単に「バージョン番号を自動で増やす」ことではありません。リリース工程で本当に重要なのは、どのコミットからどのパッケージが作られたかを追跡しやすくすることです。

手作業のバージョン更新では、次のような問題が起きがちです。

  • 修正は入ったが package.jsonversion を上げ忘れる
  • 逆に、バージョンだけ上げて実体の変更が分かりにくくなる
  • 複数人の PR で version 更新が衝突する
  • 公開済みバージョンとの重複に気づくのが遅れる
  • リリース後に、どのコミット由来のパッケージか追跡しにくい

Nerdbank.GitVersioning は、Git 履歴をもとに一意なバージョンを生成し、タグやブランチ名に依存しすぎない再現性を重視する設計です。公式リポジトリでも、各コミットに一意で SemVer に適合するバージョンを生成できることや、タグへの依存を避けられることが特徴として説明されています。(GitHub)

ただし、自動化されるからこそ、運用ルールは明確にする必要があります。package.jsonversion を見て判断しない、浅い clone でビルドしない、minor/major は version.json で管理する、という基本をチーム内で共有しておくことが重要です。

まず対応すべきこと

今回の Microsoft Azure documentation update: Add Nerdbank.GitVersioning auto-versioning for bicep-deploy-common は、Azure 利用者全員が即座に設定変更すべき更新ではありません。優先して対応すべきなのは、@azure/bicep-deploy-common のビルド、公開、依存管理に関わる管理者と開発者です。

まずは、自分たちの環境で package.jsonversion を参照している処理がないかを確認してください。次に、CI/CD が完全な Git 履歴を取得できるか、npm run stamp-versionnpm run reset-version が期待通り動くかを検証します。最後に、依存側の lockfile や社内レジストリのルールが 0.1.x 系のバージョンを受け入れられるかを確認すれば、移行時のトラブルをかなり減らせます。

この変更は、Bicep デプロイそのものを難しくするものではなく、リリースの再現性と追跡性を高めるための更新です。運用側では「バージョンは手で書くもの」から「ワークフローが計算して記録するもの」へ発想を切り替えることが、最も重要な対応になります。

この記事を書いた人

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

コメント

コメントする

目次