Spring Bootで簡単なCRUDアプリを作成

# はじめに

先輩社員の方と一緒に業務中に自己学習の一環として簡単なWebアプリを作成を行ったので、その記録を残します。

##背景
日々業務でコードを書くことがありますが、
社内で行われた勉強会（講演会）で

 - 業務内容以外でもやはり技術力向上が大事
 - 継続的に学習を続けることが大事　

ということを痛烈に感じさせられる機会がありました。
ただ、そうは言っても業務外で一人で継続して学習するのは難しいと感じていたところ、
同じチームの先輩から一緒に継続的に勉強してみない？という話を頂きました。

心境としては
「一人でやるより相手がいる分、やらなきゃという強制力持たせることが出来る」
かつ
「会社自体は業務時間内で自己学習を行ってもよい雰囲気である」
（普通業務もあるので本人の負担になりすぎなければ）

と断る理由が全くない良いお話だったので、
業務時間内で先輩と一緒に継続的に自己学習を始めることにしました。

今回、記事を残す内容はその始まりの部分
今後の進め方の模索も含めて最初に簡単なWebアプリを作ってみた際の記録です。

##作成の流れ

一緒に学習する時間（ビデオ会議）としては週に二回1時間ずつだけ確保し、
「お互いこれができるようになって来よう」を決めて
次の会で成果確認を繰り返す形で進めました。
<br>

⓪使用する言語、ツールなど大まかな方針を定める

  <details><summary>目標：とにかく動くWebアプリの作成（どうせなら普段使わない技術ツールも使って）

| 利用言語、ツール |  選択結果| 
|:-----------|:------------|
| 言語           | Java (フレームワーク：Spring)        |
| DB     | PostgreSQL     |
| DBツール       | DBeaver| 
| ソース管理        | github| 
| ビルドシステム       | Gradle| 

<br>
①以下を参考にPostgreSQL、STS(Eclipse Spring Tool Suite)の導入する
・PostgreSQL
　[PostgreSQL を Windows にインストールするには](https://qiita.com/tom-sato/items/037b8f8cb4b326710f71)
・Eclipse Spring Tool Suite
　[EclipseでSpring Bootの環境構築 | 分かりやすく図解で説明](https://medium-company.com/spring-boot%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/)
　[開発環境構築 Eclipse STS インストール](https://spring.pleiades.io/guides/gs/sts/)
<br>
②以下を参考に定番のHelloWorldを画面に出力してみる
（Thymeleafというテンプレートが存在していたのでそれを使ってみる）
　[Spring Boot で Thymeleaf 使い方メモ](https://qiita.com/opengl-8080/items/eb3bf3b5301bae398cc2)
<br>
③以下を参考にPostgreも繋げてCRUD操作を行ってみる
　[Spring Boot＋JPAでデータベースに接続する方法](https://medium-company.com/spring-boot%ef%bc%8bjpa%e3%81%a7%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/)
<br>
④以下を参考にレイアウトがさみしいのでbootstrapを使ってみる
　[Gradleでbootstrap導入](https://qiita.com/HyunwookPark/items/248b2e78ffb91b67853d)
　[【Bootstrap超入門】フォームの種類・使い方について徹底解説！](https://www.sejuku.net/blog/75886)
　[Bootstrap4テンプレート フォーム用（HTMLバリデーション）](https://laraweb.net/surrounding/6217/)
  <br>
上記の過程で
途中何故かエクリプスからプロジェクト作れなくなったり、、、
　→[ここのIt would seem like the～で始まる回答](https://stackoverflow.com/questions/50764343/spring-tool-suite-suncertpathbuilderexception-unable-to-find-valid-certificati)を参考にサイトから証明書をダウンロードしてきて
　　STSの配下のcacertsに格納（反映）みたいな作業で解決
Gradleのprojectになっていなかったり、、、
　→ただプロジェクト作成時の選択ミスだったので作り直して解決
githubで資産がpushできなかったり、、、
　→そもそも個人用アカウントで鍵作ってなかったので新しく[ssh鍵作成](https://qiita.com/tmiame/items/e8df003c1d3cc6e2b6b7)登録して
　　アカウント承認してもらった後に最終的に[github自体のアップデート](https://qiita.com/keep-going/items/985f31391a1099c41205)で解決
などの予想外の問題が起きたりもしましたが、詰まった時は相談しながら一緒に調べて解決して進んでいきました。

##成果物
一覧画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419997/b8bb84fb-5401-8f09-95a7-8a818420e76a.png)
参照画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419997/72df778b-8a86-10e8-4faf-fc0a51ad2be0.png)
更新画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419997/ff259d12-b3cf-979b-0dcf-41a9c78c22d5.png)
作成画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419997/bdaa1a4d-c3fb-4083-188a-f3406d7cab0e.png)

##ここまでやってみての感想
 - 本当にシンプルな物だが、実際当初の目的通り継続的に作業し動くものまで作成できて良かった（成果物ができたのがよい）
 - 使ったことのないフレームワークを使って便利さに驚いた（EntityとControllerクラスを用意するだけでsql書かないの便利）
 - 業務中かつ相手がいるという条件なので継続することができる（継続もだし、一人ならそもそもスタートができてない）
 - こうしてQiitaの記事を書く一歩目にも繋がって良かった（アウトプットすごく大事と言われてたが、これも一歩目が難しかった）

#####まとめると
一歩目を踏み出せたのが良かった

##今後
少しずつでも継続的に学習は続けていき、
・次は内部ロジック的には今後はより実際に使われることを考えての機能付きのものを作る
・外部面的には画面レイアウトでまとめられる表記をまとめられてないのをまとめる（cssとか、ヘッダー共通とか）
あたりがまたできれば、そして結果をまたアウトプットしていければと考えてます。

##最後に
もし「簡単なモックみたいなのが欲しくて、最初の基礎はもう良いからそこから色々機能追加したりする作業やりたい」
みたいな方には需要があるかもということでソースも共有します
（入力制御、整合性チェックなど本当にほとんど何も実装されていないシンプルなものなので）
https://github.com/seino-ta/springSample