Claude-skill-registry bicep-what-if-analysis

Bicep/azd デプロイ前の what-if 分析。「差分確認」「変更影響」「破壊的変更」「デプロイしたら何が変わる」「Bicep と実リソースの比較」を求める場合に使用。

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/bicep-what-if-analysis" ~/.claude/skills/majiayu000-claude-skill-registry-bicep-what-if-analysis && rm -rf "$T"
manifest: skills/data/bicep-what-if-analysis/SKILL.md
source content

Bicep What-If 分析

分析フロー(必須)

以下の手順に従う。スキップ不可。

Step 1: サマリー実行

./.github/skills/bicep-what-if-analysis/scripts/whatif-analyze.sh --summary

Step 2: 結果確認(すべて報告、優先順位なし)

重要: 以下のすべての項目を同等に扱う。特定の項目を優先的に確認しない。

確認項目0件でも報告詳細確認が必要
resourceDeletions
Yesリソース削除がある場合
destructiveChanges
Yesリソース再作成がある場合
changesWithDeletions
Yes必ず詳細確認(プロパティ削除)
resourceCreations
Yesリソース作成がある場合
modifiedResources
No(件数のみ)-
unsupported
Yes(必ず詳細説明)説明が必要

changesWithDeletions の重要性:

  • Bicep定義と実リソースの乖離を示す
  • リソース再作成なしでも影響大の可能性
  • 1件でもあれば、必ず全プロパティを詳細確認

サポート外リソースの報告ルール:

  • サマリーに件数を含める場合、必ず詳細説明を追加する
  • 「サポート外 (分析対象外・問題なし)」のように安心材料を併記する
  • 対象リソースと理由を具体的に説明する
  • 「デプロイは正常に実行される」ことを明記する

Step 3: 詳細確認(プロセスベース)

changesWithDeletions
が 1 件以上の場合、必須

./.github/skills/bicep-what-if-analysis/scripts/whatif-analyze.sh

プロセスベースアプローチ(重要):

すべてのプロパティ削除に対して、以下のプロセスを一律に適用:

1. 削除されるプロパティを特定
   - トップレベル: properties.xxx
   - ネスト: properties.config.xxx
   - 配列要素: properties.subnets[1].xxx

2. Bicep定義を確認(grep/viewツール)
   - 定義あり → 次へ
   - 定義なし → 🔴 乖離

3. ARMリファレンスで readOnly を確認
   - readOnly: true → ✅ ノイズ
   - readOnly: false → ⚠️ 実削除
   - 不明 → ❓ 要調査

禁止事項:

  • 特定のリソースタイプやプロパティだけを確認して終わらない
  • 「重要そう」「起きやすそう」という事前判断をしない
  • potentiallyDestructive: false
    のリソースをスキップしない
  • 大量の変更があっても流し読みしない
  • 「たぶんノイズだろう」と推測しない

必須事項:

  • changesWithDeletions
    に含まれる全リソースの全プロパティを列挙する
  • 各プロパティに上記プロセスを適用する
  • 判定根拠を明示する(Bicep定義の有無、readOnlyの値)
  • 判定に自信がない場合は「要確認」と報告する(ノイズと推測しない)

Step 4: 報告

  1. サマリー表(変更タイプ別件数)
  2. 注意が必要な変更の詳細
  3. 各変更の評価(ノイズ / 実際の変更 / 要確認)
  4. サポート外リソースの説明(件数が1件以上の場合)
  5. 推奨アクション

報告時の必須要素:

  • サポート外リソースがある場合、「問題ではない」ことを明示
  • 単に「サポート外: N件」だけを記載しない
  • 不安を与えずに、正確な情報を伝える

スクリプトオプション

オプション用途
--summary
サマリー(最初に実行)
(なし)フィルタ済み全出力
--raw
Azure CLI 生出力
--template
,
--parameters
カスタム指定

重要な概念

プロパティ削除の意味

changesWithDeletions
実リソースに存在する設定が Bicep に未定義 であることを示す。

  • Bicep定義にないプロパティ → デプロイで削除される(乖離
  • Bicep定義にあるが読み取り専用 → デプロイしても適用されない(ノイズ

リソース再作成を伴わなくても、セキュリティや可用性に影響する可能性がある。

プロセスベースアプローチ

チェックリストではなくプロセスで評価する:

  • 特定のリソースタイプ(VNet, NSG等)のリストに依存しない
  • 特定のプロパティ(tags, networkSecurityGroup等)の優先順位付けをしない
  • すべてのプロパティ削除に同じプロセスを一律適用
  • 未知のリソースや新しいAzureサービスにも対応可能

評価プロセス:

  1. Bicep定義を確認(定義の有無)
  2. ARM リファレンスで readOnly を確認
  3. 結果を報告(乖離 / ノイズ / 要調査)

ノイズ判定

スクリプトは明らかな読み取り専用プロパティ

provisioningState
,
etag
等)のみを自動フィルタする。 それ以外のプロパティは、上記のプロセスで評価する。

判定基準の詳細は references/noise.md を参照。

前提条件

  • azd env
    初期化済み
  • Azure CLI ログイン済み
  • azd プロジェクトルートで実行

トラブルシューティング

問題対処
"AZURE_LOCATION is not set"
azd env refresh
大量の変更
--raw
で生出力確認
特定リソース確認
jq '.changes[] | select(.resourceType == "xxx")'

Dependencies

az, azd, jq, python3