経緯
「APIの設計書、swaggerで管理しましょう!」「GitHub Pages使えばよくね?」
頭上で飛び交う言葉たちの意味がわからなかったので、調べて使ってみた。
Swagger
Swagger とは、RESTful APIを構築するためのオープンソースのフレームワークのこと。Swagger Spec を書いておけば自動的にドキュメント生成、ドキュメントから実際にリクエストを投げることもできる。
「Swagger Spec」-> Swaggerの書式で記述した仕様書。JSONもしくはYAML形式で記述。
GitHub Pages
GitHub Pages とは、GitHubがユーザーに提供しているウェブホスティングサービス。基本的に静的なウェブページをホスティングするサービスであるため、データベースを用いるような動的なウェブページは公開できない。また、プライベートリポジトリでも、GitHub Pagesを設定するとインターネット上で公開されるので注意が必要。
導入方法
-
リポジトリを作成し、IntelliJで開く。
-
/docs
ディレクトリを作成。 -
Swagger UIリポジトリに含まれる
dist
ディレクトリをコピーする。
Swagger-UI -
作成した
docs
ディレクトリ配下に、コピーしてきたdist
ディレクトリを配置する。 -
dist/index.html 内のswagger定義の参照先を変更する。
-
ファイル一式をGitHubにPushする。
-
GitHub > Settings > Options > GitHub Pages からGitHub Pagesを有効にする。
-
https://{user_name}.github.io/{repository_name}/
で確認する。
クローン -> ローカルでの動作確認
Swagger-UIから、リポジトリをクローンする。
ちょっと時間がかかるけど、気にせず待機。
swagger-uiリポジトリをクローンできたら、
distディレクトリをコピーしてdocs配下に貼り付ける。
何やらたくさんコピーされた!
ちなみに、ローカル環境で現場どんな見た目なのか見たいときは、
index.hmtl の上で右クリック > Open in Browser > Chrome で見れる。
開発していて今自分どんな見た目のswagger書いてるの?って確認したいとき便利!
今開くと、ペットストアが表示された〜〜
これから自分のswaggerを表示させるため、index.htmlを修正するぞ〜〜!
-
docs
配下にindex.html
を作成。 -
作成した
index.html
にdist
配下のindex.html
の内容をコピーする。 -
docs
配下のindex.html
を編集する。-
7, 8, 9 行目と、37, 38行目のスクリプトを読み込んでいる箇所のルートを修正。
-
43行目のurlをspec.yamlに修正。
-
< docs/index.html >
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI</title>
<link href="./dist/swagger-ui.css" rel="stylesheet" type="text/css">
<link href="./dist/favicon-32x32.png" rel="icon" sizes="32x32" type="./dist/image/png"/>
<link href="./dist/favicon-16x16.png" rel="icon" sizes="16x16" type="./dist/image/png"/>
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body
{
margin:0;
background: #fafafa;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./dist/swagger-ui-bundle.js"></script>
<script src="./dist/swagger-ui-standalone-preset.js"></script>
<script>
window.onload = function() {
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
url: "spec.yaml",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
</script>
</body>
</html>
-
docs
配下にspec.yaml
を作成。 -
作成した
spec.yaml
に設計内容をどんどん書き込む。
(yamlの書き方はここに書くと長くなるから別記事で!!)
< docs/spec.yaml >
openapi: 3.0.0
info:
version: 1.0.0
title: ポケモン図鑑
paths:
"/pokemon/{name}":
get:
tags:
- "ポケモン情報取得API"
summary:
"ポケモン情報取得API"
description:
"指定した名前のポケモンを検索し、情報を取得します。"
parameters:
- name: "name"
in: "path"
description: "ポケモンの名前"
required: true
type: "string"
responses:
200:
description: "Success"
content:
application/json:
schema:
type: "object"
properties:
no:
type: "string"
name:
type: "string"
type:
type: "string"
comment:
type: "string"
example:
no: "007"
name: "ゼニガメ"
type: "みず"
comment: "こうらに とじこもり みをまもる。"
400:
description: "BadRequest"
content:
application/json:
schema:
type: "object"
properties:
status:
type: "string"
example: "BAD_REQUEST"
message:
type: "string"
example: "BAD_REQUEST"
404:
desctiption: "NotFound"
content:
application/json:
schema:
type: "object"
properties:
status:
type: "string"
example: "NOT_FOUND"
message:
type: "string"
example: "NOT_FOUND"
準備完了!!!(長かった……。)
docs/index.hmtl
の上で右クリック > Open in Browser > Chrome で確認!!
おぉ……
おおおおおおおおおおおおおおおおおおおおおおお!!!!!(嬉しい)
プッシュ -> github上での設定
ローカル環境で動作確認が済んだら、早速プッシュしていくぞい!!
ここであわてんぼう発動…
$ git push origin master
error: src refspec master does not match any
なにこれ…?!と思ったらコミットしてなかった……。
慌てずしっかりコミットしましょう(自戒)
はい!!無事プッシュ完了!!!!
ここからはgithubに移動して設定します〜〜
GutHub > Settings > Options
スクロールしていくと真ん中あたりに GitHub Pages
の設定欄が出てくるので、
Sourceに master branch /docs folder
を設定!!
この設定をするとdocsリポジトリ以下のものがGitHub Pagesとして公開されるようになる。
設定が完了すると自動でページの一番上まで戻るので、
もう一度真ん中のGitHub Pagesのところにスクロールしていくと、
Your site is ready to be published at xxxxxx
上記の文言が表示がされるので、
xxxxx
部分のURLにアクセスして、想定通りに表示されることを確認する。
Fooooooooooooooooooooooooooooo!!!!!!!!!!!!!
やりました!!!!!!!!!!!!!!!!!
まとめ
調べて読んでみて「ふむふむ」と思うだけじゃなくて、実際に手を動かすと理解できていなかったところがわかるからよかった。swaggerの書き方の知識・理解をもっと深めたいと思った。あと、実際に動くとマジで嬉しい。