くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

2019年11月

Swaggerのアレコレ

Swaggerを使ってAPIのドキュメントを作る話。

公式

Swagger-EditorとかUIとか使えばとりあえずすぐ使える。

公式のツール群は素晴らしいと思うのですが、

ある程度規模が大きくなると、ちょっと無理。

何でかって言うと、ソースが1ファイルだから。

大きくなると行数とか普通に万超えるので。

メンテが無理。

あと、Swagger-UIって1ページに全部ずらっと並べるので

数が多くなってくるとますます無理。

なので、ソースのyamlファイルを分割するのと、

静的なHTMLファイルを作るコンバータみたいなのが欲しい。

と思ってたらやっぱりありますね。

色々あるのですが、公式がまとめてる一覧はこちら

で、最終的に下記の構成にした

Yaml⇒HTMLのコンバータはどれもYamlファイル自体は1ファイルにまとまってないとダメなので、

分割したYamlを一つのファイルにまとめるツールが必要。

で、それをやるのに「multi-file-swagger」と「swagger-merger」があるのですが(他にもあると思うけど)、今回は「swagger-merger」を利用。npmのサイト的にこっちの方がちゃんとドキュメント書いてそうだったので。そういうの大事。

npm install --save-dev swagger-merger

# 実行はこんな感じ
swagger-merger -i ./src/index.yaml -o swagger-tmp.yaml

YAMLが出来たらRedocでHTMLにする。

npm install --save-dev redoc-cli

# 実行はこんな感じ
redoc-cli bundle swagger-tmp.yaml

で、これだと修正しながらブラウザで確認できないので、

なんちゃってホットリロードが出来るようにする。

# 必要なモジュール
npm install --save-dev npm-run-all
npm install --save-dev watch
npm install --save-dev light-server

# ソースディレクトリの更新を監視して、更新されたらmakeを流す
watch \"npm run make\" ./src

# HTMLを監視して更新されたらホットリロードする
light-server -s ./dist -p 4000 -w \"./dist/*.html # # reload\"

もろもろやったサンプルはここにあげた。

ファイルの分割の書き方なんかも↑のリポジトリのsrc内参照。

あと、Redocも素晴らしいのですが、若干ん?って思うところもある。

左メニューの各APIへのリンクがsummryになってるのですが、

ここってURLというかYAMLのタグにならないもんだろうか。。。

他のHTML作るツールも軒並みsummary使ってるので、こっちが主流なのかしら?

CentOS8をVirtualBoxでインスト、ついでにMariaDBとRedis

CentOS8が出てたので、VirtualBoxでとりあえずインスト。

centos8のisoをDL

現時点で「CentOS-8-x86_64-1905-dvd1.iso」

VirtualBoxで適当に作成。

新規作成で枠を作ってから、設定でストレージ⇒コントローラ:IDE⇒CDマーク押してDLしたISOを選択してから起動。

インストールの流れはCentOS7と変わらずかな?

ソフトの選択でサーバGUI選ぶのかワークステーション選ぶのか迷うくらい?

そーいえば、.netCoreの開発みたいなアドオンが出てた。あとで試してみよ。

そしたら色々更新。

dnf -y update
dnf -y install epel-release
dnf -y groupinstall "Development Tools"
dnf -y install dkms bzip2 gcc make kernel-devel kernel-headers

CentOS8からyum ⇒ dnfに変わったらしい。

「yum install」でも動くんだけど、dnfへのリンクになってるだけなんだってさ。

で、GuestAddtionのインストールをするのですが、

前はデバイス⇒GustAddtion選んでたと思うのですが、やってみるとエラー。

何でかなと思ったらどうも既にCDが入ってる事になってるらしい。

なので、アクティビティ⇒ファイルでVBox_Guest~~みたいなのがあるので選択してソフトウェアの実行すればOK。

割とハマらずにウィンドのリサイズとかクリップボードの共有とかできるようになってる。

よかたよかた。

ほいで、CentOS8はPython3がデフォになってるそうで。

でもコマンドが「python3」みたいなので、うーん。

いつも通り仮想環境作るか。。。

そしたら色々触ってみましょかね。。。

ひとまず、MariaDBとRedisをインストする。

MariaDB

MariaDBなんだけど普通にやるとまだCentOS8に対応してないよーって出る。

なので↓。

# dnf localinstallで必要なrpmをもってくる
curl -O https://downloads.mariadb.com/MariaDB/mariadb-10.4.8/yum/centos/mariadb-10.4.8-rhel-8-x86_64-rpms.tar

# 解凍
tar xvf mariadb-10.4.8-rhel-8-x86_64-rpms.tar

# 解凍先に移動
cd mariadb-10.4.8-rhel-8-x86_64-rpms

# インストール
sudo dnf localinstall -y galera-4-26.4.2-1.rhel8.0.el8.x86_64.rpm MariaDB-client-10.4.8-1.el8.x86_64.rpm MariaDB-common-10.4.8-1.el8.x86_64.rpm MariaDB-server-10.4.8-1.el8.x86_64.rpm MariaDB-shared-10.4.8-1.el8.x86_64.rpm

# サービスの有効化と起動
sudo systemctl enable mariadb
sudo systemctl start mariadb

# rootのパスワードとかの設定(最初にパスワード聞かれるけど、空のままエンター)
sudo mysql_secure_installation

#いちを再起動
sudo systemctl restart mariadb

MariaDBは10.4.8じゃないとCentOS8で動かせない様子。

新しい分には別に良いか。。。

Redis

Redisは何か楽になった。

Redis5.0っぽい(2019/11/2)

# インストはこれだけでイケた
sudo dnf install -y redis

# サービスの有効化と起動
sudo systemctl enable redis
sudo systemctl start redis

# 動作確認
redis-cli

# ↑のクライアント上で↓打って PONGって出てくればOK
ping

# いったん抜ける
exit

# ちょろっと設定
sudo vi /etc/redis.conf 

bind 127.0.0.1
↓
bind 0.0.0.0

requirepass  <パスワードを入れる>

# 再起動
sudo systemctl restart redis

# もう一回クライアント
redis-cli

# pingでこんどは「(error) NOAUTH Authentication required.」って出ればOK
ping

# そしたらログイン
auth <上で指定したpassword>

# もっかいpingで、PONGって出ればOK
ping

両方ともインストールはなんか楽になりましたね。。。

問合せ