🕌
【Rswag】レポジトリ内でswagger.yamlを出し分ける2つの方法
先日Rswagで少し特殊な要件に出会ったので、その際の調査・対応をアウトプットします!
背景
- Railsを既にAPIモードで利用している状態。
- 新規にAPIを追加する際、既存のもと文脈が異なっていた。
- ただ、レポジトリを分離させるほどではない。
→ 🤔(筆者) 「1つのレポジトリ内で、Rswagの出力先yamlファイルを別にできないだろうか...?」
swagger_doc
タグを設定する
方法1: # spec/integration/v2/blogs_spec.rb
describe 'Blogs API', swagger_doc: 'v2/swagger.yaml' do
...
end
こちらが正攻法だと思います。
上記のようにswagger_doc
タグを用いて、パスで出力先yamlファイルを指定できます。
参考
しかし、この方法はシンプルに面倒です。
もしspecファイルが数十個あると、全てについてタグを付与することになります。
また、新たにspecファイルを作成する際にもタグを付与しなければいけません。
そこで今回見つけたのが、「方法2」です。
define_derived_metadata
を利用する
方法2: # spec/rails_helper.rb
config.define_derived_metadata(file_path: Regexp.new('v2/swagger.yaml')) do |metadata|
metadata[:swagger_doc] = 'hoge.yaml'
end
上記のようにdefine_derived_metadata
を使用することで、specファイル全てに一括でタグを設定できます。
少し邪道感はありますが、一応実現可能です。
参照
こちらの方法は楽ですが、タグを設定する方法と比べると、保守性が著しく下がる可能性があります。
おわりに
以上が、レポジトリ内でswagger.yamlを出し分ける方法でした。
訂正が必要な箇所などございましたら、ご指摘頂けますと幸いです!
Discussion