自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Terraform】バージョン制約演算子を整理してみた

一度設定すると忘れがちなので、備忘を兼ねて。

まとめ

以下が Terraform の required_providersrequired_version などで使えるバージョン制約演算子の一覧と、それぞれの意味・具体例です。

制約式 意味 具体例 マッチするバージョン範囲
= 1.12.1 完全に一致 version = "= 1.12.1" ちょうど 1.12.1
1.12.1 = 1.12.1 と同義 version = "1.12.1" ちょうど 1.12.1
!= 1.0.0 それ以外 version = "!= 1.0.0" 1.0.0 以外(1.0.1, 1.1.0, …)
> 1.0.0 より大きい version = "> 1.0.0" 1.0.1, 1.2.0, …
>= 1.0.0 以上 version = ">= 1.0.0" 1.0.0, 1.0.1, 2.0.0, …
< 2.0.0 未満 version = "< 2.0.0" 1.x 系すべて(1.0.0~1.999.999)
<= 2.0.0 以下 version = "<= 2.0.0" 2.0.0 とそれ以前
~> 6.0.0 悲観的演算子
パッチアップのみ許容
version = "~> 6.0.0" >= 6.0.0 かつ < 6.1.0。つまり6.1.0以降や7.Xは含まれない。
~> 6.0 悲観的演算子
マイナーアップまで許容
version = "~> 6.0" >= 6.0.0 かつ < 7.0.0。つまり、7.X以降は含まれない。
>= 1.0.0, < 2.0.0 範囲指定(複数制約の組み合わせ) version = ">= 1.0.0, < 2.0.0" 1.0.0から1.x系最新まで(2.0.0以上は除外)
>= 1.0.0, != 1.5.0 範囲+除外 version = ">= 1.0.0, != 1.5.0" 1.0.0以上かつ1.5.0以外

ポイント

  • =(または省略)

    • = 1.2.3"1.2.3" は同じ意味。
    • 厳密にそのバージョンのみを許可します。
  • 大小比較演算子 (!=, >, >=, <, <=)

    • 範囲指定や除外に使えます。
    • 複数の制約を「カンマ区切り」で同時に指定可能(論理 AND 相当)。
  • ~>(悲観的演算子)

    • 最もよく使われる形式です。
    • 右辺を分解し、最後の要素を固定して上位桁への影響を抑制。

      • ~> A.B.C>= A.B.C かつ < A.(B+1).0
      • ~> A.B>= A.B.0 かつ < (A+1).0.0
  • 組み合わせ

    • 例えば ">= 1.0.0, < 2.0.0"">= 1.0.0, != 1.5.0" のように複数の条件を AND で指定できます。

以上です。