MENU

Terraformモジュールを”作品設計”で考える:再利用性と世界観の作り方【2025年版】

Terraformモジュールを”作品設計”で考える:再利用性と世界観の作り方【2025年版】

駆け出しエンジニアのみなさん、こんにちは! IaC(Infrastructure as Code)の波に乗ってTerraformを触っていると、「モジュール」という概念にぶつかりますよね。

最初は「コードを使い回すための箱」くらいの認識かもしれません。でも、実務でモジュールを使い倒すうちに、ある設計思想が芽生えてきます。それは、

Terraformモジュールは、単なる部品ではなく、明確な設計思想と再利用性を持つ”作品”である

ということです。

僕自身、最初は適当にコピペしてモジュールを作ってしまい、後のメンテナンスで地獄を見た経験があります。本記事では、僕の失敗談を交えながら、どうすれば「世界観が統一された、再利用性の高いモジュール」を設計できるか、具体的な考え方をお伝えします。
目次

🎨 モジュール設計を「作品」として捉える3つの視点

Terraformモジュールの設計を「作品作り」として捉えると、グッと分かりやすくなります。

1 最小の世界観を定義する(単一責務の原則)

まず、モジュールが「何をするものか」を明確に定義します。これは、オブジェクト指向設計でいう「単一責務の原則(Single Responsibility Principle / SRP)」と同じ考え方です。

例えば、「VPCを作るモジュール」の中に、「EC2を作るロジック」や「RDSのセキュリティ設定」まで混ぜてしまうと、どうなるでしょうか?

  • 作品として破綻:VPCだけを使いたい別プロジェクトが、EC2の不要な設定まで引きずり込む。
  • 世界観が曖昧:「このモジュールは何の世界観(責務)なんだろう?」と読者を迷わせます。

⚠️ 失敗談

僕も過去、一つのモジュールにDB, Cache, Webのすべてを詰め込んで「オールインワン・インフラ」と名付けたことがありますが、結果的にパラメータが複雑すぎて誰も使えなくなりました。

🚀 学びの瞬間

責務は単一に。 VPCならVPC、S3バケットならS3バケット。独立した「最小の世界観」として作りましょう。

2 インターフェースを洗練させる(パラメータの厳選)

モジュールを使う側から見ると、variables.tf の定義が、モジュールへの「入口(インターフェース)」になります。このインターフェースがごちゃごちゃしていると、作品の使い勝手は最悪です。

  • 使いやすい作品: name, vpc_cidr, tagsなど、必要最小限かつ汎用的なパラメータで動く。
  • 使いにくい作品: モジュール内部のニッチな設定(例:enable_detailed_cloudwatch_metrics_for_nic_0など)まで外部に公開してしまう。

📘 デフォルト値の重要性

特に、default値は非常に重要です。モジュール利用者が何も指定しなくても、セキュアかつ実用的に動くデフォルト設定を持たせることで、利用のハードルが下がります。

3 変更不可のルールを設ける(意図的な制限)

モジュールは再利用性を高めるために、ある程度、設計者の「意図」を強制的に適用する必要があります。これは、アニメでいう「世界観のルール」のようなものです。

例えば:

  • 必ず特定のタグ(Project, Ownerなど)を付けることを義務付ける。
  • 特定のセキュリティ設定(例:パブリックアクセスを強制的にfalseにする)を内部で固定する。

これにより、「このモジュールを使えば、うちの会社のセキュリティ基準は満たせる」という信頼が生まれます。

💬 実体験

僕は、セキュリティチームから「このモジュールでデプロイすればOK」というお墨付きをもらうために、あえて一部のvariableを削除し、固定値にしたことがあります。正直かなり勇気が要りましたが、結果的にミスが減り、デプロイが高速化しました。

⚠️ 注意点・失敗談:モジュールは「魔法の箱」ではない

最も陥った落とし穴

モジュール設計で、僕が最も陥った「落とし穴」は、「汎用性を求めすぎて、何もできない箱」になってしまうことです。

失敗談:パラメータ地獄

あらゆるプロジェクトの要望に応えようと、全てのパラメータをvariableとして外出しにしてしまった時期がありました。結果、variables.tfが100行を超え、モジュールを利用する側は「どのパラメータを設定すればいいんだ?」と途方に暮れることになりました。これでは、設計が抽象的すぎて、誰も使えない「作品」になってしまいます。

✅ 学びの整理

  • 再利用性 ≠ 汎用性の最大化。再利用性は「ターゲットとする共通部分」に絞ったときに最大化します。
  • 「変えてはいけないもの」は固定する。変える必要があるものだけをvariableとして公開しましょう。

📚 まとめ:モジュール設計の「思想」を磨こう

Terraformモジュールは、単なるコードのコピペ集ではありません。それは、あなたの設計思想が詰まった「作品」です。

3つの設計原則

  1. 単一責務で最小の世界観を定義する。
  2. 必要な情報だけを公開し、インターフェースを洗練させる。
  3. 会社のルールやベストプラクティスを内部で固定し、信頼性を高める。

モジュールを設計する際は、「次にこのモジュールを使う自分(または同僚)が、感動するくらい使いやすいか?」という視点を持ってみてください。きっと、より堅牢で美しいインフラが構築できるようになるはずです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次