Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraformを安全に効率よく書くためのClaude Code活用術

Avatar for Lamaglama39 Lamaglama39
May 16, 2026
55

Terraformを安全に効率よく書くためのClaude Code活用術

Avatar for Lamaglama39

Lamaglama39

May 16, 2026

Transcript

  1. © 2025 Classmethod, Inc. ⾃⼰紹介 2 赤池 悠 ( AKAIKE

    HARUKA ) @lamaglama39 • クラスメソッド株式会社 ◦ クラウド事業本部コンサルティング部 ▪ ソリューションアーキテクト • お気に入りの Terraform組み込み関数 ◦ yamldecode / yamlencode 主にAWSを中心にTerraformを触っています。 普段書いているブログは、 「クラスメソッド ミラーボール」で調べてください。
  2. © 2025 Classmethod, Inc. この登壇の⽬的とゴール 5 想定対象者 • Terraform /

    Claude Codeをまだ使ったことがない‧使い始めたばかりの⽅ • Terraform / Claude Codeは使っているが、設定まわりが不安な⽅ • その他Claude CodeやTerraformを愛する皆様 ⽬的 • Claude Codeをインフラ領域で活⽤例(Terraform)を共有すること ゴール • ご視聴いただいた⽅が、今⽇から1つでも実践できること
  3. © 2025 Classmethod, Inc. なぜIaCを使うのか? なぜTerraformなのか?(1/2) 6 IaC(Infrastructure as Code)を使う理由

    • 再現性と構築効率化 ◦ コード化することによって、同じ環境を何度でも再現できる • 設定値の担保 ◦ 「IaCコード」 = 「実際の設定値」 = 「設計書」として扱える • 履歴管理が容易 ◦ Gitで「誰が‧いつ‧なぜ」変えたかを追跡できる
  4. © 2025 Classmethod, Inc. なぜIaCを使うのか? なぜTerraformなのか?(2/2) 7 TerraformをIaCとして選ぶ理由 • マルチクラウド対応

    ◦ AWS / GCP / Azureなど主要なクラウドプロバイダーへ対応 ◦ クラウド以外にも様々なプロバイダーがある ▪ Grafana、Datadog、New Relic、PagerDuty、Okta…etc…etc…etc • 明確な変更差分でレビューが容易 ◦ State管理の仕組みにより、差分を確認しやすい • 成熟したエコシステムとモジュール再利⽤性 ◦ モジュールの仕組みにより再利⽤性が⾼い ◦ 公式 / コミュニティモジュールなどすぐに利⽤できる
  5. © 2025 Classmethod, Inc. なぜClaude Codeに書かせるのか?(1/2) 8 AIが普及した今、インフラ作業、特に設計/構築作業にAIを使わない⼿はない • ただし「AI

    + AWS CLI or API 直接実⾏」は危険 ◦ 「AIに⾔ったらリソースができた!」 = 設定値や変更の履歴なし ◦ 情報検索の際のWebFetch(Web ページ検索)の結果次第で、 実⾏するコマンドやAPIの内容が変動しやすい ◦ 複数回実⾏した際の冪等性が担保できない 「AI + AWS CLI or API 直接実⾏」 = 「ほぼガチャ」です。 本番システムでガチャを回したくない場合、IaCの利⽤は必須です。 ※ ただしIAM権限がReadのみで⼀時的な調査場合などは、直接実⾏を許容
  6. © 2025 Classmethod, Inc. なぜClaude Codeに書かせるのか?(2/2) 9 IaC(Terraform)+ AI(Claude Code)なら安全に活⽤できる

    • 確実性 ◦ 作成/変更/削除の内容はIaC側(Terraform)で担保されている • AIが書いたコードをAIでレビューしやすい ◦ コード⾃体と変更差分を⾒せることで、 AI⾃⾝でのレビューが⽐較的容易
  7. © 2025 Classmethod, Inc. 適切なコンテキスト管理 〜どんな前提知識を持たせるか?〜 11 何も設定しないとClaude Codeはプロジェクト固有の情報を知らない • リソースの命名規則

    • コーディング規約 • その環境特有のネットワーク設計など • セキュリティ上禁⽌したい実装パターン 「CLAUDE.md」に書いておくことで、毎回説明しなくてよくなる • どのセッションでも利⽤するような、前提となる情報を記載しておく • 動作としては、セッション開始時に⾃動的に読み込み
  8. © 2025 Classmethod, Inc. 適切なコンテキスト管理 〜CLAUDE.mdは最⼩限に〜 12 参照ドキュメント: CLAUDE.md が⼤きすぎる セッション開始時に毎回読み込まれるので、コンテキストが肥⼤化しやすい

    またセッションが⻑くなると忘れられやすい… (多くても200⾏ぐらいまでがおすすめ) • CLAUDE.mdに書くもの ◦ プロジェクト概要や、全てのファイルに共通する絶対に守るべきルール • CLAUDE.mdに書かないもの ◦ 各技術スタックに関連する詳細なルールや規約 ▪ ➡.claude/rules/に移す
  9. © 2025 Classmethod, Inc. 適切なコンテキスト管理 〜チームと個⼈で設定を分ける〜 14 管理するコンテキストによって、チーム共有と個⼈設定を適切に分ける。 • チーム共有(プロジェクトレベル) •

    CLAUDE.md — プロジェクト共通ルール • .claude/settings.json — Hooks‧権限設定 • 個⼈設定(プロジェクトレベル) • CLAUDE.local.md — 個⼈メモ‧ローカル環境固有のルール • .claude/settings.local.json — 個⼈のMCP設定‧追加権限 • 個⼈設定(グローバル設定) • ~/.claude/CLAUDE.md — どのプロジェクトでも適⽤したい個⼈ルール
  10. © 2025 Classmethod, Inc. 正確な情報の取得 〜MCPを使い倒す〜 16 参照ドキュメント:MCP を使⽤して Claude Code

    をツールに接続する MCPを使わない場合に起こること • 古い引数‧廃⽌されたリソースを定義する • 最新のベストプラクティスが反映されない • 存在しない属性を定義する(ハルシネーション) ※ WebFetchでは正確な情報が確約されないことが原因、つまりガチャ これらの問題は、MCPを使うことで改善される • MCPは外部ツールやデータベースへ接続するための規格 / 機能 • Terraformにおいては、 公式ドキュメントの参照のために利⽤されることが多い
  11. © 2025 Classmethod, Inc. 正確な情報の取得 〜Terraform向けおすすめMCP〜 17 TerraformでAWSリソースを構築するなら、 以下はほぼマストで使って欲しいです。(使ってください…) • terraform-mcp-server

    • Terraform Registryの最新情報を参照できる • Terraformリソースの正確な属性や設定可能な値を取得可能 • https://github.com/hashicorp/terraform-mcp-server • AWS MCP Server • 最近発表された(2026/05/06)、 既存の以下のようなAWS MCP Serverの機能を内包したMCPサーバー ◦ コマンド実⾏ ◦ ドキュメント検索 • https://github.com/aws/agent-toolkit-for-aws/tree/main
  12. © 2025 Classmethod, Inc. プロンプトのテンプレート化 〜Skillsで繰り返し使うプロンプトを定義〜 18 繰り返し使うプロンプトをチームで共有しよう 以下のような定常的なプロンプトは全てSkillsにしよう • 要件定義

    / 設計書からTerraformコード⽣成 • セキュリティレビュー(IAM‧暗号化‧ネットワーク設定の問題検出) • コードレビュー(命名規則‧ファイル構成‧変数設計の確認など) • リファクタリング(モジュール化など) • 静的解析の結果のレビュー • etc…etc…etc… その他Terraformに限らず、 リポジトリ内で⾏われる定常作業は率先してSkillsにしましょう (ドキュメントの最新化、Github Issueの対応 ~ プルリクエスト作成など)
  13. © 2025 Classmethod, Inc. プロンプトのテンプレート化 〜まずはHashiCorp公式のSkillsを使う〜 19 まずは公式のSkillsを使ってみよう その上で開発環境やチームに合わせてカスタマイズしよう 以下であれば、コーディング規約やルールをClaudeに読み込ませて編集させるの がおすすめ

    • agent-skills ◦ HashiCorp公式のTerraform向けSkills ◦ Terraformスタイルガイド、モジュールリファクタリング、インポート、 プロバイダー作成など様々なSkillsを提供 ◦ https://github.com/hashicorp/agent-skills
  14. © 2025 Classmethod, Inc. タスクの分割 〜SubAgentでタスクを委譲する〜 20 メイン会話のコンテキストを汚さずに、 タスクを独⽴したコンテキストで実⾏できる専⽤エージェントを定義できる • 独⽴したコンテキストで動作する

    ◦ メインの会話を汚さない ◦ ⻑い処理をメインセッションから切り離せる • 複数のSubAgentを並列実⾏できる ◦ セキュリティレビューとコストチェックを同時に⾛らせるなど 個⼈的にはSkillsよりは実装の優先度低め メインセッション内で頻繁にコンテキストが溢れる場合などに利⽤を検討する
  15. © 2025 Classmethod, Inc. ツールの実⾏ 〜Hooksで確実にツールを実⾏させる〜 22 確実に実⾏させたいツールやスクリプトは、Hooksに定義する (フォーマット、リンター、バリデーションチェックなど) • プロンプトでの指⽰との違い

    ◦ 明⽰的にプロンプトで指⽰する必要がない ◦ 実⾏が保証される(Claudeがプロンプトを忘れても実⾏される) ◦ セッション開始 / 終了、ツール利⽤開始 / 終了など、 実⾏タイミングを制御できる
  16. © 2025 Classmethod, Inc. Tips:ツールとAIの使い分け 24 既存ツールでできる定常的な作業はツールにやらせよう AIにはより創造的な作業を実⾏させよう(コンテキストも節約しよう) • ツールの役割:機械的に‧漏れなく‧⾼速に検出する

    ◦ フォーマット、リンター、バリデーションチェック、静的解析など • AIの役割:⽂脈を踏まえて‧理由とともに‧対話しながら直す ◦ ツールが出したエラーを解釈‧修正する ◦ エラーに対して「なぜまずいか」「どう直すか」を⾃然⾔語で説明させる ◦ 複数の修正候補とトレードオフを提⽰させる
  17. © 2025 Classmethod, Inc. 適切な権限設定 〜⼤前提:AIに渡すIAM権限はReadのみにする〜 25 AIは無邪気です、無闇に強い権限は与えてはいけません。(特に本番環境) Claude CodeはAWSの認証情報をそのまま使う •

    ~/.aws/credentials や環境変数 AWS_PROFILE がそのまま引き継がれる • 強い権限を持つプロファイルだと、AIが誤操作した際の影響が⼤きい AI⽤のIAMロール‧プロファイルを専⽤で作る • 基本⽅針:ReadOnlyAccess(参照のみ) • 必要な場合のみ書き込み権限を追加 • terraform apply / terraform destroy を実⾏するプロファイルとは分ける ローカル開発での設定例 • ~/.aws/config に claude-code プロファイルを定義してReadOnly権限を付与 • Claude Code起動時に環境変数などで指定する
  18. © 2025 Classmethod, Inc. 適切な権限設定 〜settings.jsonでローカルの権限を制御する〜 26 以下は主要な機能の抜粋です ここではローカルの権限制御(permissions)に触れます • permissions

    ◦ 利⽤可能ツールの許可、アクセス可能なディレクトリ、デフォルトの権限 モードなど • hooks ◦ Claude Codeのイベントに連動して呼び出すHooksの設定 • sandbox ◦ bash コマンドをファイルシステムとネットワークから分離する(後述) • env ◦ すべてのセッションに適⽤される環境変数 参照ドキュメント:利⽤可能な設定
  19. © 2025 Classmethod, Inc. 適切な権限設定 〜Sandboxでローカルアクセス‧外部アクセスを制御〜 28 Sandboxでは以下機能を使い、 OSレベルでプロセスと⼦プロセスのアクセス範囲を制限できます • CLIコマンド⾃動実⾏

    ◦ ワーキングディレクトリ内のBash コマンドを制御する ◦ ⾃動実⾏にすることで、⼿動承認を減らせる • ファイルシステム制御 ◦ ワーキングディレクトリ、および外部のディレクトリへのアクセス許可 • ネットワーク制御 ◦ ローカル環境との通信や、外部ドメインへのアクセス許可設定
  20. © 2025 Classmethod, Inc. 適切な権限設定 〜Sandboxでの制御例〜 29 Claude Code起動時のデフォルトの権限モード Sandboxの有効化とBashコマンドの⾃動承認 (ワーキングディレクトリ限定)

    書き込み可能な外部ディレクトリの指定 読み込み不可な外部ディレクトリの指定 アクセス可能な外部ドメインの指定 (Denyも指定可能)
  21. © 2025 Classmethod, Inc. 適切な権限設定 〜PermissionsとSandboxの違いについて〜 30 参照ドキュメント:サンドボックス化が許可とどのように関連するか 組み合わせて使うことが前提 • Permissionsで「Claudeがツールで何をできるか」を制御

    • Sandboxで「呼び出されたBashプロセスが何にアクセスできるか」を制御 項目 Permissions Sandbox 制御対象 ツール呼び出し OSプロセスレベル 設定対象 Bash・Read・Edit・WebFetchなどのツール ファイルシステム・ネットワーク・コマンド自動実行 (Bash) 動作タイミング ツールを呼び出す前に判断 Bashが生成するプロセス・子プロセスに適用 考慮事項 - ツール経由なら許可される場合がある
  22. © 2025 Classmethod, Inc. チーム展開 〜設定をチームに配布する⽅法〜 31 ざっくり以下の共有⽅法がある 好みで良いと思うが、個⼈的にはGitHubテンプレートリポジトリの⽅が素直に配 れる印象(Githubリポジトリ側の設定も配れていい感じ) •

    GitHubテンプレートリポジトリ(Githubリポジトリの従来の機能) ◦ .claude/ディレクトリをそのままリポジトリに含めて共有 ◦ 更新は⼿動でやる必要あり • Plugins(Claude Codeの機能) ◦ Skills‧SubAgents‧Hooks(hooks/hooks.json)‧MCPサーバーなどを バンドルして配布できる ◦ /plugin install <名前> の1コマンドでインストールできる (最近流⾏り?のAPMは触ってないので、説明しません…)
  23. © 2025 Classmethod, Inc. この登壇どうでした…?(2/2) 35 正直よくわからなくなかったですか…? • 結局どれから始めればいい?? •

    Claude Codeの機能が多すぎるっ!! • 全然Terraformのこと話してなくない…?? それもそのはず、今⽇はかなりざっくりとお話ししています。 そして、まだまだお話しできていないことがいっぱいあります…。 • 今⽇お話しした以外の最新アップデート(ほぼ毎⽇のようにアプデあります) • 要件定義、基本設計からどうやってTerraformへ落とし込む? • ドキュメントとTerraformの乖離はどう対処する?? • CI/CDでのAIレビューの組み込み⽅ • Dev Containerの話とか • etc…etc…etc…
  24. © 2025 Classmethod, Inc. 新しいサービス、始めます。(1/3) 36 • サービス名 ◦ AI駆動インフラ開発⽀援サービス(仮)

    • 提供開始時期 ◦ 2026年6⽉ぐらい(⾒込み) • 提供サービス ◦ Claude Codeを活⽤したインフラ開発の実践的な勉強会‧ハンズオン ◦ 1⽇集中ワークショップ+導⼊⽀援向けの技術QAサポート ◦ IaC開発を前提としたAI活⽤ガイドライン / テンプレートリポジトリ 作成 ◦ その他⽀援内容を柔軟にカスタマイズ
  25. © 2025 Classmethod, Inc. 新しいサービス、始めます。(2/3) 37 こんな⽅/組織に試してもらいたい • ⽣成AIを使ったインフラ開発のノウハウが社内に蓄積されていない… •

    マルチクラウドのIaCを⽣成AIで効率化したい… • AI活⽤を前提としたIaCのガイドラインや開発フローが整備されておらず、 属⼈的な活⽤にとどまっている… • IaC未導⼊で⼿動運⽤しているが、⽣成AIを活⽤してIaC化したい…
  26. © 2025 Classmethod, Inc. 新しいサービス、始めます。(3/3) 38 こんな⽅/組織に試してもらいたい • ⽣成AIを使ったインフラ開発のノウハウが社内に蓄積されていない… •

    マルチクラウドのIaCを⽣成AIで効率化したい… • AI活⽤を前提としたIaCのガイドラインや開発フローが整備されておらず、 属⼈的な活⽤にとどまっている… • IaC未導⼊で⼿動運⽤しているが、⽣成AIを活⽤してIaC化したい… ぜひお⼿伝いさせてください。 ご連絡お待ちしております。