0
0

More than 3 years have passed since last update.

複数のprotoファイルから出力するswaggerファイルを1つにまとめるお話

Posted at

はじめに

前回記事に引き続き、今回もprotoファイルを分けた時の困りごとについてです。

例えば増えすぎたserviceを複数ファイルに分けて記述するようにしたときに、そのままそこからswaggerファイルを出力しようとするとprotoファイルの数だけswaggerファイルが出来上がってしまいます。
それは絶対にやだやだということで複数protoファイルからswaggerファイル1つにまとめて出力する方法を調べたところ日本語情報がなかったようだったので残しておきます。

実践

このようなディレクトリ構造だった場合について考えます。

.
└── pb
    ├── swagger
    └── type
        ├── item.proto
        ├── shop.proto
        └── user.proto

普通に下記のようなコマンドでprotoファイルからswaggerファイルを出力するとそれぞれのファイルが出力されてしまうと思います。

protoc -I<pb/typeのパス> -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --swagger_out=logtostderr=true:./pb/swagger ./pb/type/*.proto

出力ファイル

.
└── pb
    ├── swagger
    │   ├── item.swagger.json
    │   ├── shop.swagger.json
    │   └── user.swagger.json
    └── type
        ├── item.proto
        ├── shop.proto
        └── user.proto

そこでprotoファイルを1ファイルにまとめるには先ほどのコマンドに allow-merge=true オプションと merge_file_name=<出力ファイル名>オプションを追加することで1つのswaggerファイルにまとめられます。

protoc -I<pb/typeのパス> -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --swagger_out=logtostderr=true,allow-merge=true,merge_file_name=api:./pb/swagger ./pb/type/*.proto

出力ファイル

.
└── pb
    ├── swagger
    │   └── api.swagger.json
    └── type
        ├── item.proto
        ├── shop.proto
        └── user.proto

参考

0
0
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
0
0