Swashbuckle.AspNetCore.Cli と OpenAPI Generator を使って Web API のクライアントを生成する

はじめに

Swashbuckle.AspNetCore を使うことで、ASP.NET Core MVC で実装した Web API に Swagger UI を組み込める。

docs.microsoft.com

Web API の動作確認をする程度ならこれで十分だけど、せっかく Swagger/OpenAPI を使うなら、クライアントのソースコードも生成したい。当然、自動化も。

Swashbuckle.AspNetCore.Cli と openapi-generator を使えばできそうなので試してみた。

Swashbuckle.AspNetCore.Cli

Swashbuckle.AspNetCore.Cli を使って swagger.json を生成する。

インストール

Swashbuckle.AspNetCore.Cli .NET Core 2.1 SDK 以降で利用可能。.NET Core グローバルツールとしてインストールできる。

dotnet tool install -g swashbuckle.aspnetcore.cli

.NET Core 3.0 SDK 以降なら、.NET Core グローバルツールだけでなく、ローカルツールとしてもインストールできる。今回はこちらを使用。

dotnet new tool-manifest
dotnet tool install swashbuckle.aspnetcore.cli

swagger.json 生成

dotnet swagger コマンドで swagger.json を生成する。

dotnet swagger tofile --output [output] [startupassembly] [swaggerdoc]

[output] には swagger.json、[startupassembly] は Swashbuckle.AspNetCore を組み込んだ Web APIアセンブリのパス、[swaggerdoc] には Startup 内で SwaggerDoc メソッドに渡している名前(ここでは "v1") を指定した。

openapi-generator

Swashbuckle.AspNetCore.Cli を使って出力した swagger.json からクライアントのソースコードを生成するには、openapi-generator を使う。

インストール

openapi-generator の CLI は npm でインストールするのが一番簡単。

npm install @openapitools/openapi-generator-cli -g

クライアントのソースコードを生成

TypeScript 版のクライアントのソースコードを生成してみた。

npx @openapitools/openapi-generator-cli generate -i swagger.json -g typescript-axios -o .\lib

-g にはソースコードの生成につかうジェネレーターを指定する。サポートしているジェネレーターは下記ページを参照。

openapi-generator.tech

自動化

Web API プロジェクトのビルド後イベントのコマンドラインに下記を追加。

dotnet swagger tofile --output $(OutDir)swagger.json $(TargetPath) v1
npx @openapitools/openapi-generator-cli generate -i $(OutDir)swagger.json -g typescript-axios -o $(OutDir)lib

これで Web API プロジェクトをビルドすると、自動で TypeScript のクライアントライブラリが生成されるようになった。

まとめ

Swashbuckle.AspNetCore を組み込んだ Web API のプロジェクトに対して、Swashbuckle.AspNetCore.Cli と openapi-generator-cli を使うことで、swagger.json 生成とクライアントソースコード生成がコマンドラインのみで行えるようになり、自動化できた。