opentofu について
opentofuは、HCLでクラウドインフラを宣言的に管理するためのスキルです。インフラ担当者向けに、計画、プロビジョニング、状態管理、暗号化に加え、PulumiのIaCパターンも扱います。
主な機能
- 01HCLによる宣言的なインフラ管理
- 02リソースの計画、適用、削除
- 03リモート状態とワークスペースの管理
- 04モジュールによる構成の再利用
- 05Pulumiのプロジェクトと自動化パターンの参照
活用シーン
- 01マルチクラウドリソースのプロビジョニング
- 02環境ごとの状態分離
- 03既存リソースの管理への取り込み
- 04CI/CDでのインフラ変更のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill opentofuインストール後、Claude Code で/opentofuを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cicd-integration.mdhcl-fundamentals.mdimport-migration.mdmodules.mdpulumi-sdk.mdpulumi-stacks.mdstate-encryption.mdstate-management.mdvariables-outputs.mdworkspaces.md詳細
OpenTofu
概要
OpenTofu は、HCL(HashiCorp Configuration Language)を使用してクラウドインフラストラクチャを宣言的に管理する、オープンソースの Infrastructure as Code ツールです。コミュニティ主導の Terraform フォークであり、既存の Terraform プロバイダーやモジュールと完全な互換性を備え、ネイティブな状態暗号化などの独自機能もあります。Pulumi は、HCL ではなく汎用プログラミング言語(TypeScript、Python、Go)を使用する、別の IaC アプローチを提供します。
使用する場合: クラウドインフラストラクチャを宣言的に管理する場合、マルチクラウドのリソースをプロビジョニングする場合、環境間でインフラストラクチャの一貫性を確保する場合、保存時の状態を暗号化する場合(OpenTofu)、IaC に使い慣れたプログラミング言語を使用する場合(Pulumi)。
使用しない場合: CLI ツールのほうが適している単発のスクリプト、アプリケーションレベルの構成管理(Ansible/Chef を使用)、コンテナオーケストレーションのロジック(Kubernetes マニフェストを使用)、シンプルな静的ホスティング(プラットフォーム標準のツールを使用)。
クイックリファレンス
| パターン | ツール/コマンド | 主なポイント |
|---|---|---|
| プロジェクトを初期化する | tofu init | プロバイダーをダウンロードし、バックエンドを初期化します |
| 変更をプレビューする | tofu plan | 適用せずに差分を表示します |
| 変更を適用する | tofu apply | リソースをプロビジョニング/更新します |
| リソースを破棄する | tofu destroy | 管理対象のインフラストラクチャを削除します |
| リソースをインポートする | tofu import <addr> <id> | 既存のリソースを管理対象にします |
| 状態の暗号化 | terraform.encryption block | OpenTofu 独自機能。キー プロバイダーを使った AES-GCM 暗号化 |
| リモートバックエンド | backend "s3" / backend "gcs" | ロック機能付きで状態をクラウドストレージに保存します |
| ワークスペース | tofu workspace new <name> | 環境ごとに状態を分離します |
| モジュールの使用 | module "name" { source = "..." } | 再利用可能なインフラストラクチャコンポーネント |
| 出力値 | output "name" { value = ... } | 他の構成や CI で使う値を公開します |
| 変数ファイル | terraform.tfvars / -var-file | 環境固有の変数を上書きします |
| Pulumi の新規プロジェクト | pulumi new typescript | TypeScript の IaC プロジェクトをひな形から作成します |
| Pulumi のプレビュー | pulumi preview | 計画されている変更を表示します |
| Pulumi のデプロイ | pulumi up | リソースをプロビジョニング/更新します |
| Pulumi の構成 | pulumi config set key value | スタック単位の構成を設定します |
| Pulumi のシークレット | pulumi config set --secret key val | 暗号化された構成値 |
| Pulumi のスタック | pulumi stack select <name> | 環境を切り替えます |
| Automation API | LocalWorkspace.createOrSelectStack() | プログラムからスタックを管理します |
よくある間違い
| 間違い | 正しいパターン |
|---|---|
| チーム環境で状態をローカルに保存する | 状態ロックを有効にしたリモートバックエンド(S3、GCS、Azure Blob)を構成する |
| HCL にプロバイダーの認証情報をハードコードする | 環境変数またはプロバイダー固有の認証チェーンを使用する |
プランを確認せずに tofu apply を実行する | tofu plan -out=plan.tfplan を実行してから tofu apply plan.tfplan を実行する |
| 状態を手動で編集する | tofu state mv、tofu state rm、または tofu import を使用する |
.terraform.lock.hcl を無視する | プロバイダーのバージョンを再現可能にするため、ロックファイルをコミットする |
複雑な条件付きリソースに count を使用する | リソースアドレスを安定させるため、マップを使った for_each を優先する |
| すべての環境で 1 つのワークスペースを共有する | 環境ごとにワークスペースまたはバックエンド設定を分ける |
シークレットを terraform.tfvars に入れる | sensitive = true の変数、Vault、または環境変数を使用する |
| Pulumi:コンポーネントクラスの外でリソースを作成する | 関連するリソースを ComponentResource でラップして再利用する |
| Pulumi:非同期操作を待機しない | スタックをエクスポートする前に、すべてのリソース操作が完了するようにする |
CI/CD で tofu plan を省略する | パイプラインでは必ずプランを作成し、適用前に承認を求める |
-target を慎重に使用しない | 完全なプランを優先する。-target を使うと状態に不整合が生じる可能性がある |
委任
- インフラストラクチャパターンの調査:
Exploreエージェントを使用する - IaC コードレビュー:
Taskエージェントを使用する - ドリフト検出の分析:
Taskエージェントを使用する
amazon-web-servicesスキルが利用可能な場合は、AWS リソースパターンをそのスキルに委任してください。dockerスキルが利用可能な場合は、コンテナインフラストラクチャのパターンをそのスキルに委任してください。github-actionsスキルが利用可能な場合は、CI/CD パイプラインのパターンをそのスキルに委任してください。