OpenAPI Generatorの使用方法については、基本的にSwagger Codegenと同じようにカスタマイズできます。
今回の記事では、OpenAPI Generatorの生成コードをカスタマイズします。
環境
- OpenAPI-Generator-CLI
- 6.2.0
ゴール
任意のカスタマイズしたコードを生成することがゴールです。今回の場合は、生成されるモデルにlombok
の@Builder
を付与します。
YAMLは公式が提供しているサンプルを使用します。
修正前コード
import javax.annotation.Generated; /** * A pet for sale in the pet store */ @Schema(name = "Pet", description = "A pet for sale in the pet store") @Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2022-09-25T23:28:56.822+09:00[Asia/Tokyo]") public class Pet { }
修正後コード
import javax.annotation.Generated; import lombok.Builder; /** * A pet for sale in the pet store */ @Schema(name = "Pet", description = "A pet for sale in the pet store") @Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2022-09-25T23:28:56.822+09:00[Asia/Tokyo]") @Builder public class Pet { }
対応
ソースコードを生成できる状態にする
まずは、OpenAPI Generatorを使える状態にします。基本的には、公式GitHubを見ることが一番簡単です。
今回は、jarを直接実行して生成する方法を記載します。Maven Repositoryから最新版のjarを取得します。あとは、Javaがローカルで実行できる状態であれば問題ありません。
java -jar openapi-generator-cli-6.2.0.jar generate \ -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \ -g spring \ -o /output # -i:対象のYAML # -g:自動生成したい言語及びライブラリ # -o:出力先ファイル
生成したいコードのテンプレートを探す
OpenAPI Generatorが提供している自動生成ソースコードのテンプレートはmustache
ファイルで構成されています。テンプレートは次のディレクトリに配備されています。
今回は、Java
のSpring
のソースコードを生成したいので、JavaSpring
の中身をダウンロードします。
そのままの階層構造のまま移植すると構造が深すぎるので、私は次のディレクトリ構造で配備しています。
- root
- templates
- javaSpring
- templates
修正したいテンプレートを探す
mustache
ファイルに慣れていないこともあり、この該当テンプレート探しがかなりつらいです。私は自動生成コードを元に、逆算して探しています。
今回の場合、modelのimportを制御しているmodel.mustache
、modelのクラス部分を制御しているpojo.mustache
を修正します。
<!-- model.mustache --> ~~~ 省略 ~~~ {{^useJakartaEe}} import javax.annotation.Generated; {{/useJakartaEe}} // この行を追加 import lombok.Builder; {{#models}} {{#model}} ~~~ 省略 ~~~
<!-- pojo.mustache --> ~~~ 省略 ~~~ {{/vendorExtensions.x-class-extra-annotation}} // この行を追加 @Builder public class {{classname}}{{#parent}} ... ~~~ 省略 ~~~
カスタムしたテンプレートを元にコード生成する
コード生成時のオプションに-t
を付与して、テンプレートを指定します。
java -jar openapi-generator-cli-6.2.0.jar generate \ -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \ -g spring \ -o output/spring \ -t templates/JavaSpring # -t:テンプレートの指定
ソースコード
終わりに
本業ではSwagger Codegenをカスタマイズしていたのですが、現時点(2022/09/27)の最新版Springには追従してくれていなかったため、OpenAPI Generatorに移行しました。
OpenAPI Generatorが思ったよりもSwagger Codegenと同じような使い方ができたので、良かったです。私の記事では本当に簡単な使い方しか記載していないため、詳細は他の人の記事を見ていただければと思います。