LoginSignup
9
12

More than 5 years have passed since last update.

Swagger YAMLファイルをHTMLへ変換するdocker image

Last updated at Posted at 2018-03-28

SwaggerのYAMLファイルは、Swagger Editorで書く上ではビジュアルに表示されて幸せですが、偉い人たちに報告する際に「Swagger Editor入れてね!」とは言いづらいものです。

そこで @fanfantaSwaggerファイルをHTMLへ変換するを参考に、SwaggerのYAMLファイルをHTMLに一発変換するdocker imageを作成しました。

編集履歴

0.2.0: swagger2markupのプロパティをカスタマイズできるようにしました。
0.3.0: サイドバーの目次をタグでグルーピングするように変更しました。

利用方法

SwaggerのYAMLファイルがあるディレクトリで、次のコマンドを実行してください。

docker run --rm --volume $(pwd):/mnt nmatsui/swagger2html swagger_filename.yaml

Swagger YAMLファイルから生成したAsciiDoc形式のファイルと、HTMLファイルが同じディレクトリに生成されます。

petstore.html.png

swagger2markupのプロパティ

このDockerfileが利用しているswagger2markupには、変換時の挙動を制御するプロパティを与えることができます。
デフォルトで与えるプロパティは以下となりますが、SwaggerのYAMLファイルと同じディレクトリに swagger2markup.properties という名前でプロパティファイルを作っておくと、そのプロパティファイルを使って変換を行います。

swagger2markup.generatedExamplesEnabled=true
swagger2markup.tagOrderBy=AS_IS
swagger2markup.operationOrderBy=AS_IS
swagger2markup.definitionOrderBy=AS_IS
swagger2markup.parameterOrderBy=AS_IS
swagger2markup.propertyOrderBy=AS_IS
swagger2markup.responseOrderBy=AS_IS
swagger2markup.pathsGroupedBy=TAGS

設定可能なプロパティは、Swagger2Markup API Usage guideを参照してください。

asciidoctorの引数

swagger2markupが生成したAsciiDoc形式のドキュメントを、asciidoctorを用いてHTML化しています。色々CSSをカスタマイズしたりもできますが、今回はdepth3までの目次を出す引数を与えているだけです。

asciidoctor -a toc=left -a toclevels=3 swagger2markup_converted_file.adoc

Dockerfile

alpine Linux 3.7をベースにDocker imageを作成しています。詳細はDockerHubのリポジトリnmatsui/swagger2htmlを参照してください。

FROM alpine:3.7
MAINTAINER Nobuyuki Matsui <nobuyuki.matsui@gmail.com>

RUN apk update && apk upgrade && \
    apk --no-cache add bash git openjdk8 ruby && \
    git clone https://github.com/Swagger2Markup/swagger2markup-cli.git /opt/swagger2markup-cli && \
    cd /opt/swagger2markup-cli && \
    ./gradlew jar && \
    mv /opt/swagger2markup-cli/build/libs/swagger2markup-*.jar /usr/local/lib/swagger2markup-cli.jar && \
    ./gradlew clean && \
    cd / && \
    rm -rf /root/.gradle && \
    rm -rf /opt/swagger2markup-cli && \
    gem install -N asciidoctor

WORKDIR /opt
RUN echo $'swagger2markup.generatedExamplesEnabled=true\n\
swagger2markup.tagOrderBy=AS_IS\n\
swagger2markup.operationOrderBy=AS_IS\n\
swagger2markup.definitionOrderBy=AS_IS\n\
swagger2markup.parameterOrderBy=AS_IS\n\
swagger2markup.propertyOrderBy=AS_IS\n\
swagger2markup.responseOrderBy=AS_IS\n\
swagger2markup.pathsGroupedBy=TAGS' > /opt/swagger2markup.properties
RUN echo $'#!/bin/sh \n\
if [ $# -ne 1 ]; then\n\
  echo "usage: docker run --volume \$(pwd):/mnt nmatsui/swagger2html swagger_filename.yaml"\n\
  exit 1\n\
fi\n\
YAML_FILE=$1\n\
BASE_NAME=${YAML_FILE%.*}\n\
if [ ! -e /mnt/${YAML_FILE} ]; then\n\
  echo "${YAML_FILE} not found"\n\
  exit 1\n\
fi\n\
PROPERTIES="/opt/swagger2markup.properties"\n\
if [ -e /mnt/swagger2markup.properties ]; then\n\
  echo "use custom properties"\n\
  PROPERTIES="/mnt/swagger2markup.properties"\n\
fi\n\
java -jar /usr/local/lib/swagger2markup-cli.jar convert -c ${PROPERTIES} -i /mnt/${YAML_FILE} -f /mnt/${BASE_NAME}\n\
asciidoctor -a toc=left -a toclevels=3 /mnt/${BASE_NAME}.adoc\n\
exit 0' > /opt/entrypoint.sh && chmod 755 /opt/entrypoint.sh

ENTRYPOINT ["/opt/entrypoint.sh"]
9
12
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
9
12