自作ウェブアプリで利用しているEchoフレームワークをV4系からV5系にアップデートしました
主に修正が必要だった部分をメモしておきます
echo.contextが値渡しからポインタになった
自分のコードはOpenAPIを利用したスキーマ駆動開発の手法を取り入れていて、ハンドラーは以下のように定義しています
func (h AppHandler) Health(ctx echo.Context) error {
return ctx.String(http.StatusOK, "OK")
}echo v5ではコンテキストが値渡しからポインタに変換されたため、各ハンドラーを以下のように修正する必要がありました
func (h AppHandler) Health(ctx *echo.Context) error {
return ctx.String(http.StatusOK, "OK")
}各ハンドラーを修正する必要があったため数は多かったものの、自分のケースではそこまで大掛かりなコードの変更は発生しませんでした
ログシステムの変更
ログシステムがEcho独自のログシステムから、Go標準のslogへ変更されました
そのため、ログ出力部分をすべて変更する必要がありました
Echo v4では以下のようにログを出力しています
if err != nil {
e.Logger.Errorf("コンテンツデータ個別登録に失敗しました: %v, Response: %v", err, insertResp.Result)
return err
}Echo v5では以下のようになりました
if err != nil {
e.Logger.Error("コンテンツデータ個別登録に失敗しました", "error", err, "response", insertResp.Result)
return err
}slogは構造化ログという仕組み(考え方?)を取り入れており、文字列してログを出力する、という従来の方式ではなくキーバリュー形式でログを出力するのに近いイメージなっているみたい
ログを単なる「デバッグや確認用」として出力するのではなく、「ElasticSearchなどの基盤で分析するためのデータ」として利用できるようにするための仕組み
なので、今後はログデータも分析前提のデータとして意識する必要がありそう
(でも今回はバージョンアップだけにしたため、すべてのログは構造化しおらずfmt.sprintf()で妥協して出力している場所もある)
oapi-codegen用のカスタムテンプレート準備
今回一番大変だった(けど、AIに全部やってもらった)のが、oapi-codegenがEcho v5に対応しておらず、出力されたコードがそのまま利用できなかったということ
対策としてはカスタムテンプレートを準備し、Echo v5に合わせた内容でコードを出力できるように修正してもらった

ちなみにこのブログを記載している時点で2.7.0がリリースされており、Echo v5に対応しているとのこと
https://github.com/oapi-codegen/oapi-codegen/releases/tag/v2.7.0
自分のアプリもver 2.7.0を利用するように変更する必要がある
タスクリストに追加しておこう