🆙

Goa 更新情報 v3.8.4 / Clue v0.10.0

2022/08/28に公開

概要

Goa / Clue の更新情報メモです。

Goa v3.8.4 / Clue v0.10.0

更新内容

Goa v3.8.4

Fix use of custom packages in error types (#3127)

カスタムエラーに Meta("struct:pkg:path", "common") のようなパッケージパスの設定をしたときに、指定したパスにエラーの構造体が生成されてなかった不具合が修正されました。

// CustomError is the custom API error response
var CustomError = Type("CustomError", func() {
	Meta("struct:pkg:path", "common")   // ← こんなの
	ErrorName("code", String, "Code of the error", func() {
		Example("not_found")
	})
	Required("code", "message")
})

Display field name in validation error messages (#3134)

gRPC のバリデーションのエラーメッセージで常に "message" となっていた項目が、ちゃんとフィールド名に置き換わるように修正されました。

Clue v0.10.0

Add AWS logger adapter (#122)

Clue では、ログを ctx に埋め込んでおいて、それを取り出して、文脈に依存してログを出力します。たとえば、エラーが起きたときだけ、それまでのログを出力する、といったことが context を利用して実行できます。

ctx からログを取り出すときに、取りだしたログがインターフェースを満たすようにアダプターが用意されています。たとえば StdLogger が用意されていて、これは logrus の StdLogger インターフェースを満たすように作られています。

type StdLogger interface {
	Print(...interface{})
	Printf(string, ...interface{})
	Println(...interface{})

	Fatal(...interface{})
	Fatalf(string, ...interface{})
	Fatalln(...interface{})

	Panic(...interface{})
	Panicf(string, ...interface{})
	Panicln(...interface{})
}

この形式でログを取り出したいときには、

logger := log.AsStdLogger(ctx)

としてやればいいです。

今回、AWS のロガーに互換なロガー(AWSLogger) が追加されました。

import "github.com/aws/aws-sdk-go-v2/config"
import "goa.design/clue/log"
import "goa.design/clue/trace"

ctx := log.Context(context.Background())
tracedClient := &http.Client{Transport: trace.Client(ctx, http.DefaultTransport)}
cfg, err := config.LoadDefaultConfig(ctx,
    config.WithHTTPClient(tracedClient),
    config.WithLogger(log.AsAWSLogger(ctx)))

こんな感じで取り出してすぐに AWS の設定で利用できるので便利ですね。という機能追加です。

以上、Goa への細かな修正と、Clue の気の利いた小さな機能追加でした。

Happy hacking!

Discussion