🕌

【Rswag】レポジトリ内でswagger.yamlを出し分ける2つの方法

2022/09/13に公開

先日Rswagで少し特殊な要件に出会ったので、その際の調査・対応をアウトプットします!

背景

  • Railsを既にAPIモードで利用している状態。
  • 新規にAPIを追加する際、既存のもと文脈が異なっていた。
  • ただ、レポジトリを分離させるほどではない。

→ 🤔(筆者) 「1つのレポジトリ内で、Rswagの出力先yamlファイルを別にできないだろうか...?」

方法1: swagger_docタグを設定する

# spec/integration/v2/blogs_spec.rb
describe 'Blogs API', swagger_doc: 'v2/swagger.yaml' do
  ...
end

こちらが正攻法だと思います。
上記のようにswagger_docタグを用いて、パスで出力先yamlファイルを指定できます。
参考

しかし、この方法はシンプルに面倒です。
もしspecファイルが数十個あると、全てについてタグを付与することになります。
また、新たにspecファイルを作成する際にもタグを付与しなければいけません。

そこで今回見つけたのが、「方法2」です。

方法2: define_derived_metadataを利用する

# 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