Bicep/azd デプロイ前の what-if 分析。「差分確認」「変更影響」「破壊的変更」「デプロイしたら何が変わる」「Bicep と実リソースの比較」を求める場合に使用。
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: bicep-what-if-analysis
description: Bicep/azd デプロイ前の what-if 分析。「差分確認」「変更影響」「破壊的変更」「デプロイしたら何が変わる」「Bicep と実リソースの比較」を求める場合に使用。
---
# Bicep What-If 分析
## 分析フロー(必須)
以下の手順に従う。スキップ不可。
### Step 1: サマリー実行
```bash
./.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 件以上の場合、**必須**:
```bash
./.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](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
No comments yet. Be the first to comment!