Kashibuchi’s blog

勉強のこと、趣味のこと、日々のこと

Swaggerに触れる

最近記事を書いていないことに気づいて慌てて書く。

「何だこのyaml?」から

業務で他プロジェクトのドキュメントをあさっていたところ、ExcelやWordのドキュメントを期待していたのに.yamlのファイルを2~3個発見。
どうやらAPIの定義が書いてあるようだが、テキストエディタで開いたままだと何が書いてあるのかさっぱりわからない。
で、担当の方に聞いたところ、Swaggerを使用して書いたものだという。
Swagger Editorを使ってファイルを開くと、なんかいい感じのドキュメントに見える!ナニコレー!

ということで、軽く調べて記事にする。

OpenAPIというもの

support.smartbear.com

APIを記述したり文書化するためのオープンソースの書式だそうで。
もともとはSwagger仕様だったものが、OpenAPIとなり最新バージョンは3.0.0。
定義の記述はJSONまたはYAMLで記述可能。
おすすめはYAMLとのこと。

そもそもYAMLがよくわからん

Spring の教材の、設定ファイル関連の説明で見たけどそもそもどういうものなの?
ということで。

www.educative.io

説明は上記リンクにあったのでざっくりと読んだ。
「"」とかそもそも書かずに済むやつなんですね。
業務で見たファイルは結構「"」入ってたなあ。
JSONXMLと比較して読みやすいし、コメントも書けるしシンプル!ということのよう。

分量が少ないけど、今日はここまで。

学習したいこと、考えをまとめておきたいこと

開発環境について

Vagrant + Elasticsearchのローカル環境構築の手順ができたのと同時に、業務にてElasticsearchのSSL対応(HTTPS接続)の設定を完了。 あと、Elasticdumpの使用方法を理解して、実際に動作の方法についてメンバーに展開した。 ちょうどよくKindle Unilimitedの対象にこいつ↓が。

www.amazon.co.jp

内容的にちょっと古いけど、バージョンは業務で使用しているものと一致するのでデータ構造の理解にかなり助かった。 クエリはSQLのようにはまだ自分で書けないけど。 ドキュメント、ドキュメントタイプ、インデックス……、など構造を書籍で理解したおかげで、先ほど書いたElasticdumpで取り込もうとしているデータがどんなものなのかの理解に役立った。

今回の業務で作るアプリの環境をまるっと作れるように用意はしておきたい。

AWSによるサーバーレスアプリ開発について

これも業務、というか課題?でやることになったもの。 業務ではないので厳しくはないが、未知のもの過ぎて手が止まる止まる。 また、スクラム開発でこれを行うものだから、自分の振舞い方からわからなくなってしまい戸惑っている現状。 モブプログラミングなのに自分主導で自分でがつがつ作ってしまっている。。。よくない。。。

とにかくAWSがわからなすぎるのでプライベートでAWSアカウントを取得。 無理のない範囲でいろいろ触ってみることにする。

会社の研修でAWSの研修受けたけど、意味が分からな過ぎて全然役に立ってないという悲しみ。

DDDについて

興味本位。 とりあえずもちこちゃん↓購入。 物理本で欲しかったんだけどなあ。 個人で出しているものだから入荷する期待はできなかったので、とりあえず電子書籍で購入。 暇なときに読むことにする。 物理本出たらお布施として買おう。

booth.pm

テストソースを書いて行う単体テストを定着させる活動

意識しないとたぶん全然現場に定着しない、というかそもそもやろうとすらしない。 よくない。 次回の開発から導入しましょうよと持ち掛けるも、いきなり導入して失敗したら困るから小さな改修から導入しましょうよと言われてしまった。 小さな改修、いつどこであるんでしょうか。 毎回そこそこ大改修じゃないですか。

正直、テストを書く意識のないソースの改修でテストケースを書くよりも、 最初からテストケースを書くつもりで一から作ったソースに対してテストを書くほうが万倍楽なんですよ。

ということで自分の意見を通して安心してテストを書くプロジェクト・チームにしたいのでそのためのプレゼンをします。

プレゼンに向けて整理すべき、やるべきこと。

  • 各テスト段階におけるやるべきことの整理
  • 改修ソースにテストを書くつらさと新規作成ソースにテストを書く気楽さの具体的な比較
  • じゃあどう書けばいいのさ→実例としてアプリを作成し、Githubにて公開

マジで今後の修正スピードの向上のため、急ぎ取り組んでいくことにする。

Vagrantで作成した環境 + Elasticsearch + Kibanaのインストールと実行

作業環境について

インストール済のbox

>vagrant box list
bento/centos-7.2 (virtualbox, 2.3.1)
bento/centos-7.8 (virtualbox, 202010.22.0)
centos/7         (virtualbox, 2004.01)

プラグインのリスト

>vagrant plugin list
vagrant-hostmanager (1.8.9, global)
  - Version Constraint: > 0
vagrant-omnibus (1.5.0, global)
  - Version Constraint: > 0
vagrant-vbguest (0.30.0, global)
  - Version Constraint: > 0

Vagrantfileの作成

>vagrant init centos/7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
  
  
>fc /n Vagrantfile_org Vagrantfile
ファイル Vagrantfile_org と VAGRANTFILE を比較しています
***** Vagrantfile_org
    8:  Vagrant.configure("2") do |config|
    9:    # The most common configuration options are documented and commented below.
***** VAGRANTFILE
    8:  Vagrant.configure("2") do |config|
    9:    if Vagrant.has_plugin?("vagrant-vbguest")
   10:      config.vbguest.auto_update = false
   11:    end
   12:    # The most common configuration options are documented and commented below.
*****

***** Vagrantfile_org
   26:    # config.vm.network "forwarded_port", guest: 80, host: 8080
   27:
***** VAGRANTFILE
   29:    # config.vm.network "forwarded_port", guest: 80, host: 8080
   30:    config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh"
   31:
*****

***** Vagrantfile_org
   31:    # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
   32:
***** VAGRANTFILE
   35:    # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
   36:    config.vm.network "forwarded_port", guest: 9200, host: 19200, host_ip: "127.0.0.1"
   37:    config.vm.network "forwarded_port", guest: 5601, host: 15601, host_ip: "127.0.0.1"
   38:
*****

vagrant upの実行

>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos/7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' version '2004.01' is up to date...
==> default: Setting the name of the VM: elasticsearch_default_1634821269779_88784
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
    default: 9200 (guest) => 19200 (host) (adapter 1)
    default: 5601 (guest) => 15601 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Rsyncing folder: /cygdrive/c/Users/kamin/work/VagrantBase/elasticsearch/ => /vagrant

Tera Termマクロ

; Vagrant macro
; 「vagrant ssh-config」で確認

; this file path
getdir dir

; port
port=2222

; private keyを指定します。上で取得したIdentityFileの値に書き換えます。
keyfile='C:/Users/kashibuchi/work/VagrantBase/elasticsearch/.vagrant/machines/default/virtualbox/private_key'

sprintf2 constr 'localhost:%d /ssh /2 /auth=publickey /user=vagrant /keyfile=%s' port keyfile

connect constr

vagrantユーザでログイン後、諸々のインストール

参考

Elasticsearch + Kibana + LogstashをCentOS7にインストールしてみた - Qiita

コマンド

[vagrant@localhost ~]$ sudo yum install -y https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm
・・・略・・・
Complete!
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo yum install -y vim
Loaded plugins: fastestmirror
Determining fastest mirrors
・・・略・・・
Complete!
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo yum install -y curl 
Loaded plugins: fastestmirror
・・・略・・・
Complete!
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo vim /etc/yum.repos.d/elasticsearch.repo
[vagrant@localhost ~]$ cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

[vagrant@localhost ~]$ sudo yum install -y elasticsearch-6.8.3
Loaded plugins: fastestmirror
・・・略・・・
Complete!
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo yum install -y kibana
Loaded plugins: fastestmirror
・・・略・・・
Complete!
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo vi /etc/elasticsearch/elasticsearch.yml # network.host: 0.0.0.0 ← 追加
[vagrant@localhost ~]$ sudo vi /etc/kibana/kibana.yml # server.host: "0.0.0.0" ← 追加
[vagrant@localhost ~]$ sudo systemctl start firewalld
[vagrant@localhost ~]$ sudo firewall-cmd --add-port=5601/tcp --zone=public --permanent
success
[vagrant@localhost ~]$ sudo firewall-cmd --add-port=9200/tcp --zone=public --permanent
success
[vagrant@localhost ~]$ sudo firewall-cmd --add-service=ssh --zone=public --permanent
Warning: ALREADY_ENABLED: ssh
success
[vagrant@localhost ~]$ sudo firewall-cmd --reload
success
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ systemctl daemon-reload # 正直うっかりsudoでやらなかった
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
Authentication is required to reload the systemd state.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo systemctl restart elasticsearch kibana 
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ sudo systemctl enable elasticsearch kibana
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
[vagrant@localhost ~]$ 
[vagrant@localhost ~]$ curl http://localhost:9200
{
  "name" : "iNfHYdH",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "vuyKU4CfQgOZoIFPgbexCA",
  "version" : {
    "number" : "6.8.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "0c48c0e",
    "build_date" : "2019-08-29T19:05:24.312154Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
[vagrant@localhost ~]$ curl http://localhost:5601 # ブラウザからリダイレクト?されてちゃんとしたページが参照できる\(なお、日本語化は7.0以降の為、できなかった\)
[vagrant@localhost ~]$ 

ブラウザでの確認

f:id:KashibuchiKyamin:20211021232210p:plainf:id:KashibuchiKyamin:20211021232335p:plain

まとめ

とりあえずできた。 Firewalldを設定しないと接続できないのはちょっと辛いなと。 過去にそこそこがっつり調べたんだけどなー。覚えていないなFirewalldは。

業務で作業するならたぶんプロキシ環境なので、 - Vagrantのplugin - Vagrantfile - yumの設定ファイル ↑この辺のプロキシ設定をすればいいのかな。

Vgarnt up がうまくいかない

qiita.com

↑そのまま実行。なるほど。

>vagrant up

・・・略・・・

 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
No package kernel-devel-3.10.0-1127.el7.x86_64 available.
Error: Nothing to do
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

yum install -y kernel-devel-`uname -r`

Stdout from the command:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
No package kernel-devel-3.10.0-1127.el7.x86_64 available.


Stderr from the command:

Error: Nothing to do

>vagrant ssh
$ sudo yum update kernel*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-1160.45.1.el7 will be installed
---> Package kernel-tools.x86_64 0:3.10.0-1127.el7 will be updated
---> Package kernel-tools.x86_64 0:3.10.0-1160.45.1.el7 will be an update
---> Package kernel-tools-libs.x86_64 0:3.10.0-1127.el7 will be updated
---> Package kernel-tools-libs.x86_64 0:3.10.0-1160.45.1.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================================
 Package                         Arch                 Version                            Repository             Size
=====================================================================================================================
Installing:
 kernel                          x86_64               3.10.0-1160.45.1.el7               updates                50 M
Updating:
 kernel-tools                    x86_64               3.10.0-1160.45.1.el7               updates               8.2 M
 kernel-tools-libs               x86_64               3.10.0-1160.45.1.el7               updates               8.0 M

Transaction Summary
=====================================================================================================================
Install  1 Package
Upgrade  2 Packages

Total download size: 67 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for updates
(1/3): kernel-tools-3.10.0-1160.45.1.el7.x86_64.rpm                                           | 8.2 MB  00:00:03
(2/3): kernel-tools-libs-3.10.0-1160.45.1.el7.x86_64.rpm                                      | 8.0 MB  00:00:03
(3/3): kernel-3.10.0-1160.45.1.el7.x86_64.rpm                                                 |  50 MB  00:00:10
---------------------------------------------------------------------------------------------------------------------
Total                                                                                6.4 MB/s |  67 MB  00:00:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : kernel-tools-libs-3.10.0-1160.45.1.el7.x86_64                                                     1/5
  Updating   : kernel-tools-3.10.0-1160.45.1.el7.x86_64                                                          2/5
  Installing : kernel-3.10.0-1160.45.1.el7.x86_64                                                                3/5
  Cleanup    : kernel-tools-3.10.0-1127.el7.x86_64                                                               4/5
  Cleanup    : kernel-tools-libs-3.10.0-1127.el7.x86_64                                                          5/5
  Verifying  : kernel-3.10.0-1160.45.1.el7.x86_64                                                                1/5
  Verifying  : kernel-tools-libs-3.10.0-1160.45.1.el7.x86_64                                                     2/5
  Verifying  : kernel-tools-3.10.0-1160.45.1.el7.x86_64                                                          3/5
  Verifying  : kernel-tools-libs-3.10.0-1127.el7.x86_64                                                          4/5
  Verifying  : kernel-tools-3.10.0-1127.el7.x86_64                                                               5/5

Installed:
  kernel.x86_64 0:3.10.0-1160.45.1.el7

Updated:
  kernel-tools.x86_64 0:3.10.0-1160.45.1.el7             kernel-tools-libs.x86_64 0:3.10.0-1160.45.1.el7

Complete!
$exit
>vagrant reload --provision
・・・すごく長い標準出力・・・
3.10.0-1160.45.1.el7.x86_64.
Redirecting to /bin/systemctl start vboxadd.service
Redirecting to /bin/systemctl start vboxadd-service.service
Unmounting Virtualbox Guest Additions ISO from: /mnt
==> default: Checking for guest additions in VM...
==> default: Rsyncing folder: /cygdrive/c/Users/kamin/work/VagrantBase/centOsPrototype/ => /vagrant
> 

で、終わり。 なるほどなー。

ついでに色々入れた

>vagrant ssh
$ echo vagrant | sudo yum install -y https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm
$  sudo yum install -y vim

qiita.com

$ sudo vim /etc/yum.repos.d/elasticsearch.repo

で編集

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

でやってみる

$ sudo yum install -y elasticsearch-6.8.3
・・・略・・・
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Creating elasticsearch group... OK
Creating elasticsearch user... OK
  Installing : elasticsearch-6.8.3-1.noarch                                                                      1/1
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch
  Verifying  : elasticsearch-6.8.3-1.noarch                                                                      1/1

Installed:
  elasticsearch.noarch 0:6.8.3-1

Complete!

いけた! わーい。

HTML・CSS学習記録

考えてみたら全然プログラミングじゃないので今日から改題。

dotinstall.com

↑完了。 sectionタグとか知らなかったのでやってよかった。 次はCSSやって、Bootstrapをやって……画面関連は一通りおさらいしたいな。