OpenAPI Generator - community drivenで成長するコードジェネレータ

2018-05-12、OpenAPI Generator が公開されました。

https://github.com/OpenAPITools/openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec

これは Swagger Codegen v2.4をフォークしたプロジェクトで、OpenAPIドキュメントから様々なプログラミング言語のAPIクライアントやスタブサーバーなどのソースコードを生成するツールです。まだベータ版のような状態で、“v3.0.0”として初回リリースすることを予定しています

私は “元” Swagger Codegen のコアメンバーであり、現在 OpenAPI Generator のコアメンバー/創立メンバーで少し中の事情に詳しいので、なぜフォークするに至ったのかといった経緯やOpenAPI Generatorについて書いていきたいと思います。
なお、個人のブログに書いていることですので主観が入っている部分があるかもしれませんが大目に見ていただけますと幸いです。


経緯 - Swagger Codegenの開発状況

2017年7月にOpenAPI Specification 3.0.0がリリースされてからもうじき1年が経ちますが、Swagger CodegenのOpenAPI Specification 3(以下、OAS3)対応はあまり進んでおらず喫緊の課題となっています。

Swagger Codegenの “3.0.0” ブランチで、OAS3への対応を目的とした開発をスポンサー企業であるSmartBear社のエンジニアの方が主導して進められていて、1月にリリース候補版(Swagger Codegen 3.0.0-rc0)がリリースされました。

Release Swagger Codegen 3.0.0-rc0 has been released! · swagger-api/swagger-codegen
なお、リリース候補版ではOAS3に対応している言語はまだごく一部のみとなっています。

このリリースには主目的であるOAS3の対応以外にも大きな変更が加えられており、内部のジェネレータ部分を別リポジトリに切り離したり、テンプレートエンジンを別のライブラリに切り替えています。

残念なことに、これらの変更は主導しているエンジニアが独断で行ったことです。コミュニティのリソースは有限であるため、私たちはOAS3の対応に集中した方が良いと考えていますがコミュニティの声は取り入られませんでした。 また、v3.0.0の開発が行われているブランチではテストコードが一気に無効化された場面もあり、(言い方が悪いかもしれませんが)やや乱暴な印象を受けるところもあります。

Swagger Codegenはこれまで多くの開発者からなる素晴らしいコミュニティに支えられて開発されてきました。 もちろん、これからもそうあるべきだと考えていますが実情とは大きな乖離があります。
この状況を憂慮した William (Swagger Codegenのトップコントリビュータ) はSmartBear社のエンジニアの方々と話し合いを重ねてきましたが、Williamの意向は受け入れられませんでした。

そこで、Williamが中心になってコアメンバーやテクニカルコミッティと話し合った結果、SmartBear社のエンジニアを説得するのは諦め、Swagger Codegenをフォークし、別のプロジェクトとしてこれまで通りのcommunity drivenな開発を続けることを決めました。

以上がSwagger Codegenをフォークするに至った経緯の大要となります。

OpenAPI Generatorの READMEQ&A にもそのあたりの記載がありますのでご興味があればぜひ御覧ください。


OpenAPI Generator

Swagger Codegen v3 及びその開発体制を批判することは当記事の目的ではありません。

OpenAPI Generatorは William の呼びかけで集まった40人以上のコントリビュータによって開発が進められ、本日の公開を迎えることができました。
開発リソースをOAS3の対応に集中し、すべての言語で一通りの実装を行いました。 ですが、まだ不完全な箇所や各言語固有の課題などがまだまだ残っています。私たちが気づけていないジェネレータの不具合もあると思います。

私たちはみなさんからのフィードバック/コントリビュートを必要としています。
ぜひOpenAPI Generatorでみなさんがお使いのプログラミング言語のコードを生成してみてください。(APIクライアントだけでも40以上の言語をサポートしています)

一緒にOpenAPI Generatorを成長させませんか?

https://github.com/OpenAPITools/openapi-generator

OpenAPI Generator Core Team/Founding Member
Akihito Nakano


追記

プロジェクトの公開から半年以上が経ちました。Publickey様に取り上げていただいたのを起点にして、国内でのOpenAPI Generatorの認知が確実に広がっているのを感じています。国内エンジニアのかたがGin(Golang)のジェネレータを追加したり、プルリクエストをされているのを頻繁に見かけるようになりました。🙏🙏🙏

このブログ記事も少しはアクセスがあるようですので、現時点(2018年12月)のOpenAPI Generatorの今後の展望を追記しておきます。

OpenAPI 3.0対応の拡充

すべての言語でOAS3に対応したと前述しましたが、とはいっても3.0で追加されたすべての機能を網羅できているわけではありません。たとえばCallbackオブジェクトは、現在ジェネレータのコア部分の対応が済んだところで、各言語の対応はまだこれからという状況です。ですので短期的には、このような網羅できていない部分の対応を進めるのが課題の一つです(開発のロードマップをこちらで公開しています)。

より強いコミュニティへ

OpenAPI Generatorは「コミュニティ主体」のプロジェクトですので、よりたくさんのエンジニアに関わっていただきたいと考えています。現在、コミュニティにはCore TeamTechnical Committeeという2つの役割を設けていますが、新しい役割を新設して、アクティブに活動されている方に積極的に権限を渡していく試みを始めています。このようにプロジェクトの横への広がりだけでなく、関心のある方はより深く関わっていけるよう縦の広がりも作っていくことを進めています。

もし、OpenAPI Generatorを触ってみて気になったことや不明点がありましたら国内エンジニア向けの gitter チャットルームがありますのでぜひ覗いてみてください。日本国内のコントリビュータが集まっていますので、日本語で気軽に相談できます。