Claude Code を使って既存のAzure リソースをTerraform コードに変換し各種準備まで行うスラッシュコマンドを作ってみたら色々と苦労したお話

>100 Views

April 18, 26

スライド概要

2026年4月18日の『【Global Azure】第4回 JAZUG Shizuoka』のショートセッション資料です。

profile-image

外資系の会社でAzure Platform に関するコンサルタントをやっています。Azure を含むMicrosoft 製品、インフラ、CI/CD などを強みとしています。Microsoft MVP 2025 (Azure Compute Infrastructure、Azure Networking)

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Claude Code を使って既存のAzure リソースを Terraform コードに変換し各種準備まで行う スラッシュコマンドを作ってみたら色々と苦労したお話 2026/04/18 【Global Azure】第4回 JAZUG Shizuoka Kazuki Yamabe

2.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 2

3.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 3

4.

Who am I? Name :Kazuki Yamabe Company:Avanade Japan K.K. Awards :Microsoft MVP 2025 ~ (Azure Compute Infrastructure、Azure Networking) ◼ Blog・SNS • Blog:https://www.kdkwakaba.com/ • X:@kdk_wakaba • Linkedin:kdk-wakaba 4

5.

Notes • 本内容は2026年4月18日現在の内容となります。今後のアップデートで仕様 変更となる可能性もあるためご了承ください • 本内容は個人の見解であり、会社の方向性、戦略、意見ではありません 5

6.

Today’s goal • Claude Code でAzure リソースやTerraform を扱う基本的な構成を理解している • Azure リソースのExport Template for Terraform CLI について理解している • AI ツールでAzure リソースをコード変換時に意識する観点を理解している 6

7.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 7

8.

What’s Terraform ? HashiCorp が提供するマルチプロバイダーを特徴とするIaC ツール 独自言語 HCL によ る宣言的な記述に より、構成を直感 的に把握可能 プロバイダを利用 し、複数のクラウ ド/製品を共通の 定義で一元管理可 能 State 管理により、 変更内容を安全か つ明確に可視化 大規模環境向けに、 シークレット管理 やガバナンス機能 を備えたセキュア な運用基盤 出典元:What is Terraform? 8

9.

What’s Claude Code ? Anthropic が提供する自律的なタスク実行を強みとするエージェント型のAI コー ディングツール ターミナル上の CLI 操作を中心とし、 コマンドベースで 実行環境に依存し ない特性を持つ 大規模なコード変 更や依存関係の把 握に強く、マルチ エージェントによ る一連のタスク実 行も可能 独自のカスタムフ ローやコマンド、 Skill などの拡張に 加え、エージェン トチームといった 多彩な機能を提供 Remote control に より、Android / iOS のスマートフォ ンからセッション を実行可能 出典元:Claude Code overview 9

10.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 10

11.

いつもの飲み屋で常連さんと話していたときの一幕 11

12.

いつもの飲み屋で常連さんと話していたときの一幕 12

13.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 13

14.

スラッシュコマンドの構成 • スラッシュコマンド + オプション操作で様々なケースに対応する設定 - 単一リソースグループから複数のリソースグループの変換 - Backend の指定 (ローカル、Blob ストレージ、HCP Terraform) - 必要に応じたコンポーネントの分割、モジュール化 - 環境ごとのパラメーターファイルの分割、など • 追加のプラグインは使わず、Azure リソースをTerraform コードに変換す ることに特化させる • 全体的な取り決めはCLAUDE.md に記述し、細かいルールはrules 配下に ファイルを分割して設定 - 特定のタスクに特化させているため、今回はSkill の分割は対応せず 出典元:スキルで Claude を拡張する 14

15.

Azure Export Template • 特定のリソースグループに存在するAzure リソースをDeploy Template と してExport できる機能 - ARM Template、Bicep、Terraform の3種類を選択できる - Azure CLI コマンドでもDeploy Template をExport 可能 • Export では1つのファイルに全てのリソースを集約する - 実運用で利用するParameter やModule のような分類は実施しない - Export したリソース内容をAI ツールで整えるといい感じにまとまる 出典元:Azure portal を使用してテンプレートをエクスポートする 15

16.

Azure Export for Terraform CLI (aztfexport) • 特定のリソースグループに存在するAzure リソースをTerraform のテンプ レートとしてエクスポートするCLI ツール - デフォルトでは全てのリソースを取得するようになっている - エクスポートでは1つのmain.tf ファイルにリソース情報をまとめる - オプションでtfstate ファイルの作成も可能 • Azure Portal のエクスポートと違い、CLI ツールではAzure リソースを import するマッピングファイルの作成も可能 • CLI ツールはGo 言語のツール 出典元:Azure Export for Terraform CLI の概要 16

17.

Azure の設定 • Azure リソースのExport およびTerraform コマンド実行用に認証用のサー ビスプリンシパルを作成 - サービスプリンシパルの情報はClaude Code で認証するため、環境変数用のファイル に情報を持たせておく - 環境ごとにサービスプリンシパルを分割している場合、Export 用にRBAC 付与が必要 となるため注意 • テンプレートのExport や各種情報に必要なRBAC を事前に付与 - 基本はRead 権限で問題ないが、一部シークレット情報を取得するためにContributor 権限クラスが必要なこともある 出典元:Azure Provider: Authenticating using a Service Principal with a Client Secret 17

18.

Dev Container の構成 • Dev Container 上に必要なツールを導入し、環境構築コストを削減 - Azure CLI (Azure へのログイン用) - Terraform (各種Terraform コマンドを実行するため) - Claude Code (スラッシュコマンドや対話を行うため) - aztfexport (Azure からリソース情報を取得するため) • VSCode の拡張機能を事前に追加し、変換後のコードを確認しやすくする • Claude Code で予期せぬ行動の影響を削減するため隔離環境とする 出典元:Developing inside a Container 18

19.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 19

20.

Azure からTerraform コードをExport する時間が長い問題 • aztfexport の実行時間が長く時間がかかるため、デフォルトで自動生成さ れるリソースを除外する - Database 系やLog Analytics のように、何も設定しないとリソースの内部情報まで Export するためものすごく時間がかかる - 実行時間と処理が増えるとToken の消費量も増えてしまうので良くない… - どうしてもデフォルトのリソースを追加したい用にオプションを追加 • Terraform Provider で毎回ダウンロードすることによる時間を削減するた め、キャッシュを使用するよう修正 20

21.

大量の実行承認を求められユーザー側の手動承認が大変 • Export から変換まで、大量の手動承認を求められてテンポが悪い - Teamプラン以上であればAuto Mode あたりで試すものあり • dontAsk で権限を絞ろうとしたが、サンドボックスへの書き込みが引き継がれな いなどあり、最終的にacceptEdits モードで手動承認しながら実行する - Linux コマンドで複合コマンド (&& や ||) を多用すると正常にPermission を読み込まない ことがある - Azure CLI やaztfexport のようなコマンドでオプションに差異があるとうまく実行できない - 一度一通りのタスクを実行してから使用したコマンドのPermissions を追加するといい感じ に追加してくれる - Dev Container の隔離環境前提かつ自己責任でよいならbypassPermissions も一つ (非推奨) ※ bypassPermissions は基本的に使わないでください。やむを得えず使う場合は隔離環境 や影響のない状況でのみ使いましょう 出典元:権限を設定する 21

22.

コード変換時にAzure リソースの設定を変えてしまう • Export 後の変換で既存リソースの設定に追加したり、推奨設定に変更しよ うとする - 推奨設定にするのは悪いことではないが、既存リソースの設定が変わるとアプリケー ションの挙動に影響を与える可能性があるため極力避ける - Claude が見るのはあくまでコードのみ。既存リソースのExport からコンテキストを読 み込んでくれない - 本来存在しないタグを追加する、みたいなケースも発生した • AVM (Azure Verified Modules) を使うと推奨構成に変えることがよく発生 したため、意図的に使用しないように指定 - AVM への変換は別の機会に 22

23.

command や各種ルールが肥大化しToken の消費量が多くなる • 様々な要件を都度改善しているとcommand やルールの内容が肥大化し、 実行するたびに大量のToken を使用してしまう • 改善案もClaude Code 自身に出させ、効果のある内容を修正に取り込む - aztfexport の出力を最小限にし、Token の使用量を削減 - 各種ルールの冗長な記述や重複箇所を削減することで、Claude の読み込み量を削減 • 肥大化したコマンドを分割し、サブエージェントとしてオーケストレー ションすることで、会話の持ち越しを減らしToken 消費を削減する • 検証時にあれこれやりすぎるとToken を使いすぎてその日は何もできず…、 みたいなこともあるので計画的に検証する 出典元:使用制限のベストプラクティス 23

24.

Appendix: 変換したTerraform コードをパイプライン化するコマンドも作った • Azure リソースをTerraform コードに変換した後、デプロイ周りを自動化 するためにコマンドをおまけで作った - GitHub Actions とAzure DevOps を対象とした • Terraform コード変換時にClaude 側で実行順を把握しているため、デプ ロイ順どおりに作ってくれる • セキュリティツールや各企業によるお作法 (デプロイ前の承認、など) は要 件によって変わるため入れないようにしている 24

25.

Appendix: Opus 4.7 が直前で出たのでコマンドを試した • 基本操作を含めOpus 4.6 やSonnet 4.6 よりパフォーマンスは高い • 生成されるTerraform コードに大きい差はあまり見られなかった - 大体Rules のような指示通りに対応してくれるので、急激に品質が上がるわけではない • ただしToken の消費量が従来より高めなので、プランによってはセッショ ン使用量がすぐに枯渇する - 知らない間に追加使用量を使っててお金がかかってる…、なんてこともある 出典元:What's new in Claude Opus 4.7 25

26.

Agenda • Introduction • What’s Terraform & Claude Code • 今回のテーマをやろうと思った経緯 • コード変換を行うためのClaude Code の環境準備 • Azure リソースのExport からコード変換で苦労したこと • Summary 26

27.

Summary • Azure にはExport Template 機能により、既存のリソースグループからARM、 Bicep、Terraform のようなDeploy Template をExport できる - aztfexport のようにTerraform のExport に特化したツールもある • 処理自体はシンプルだが実運用を想定した場合、Export の時間や既存のAzure リ ソース設定を壊さないかのような観点も考慮する必要がある • 環境に応じて、必要な観点や設定を明確化することで、コード変換時の品質向上 に繋がる 27

28.

Today’s Repository 今回の検証で使ったリポジトリURL • https://github.com/kdkwakaba/claude-code-azure-to-tf 28