miseでTerraformを使う際のparse-legacy-fileエラーとその解決方法

miseでTerraformを使う際のparse-legacy-fileエラーとその解決方法

Clock Icon2025.03.29

はじめに

こんにちは、データ事業本部の渡部です。
最近miseを使いつつTerraformを触り始めたのですが、versionの表記によるエラーに遭遇したので、備忘的に書き残しておこうと思います。

環境

  • 開発環境のセットアップツール:mise
  • mise version:2025.3.11
  • miseで指定するTerraform version:1.11.2

エラー内容

Terraformのmain.tfが配置されているディレクトリにcdすると以下のようなエラーが出力されました。

cd ~
mise ERROR error parsing config file: ~/main.tf
mise ERROR ~/.local/share/mise/plugins/terraform/bin/parse-legacy-file exited with non-zero status: no exit status
mise ERROR command ["/Users/username/.local/share/mise/plugins/terraform/bin/parse-legacy-file", "/Users/username/main.tf"] exited with code 1
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information

main.tfの内容は以下です。

terraform {
  # Terraformのバージョン制約
  required_version = "~> 1.11.0"

  # 必要なプロバイダーとそのバージョン
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.93.0"
    }
  }
}

provider "aws" {
  region  = "us-east-1"
}

resource "aws_s3_bucket" "sample_bucket" {
  bucket        = "cm-watanabe-sampleple"
  force_destroy = true
}

解決法

~/.config/mise/config.tomlに以下を追記しました。

[settings]
idiomatic_version_file_disable_tools = ['terraform']

エラー内容にあるparse-legacy-fileを無視するという内容の設定となります。
parse-legacy-fileの中身を確認してみると、=以外はサポートしてないからエラーになるって書いてますね。


is_strict_equality_version_constraint() {
  local -r version_constraint="$1"
  grep --quiet -E '^=?[[:digit:]]+\.[[:digit:]]+.[[:digit:]]+' <<<"${version_constraint}"
}
〜〜〜(省略)〜〜〜
  if is_strict_equality_version_constraint "${required_version_constraint}"; then
    tr -d '=' <<<"${required_version_constraint}"
  else
    cat >&2 <<EOF
FATAL: Found legacy version file '${ASDF_HASHICORP_TERRAFORM_VERSION_FILE:-main.tf}' with unsupported required
version constraint expression: '${required_version_constraint}'. This
plugin only supports strict equality.

今回はTerraformブロック内のバージョン指定で~>と記載していたので、~には対応していないからエラーとなっていたということのようです。
=にしてもエラーは解消すると思いますが、それではやりたいことが実現できないので、~/.config/mise/config.tomlparse-legacy-fileを無視する設定を追記した次第でした。

Terraform以外の他の言語についても、無視して問題ないよってことであれば、以下を記載すればOKのようです。

idiomatic_version_file = false

振り返るとTerraform以外でも案外よく発生するエラーなのかなって気はしました。

参考資料

https://mise.jdx.dev/configuration.html#idiomatic-version-files

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.