環境
OS:Ubuntu22.04
Go:v1.20.3
oapi-codegen: v2.2.0
やったこと
タイトルにもあるとおり、oapi-codegenを使用してGoの自動生成の実行を行いました。
基本的にはREADMEに従っただけですが、手順を書いておきます。
oapi-codegenインストール
go install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@latest
バージョン確認のコマンドでインストールができているか確認しましょう。
oapi-codegen -version
> v2.2.0
生成したコードを入れるフォルダを作成
自動生成したコードを直接編集すると、再び自動生成を行った時に上書きする恐れや、上書きされるのを避けてyamlファイルの変更を手動で反映させる必要などがでてくることが考えられます。
そこで、自分は自動生成したファイルを入れておくgenerated
フォルダを作成することにしました。
mkdir generated
Configファイルを作成
package: api
output: ./generated/{filename}.gen.go
generate:
echo-server: true
models: true
output-options:
skip-prune: true
ほぼREADMEを真似しただけです。
ただ、自分が使用する自動生成元のファイルでは、$ref
を使って別のファイルを参照しています。このままoapi-codegen
を実行するとエラーがおきます。
そこで、自動的にOpenAPIドキュメントを結合してくれるRedocly CLIを使用しました。
OpenAPIドキュメントを結合
下記コマンドで結合できます。
子ファイルを勝手に読み込んでくれるのでラクでした。
npx @redocly/cli bundle {親ファイル名} -o {出力ファイル名}
Goコード出力
oapi-codegen -config config.yaml {上記で出力したファイル名}
これでOpenAPIドキュメントからGoのコード生成ができました。
最後に
コードの自動生成は初めてさわりましたが、とても便利だと思いました。
コード自動生成ツールを上手く使うことで、設計に時間をより多くかけることができますね。