自力でも結構簡単にできるね! import ( // ... "cuelang.org/go/cue" "cuelang.org/go/cue/cuecontext" "cuelang.org/go/cue/load" ) func hoge(cueFilePaths []string) (cue.Value, error) { ctx := cuecontext.New() instances := load.Instances(cueFilePaths, &load.Config{ModuleRoot: moduleRoot}) var value cue.Value for _, instance := range instances { if instance.Err != nil { return cue.Value{}, xerrors.Wrap(instance.Err, "cue ファイルのロードに失敗しました") } v := ctx.BuildInstance(instance) if v.Err() != nil { return cue.Value{}, xerrors.Wrap(v.Err(), "cue ファイルのビルドに失敗しました") } if err := v.Validate(); err != nil { return cue.Value{}, xerrors.Wrap(err, "cue ファイルのバリデーションに失敗しました") } value = value.Unify(v) } return value, nil } import ( // ... "cuelang.org/go/cue" ) type Table struct { Name string Columns []*Column } type Column struct { Name string PK bool Type string IsList bool } // parseTransactionEntity cue ファイルからテーブル情報を解釈する func parseTransactionEntity(value cue.Value) (*Table, error) { return Decode[Table](value) } // Decode cue ファイルをUnmarshal する。 func Decode[T any](cueValue cue.Value) (*T, error) { var decoded T if err := cueValue.Decode(&decoded); err != nil { return nil, err }