前回、こちらの記事でNode.jsを使ったSwaggerによるAPI仕様書を見る方法を紹介しました。
しかし、
- Node.jsなんて使ったことねーよ
- このためだけにNode.jsインストールするとか面倒
という人もいるかもしれません。
そこで奥さん、Dockerを使って超カンタンにやる方法を紹介します。
前提
- dockerコマンドが使えること
- docker-composeコマンドが使えること
Docker for Mac, Docker for Windows, Docker ToolBox、ご自分の環境にあったものを用意しましょう。
ちなみに筆者の環境はこうです。
newgyu@newgyu-XPS-13-9350:~/Desktop/test$ uname -a
Linux newgyu-XPS-13-9350 4.4.0-33-generic #52-Ubuntu SMP Fri Jul 22 19:16:44 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
newgyu@newgyu-XPS-13-9350:~/Desktop/test$ docker version
Client:
Version: 1.11.0
API version: 1.23
Go version: go1.5.4
Git commit: 4dc5990
Built: Wed Apr 13 18:38:59 2016
OS/Arch: linux/amd64
Server:
Version: 1.11.0
API version: 1.23
Go version: go1.5.4
Git commit: 4dc5990
Built: Wed Apr 13 18:38:59 2016
OS/Arch: linux/amd64
newgyu@newgyu-XPS-13-9350:~/Desktop/test$ docker-compose --version
docker-compose version 1.6.2, build 4d72027
ファイルを用意する
.
├── docker-compose.yaml
└── example.yaml
用意するのはこの2つだけです。
viewer:
image: newgyu/swagger-spec-viewer
volumes:
- "./example.yaml:/opt/swagger/api/swagger.yaml"
ports:
- "8080:8080"
example.yamlはswagger specificationに従って書かれたYAMLファイルです。(つまりはAPI仕様)
今回の例では http://editor.swagger.io/#/ こちらから拝借してきたものをGistに置いてありますので参照してください。
実行する
docker-compose.yaml
が置いてあるディレクトリでdocker-compose up
を実行してください。
newgyu@newgyu-XPS-13-9350:~/Desktop/test$ docker-compose up
Starting test_viewer_1
Attaching to test_viewer_1
viewer_1 |
viewer_1 | > swagger-spec-viewer@1.0.0 prestart /opt/swagger
viewer_1 | > npm install
viewer_1 |
viewer_1 |
viewer_1 | > swagger-spec-viewer@1.0.0 start /opt/swagger
viewer_1 | > node index.js
viewer_1 |
viewer_1 | Your server is listening on port 8080 (http://localhost:8080)
viewer_1 | Swagger-ui is available on http://localhost:8080/docs
example.yamlの記法が間違っていなければ上記のように8080ポートでswagger-spec-viewerが起動します。
http://localhost:8080/docs でexample.yamlの内容が見えるはずです。
(Docker ToolBoxを使っている場合は http://192.168.99.100/docs )
若干解説
- newgyu/swagger-spec-viewerのDockerイメージの定義はこんなもんです
- イメージの中に入っているnodejs-server-serverは前回swagger-editorからgenerate-serverしたものと全く同じです
- docker-compose.yamlのvolumes定義で
./example.yaml:/opt/swagger/api/swagger.yaml
としてローカルのexample.yamlをコンテナにマウントしています