この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
テントの中から失礼します、CX事業本部のてんとタカハシです!
Swagger は API 仕様をコードで管理できる便利なツールですが、時たま PDF に変換したいことがあります。その際、日本語が混じっていると文字化け問題が発生したりするので、その対処法について記事にします。
環境
環境は下記の通りです。 Ruby と Java がインストールされていることを前提とさせて頂きます。
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G103
$ rbenv --version
rbenv 1.1.2-40-g62d7798
$ ruby --version
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin18]
$ gem --version
3.0.3
$ java -version
java version "11.0.10" 2021-01-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode)
Swagger で作成した API 仕様
これを PDF に変換します。
swagger.yaml
swagger: '2.0'
info:
version: '1.0.0'
title: 'サンプル API'
description: 'これはサンプル API です'
host: 'example.classmethod.jp'
tags:
- name: 'User'
description: 'ユーザー情報'
schemes:
- 'https'
paths:
/users:
post:
tags:
- 'User'
summary: 'ユーザーを登録する'
consumes:
- 'application/json'
produces:
- 'application/json'
parameters:
- in: 'body'
name: 'body'
description: '登録するユーザーの情報'
required: true
schema:
$ref: '#/definitions/Request'
responses:
'200':
description: 'OK'
schema:
$ref: '#/definitions/Response'
definitions:
Request:
type: 'object'
required:
- 'name'
- 'age'
properties:
name:
type: 'string'
description: '名前'
example: 'てんとタカハシ'
age:
type: 'number'
description: '年齢'
example: 26
Response:
type: 'object'
required:
- 'userId'
properties:
userId:
type: 'string'
description: 'ユーザーID'
example: '38ec8aaa-fd09-4a9e-bbad-03e87e4765a6'
手順
Swagger
→AsciiDoc
→PDF
の順に変換していきます。AsciiDoc から PDF に変換する際に、日本語フォントを使用します。
Swagger を AsciiDoc に変換する
swagger2markup-cli
というツールを使用して、Swagger を AsciiDoc に変換します。下記からjar
ファイルをダウンロードして、作業用のディレクトリに移動してください。
https://jcenter.bintray.com/io/github/swagger2markup/swagger2markup-cli/1.3.3/
その後、下記のコマンドで Swagger を AsciiDoc に変換します。変換した後は、1つの AsciiDoc にファイルをまとめます。
$ java -jar ./swagger2markup-cli-1.3.3.jar convert -i ./swagger.yaml -d ./adoc
$ cat adoc/overview.adoc adoc/paths.adoc adoc/definitions.adoc > adoc/out.adoc
AsciiDoc を PDF に変換する
AsciiDoc を PDF に変換するためのツールをインストールします。
$ gem install asciidoctor
$ gem install --pre asciidoctor-pdf
日本語フォントをインストールします。
$ gem install asciidoctor-pdf-cjk-kai_gen_gothic
$ asciidoctor-pdf-cjk-kai_gen_gothic-install
gem でインストールしたファイルがどこに置かれているのか確認した後(INSTALLATION DIRECTORY)、KaiGenGothicJP-theme.yml
を作業用ディレクトリにコピーします。
$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 3.0.3
- RUBY VERSION: 2.6.6 (2020-03-31 patchlevel 146) [x86_64-darwin18]
- INSTALLATION DIRECTORY: /Users/<UserName>/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0
...
$ cp /Users/<UserName>/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/asciidoctor-pdf-cjk-kai_gen_gothic-0.1.1/data/themes/KaiGenGothicJP-theme.yml ./
AsciiDoc を PDF に変換します。
$ asciidoctor-pdf -r asciidoctor-pdf-cjk-kai_gen_gothic ./adoc/out.adoc -a pdf-style=KaiGenGothicJP-theme.yml -o output.pdf
できたもの
最終的にできた PDF はこんな感じになりました。日本語も良い感じに表示できてますね。
参考にさせて頂いた記事
おわりに
今月もなんとか記事を4本書けました。気付けば2021年もう1ヶ月経つのか恐ろしや、、、ということで来月も頑張ります。
今回は以上になります。最後まで読んで頂きありがとうございました!