TL;DR
Swagger Editorで作成したyaml
ファイルとSwagger UIを利用してPHP
、python
、ruby
のビルトインサーバで動作させます。
VS Code の拡張機能「Swagger Viewer」を使う手もあります。
code --install-extension Arjun.swagger-viewer
本記事ではnode.js
を利用した Web サーバは使用しません。
手順
1. Swagger Editor で yaml を作成する
Swagger Editotでyaml
ファイルを作成します。
作成したyaml
ファイルはメニューの「File」→「Save as YAML」からswagger.yaml
というファイル名でダウンロードできます。
2. Swagger UI をダウンロードする
GitHub の Swagger UI から zip でダウンロードして、dist
フォルダ以下を取り出します。
3. Swagger UI を改造する
dist/swagger-initalizer.js
を以下のように変更し、任意の URL のyaml
ファイルを URL パラメータで指定できるようにします。
@yousan さまの記事「Swagger UIをURLで共有できるようにしました」をほぼそのまま利用しています。ありがとうございます!
window.onload = function () {
// ここにコピペ
function get_url() {
// @see https://stackoverflow.com/questions/35914069/how-can-i-get-query-parameters-from-a-url-in-vue-js
let uri = window.location.href.split('?');
if (uri.length === 2) {
let vars = uri[1].split('&');
let getVars = {};
let tmp = '';
vars.forEach(function (v) {
tmp = v.split('=');
if (tmp.length === 2)
getVars[tmp[0]] = tmp[1];
});
return getVars.url;
}
}
// ここまでコピペ
//<editor-fold desc="Changeable Configuration Block">
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
window.ui = SwaggerUIBundle({
// url: "https://petstore.swagger.io/v2/swagger.json", // ←ここを書き換え
url: get_url(), // ←ここを書き換え
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
});
//</editor-fold>
};
これでhttp://サーバ名/?url=http://サーバ名/swagger.yaml
という URL で公開されている任意のyaml
ファイルを読み込むことができるようになりました。
4. ビルトインサーバを実行する
ビルトインサーバ(言語処理系が持っている Web サーバ)を使って Swagger UI を表示できるようにします。
サーバを使わずdist/index.html
を開いてもyaml
ファイルを読み込むところでうまく動きません。
ここでは @sudahiroshi さまの記事「ワンライナーWebサーバを集めてみた」を参考にしています。ありがとうございます!
まずはターミナルを起動して、ダウンロードした Swagger UI のdist
フォルダへ移動します。
# パスはご自分の環境に合わせて読み替えてください
cd /path/to/swagger-ui/dist/
dist
フォルダ内で下記コマンドを実行します。
php -S 0.0.0.0:8000
python3 -m http.server 8000
ruby -rwebrick -e 'WEBrick::HTTPServer.new(:DocumentRoot => "./", :Port => 8000).start'
5. ビルトインサーバからアクセスできる範囲に yaml ファイルを設置する
dist
フォルダ内においておけば問題ありません。
必要に応じてdocs
フォルダなどを作成してその中にyaml
ファイルを設置しても良いでしょう。
6. ビルトインサーバにアクセスする
上記手順のとおりにしていれば、下記リンクにアクセスすることでローカルにあるビルトインサーバの Swagger UI にアクセスできます。
http://localhost:8000/?url=http://localhost:8000/swagger.yaml
Swagger UI の画面が表示されれば成功です!
おまけ
実は VS Code の拡張機能「Swagger Viewer」を使えばビルトインサーバを建てる必要すらありません。
VS Code がインストールされていれば以下のコマンドでインストールできます。
code --install-extension Arjun.swagger-viewer
おまけ2
dist
ディレクトリ以下を開発用の Web サーバにアップロードすることでリポジトリの外に Swagger UI だけを公開することもできますね。