LoginSignup
8
3

More than 5 years have passed since last update.

swagger codegenを使ったオレオレジェネレータの作り方

Last updated at Posted at 2016-12-09

はじめに

swaggerが話題になってしばらくたちます。
自分は仕事でも随分と便利に使っています。
swagger-editorでAPIの定義を書いていきながら実際にリクエストを飛ばして確認したり、他のエンジニアの人にAPI叩いて確認してもらうのに間違いも減ります。
postmanなどは直接swaggerファイルをインポートできるのでswaggar -> postman -> curl生成で簡易管理コマンドを作ったり。

しかし、いざ実装に使おうとすると自分の使っているwebフレームワーク向けのジェネレーターがなかったり、httpクライアントライブラリが違うものが使われていたりと自分の環境に使うには少し足りないなんてことがあると思います。

そんな人たち向けにコードジェネレーターの使い方の紹介です。

swagger-codegen

swagger公式のjava製コードジェネレーターです。
Plaggerな実装になっていてクライアントとサーバーどちらも生成できます。

コードのテンプレートエンジンはmustacheです。

mustache

いろんな言語に互換実装があってswagger-codegenはjmustacheをつかっています。
Mapにreposがあればreposのメンバのnameを出力して無ければ「No repos :(」を出す例

{{#repos}}{{name}}{{/repos}}
{{^repos}}No repos :({{/repos}}

ジェネレーターテンプレートの生成

swagger-codegenはmavenのプロジェクトになっていてビルドにはmavenをインストールしておく必要があります。
まずはチェックアウトしてビルドします。

git clone https://github.com/swagger-api/swagger-codegen
cd swagger-codegen
mvn

次にジェネレーターのテンプレートを生成します。

java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta \
  -o output/myLibrary -n myClientCodegen -p com.my.company.codegen

output/myLibraryにテンプレートのmavenプロジェクトが出力されます。
DefaultCodegenクラスを継承した簡単な実装になっています。

ディレクトリ構成は以下

src
└── main
    ├── java
    │   └── com
    │       └── my
    │           └── company
    │               └── codegen
    │                   └── MyclientcodegenGenerator.java
    └── resources
        ├── META-INF
        │   └── services
        │       └── io.swagger.codegen.CodegenConfig
        └── myClientCodegen (テンプレートファイル)
            ├── api.mustache
            ├── model.mustache
            └── myFile.mustache

定形のものはテンプレートを書き換えれば出力を変えられます。
キャメルケースをスネークケースにしたいとかはjavaで書くことになります。

試しにビルドして実行します。
なぜかテンプレートファイルが生成されていない奴があるのでそれも追加します

cd output/myLibrary
touch src/main/resources/myClientCodegen/myFile.mustache
mvn install
cd ../../
java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar   io.swagger.codegen.SwaggerCodegen generate -l myClientCodegen  -i http://petstore.swagger.io/v2/swagger.json   -o myClient

これでmyClientディレクトリにライブラリが生成されます。

それでは快適なswggerライフを!

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3