ToDoアプリ作成(SpringBoot + React)
下記の記事を参考にする。
とりあえず、学習を継続できればいいかなくらいの感覚。
とりあえず、SpringBootでAPI作るかな。
Java久しぶりなので楽しみ。
SpringBoot公式ドキュメント
SpringBootサンプルコード付きガイド
読んだ。
vscodeでSpringBootの環境構築すべきかな。
関係ありそうな公式サンプル
Extension Pack for Java Auto ConfigというVSCode拡張を使うとJavaの最初の設定を殆ど自動でやってくれるっぽい。あらかじめJDKのインストールは必要なのかな?
Extension Pack for Java Auto Config
Java 複数バージョン切り替え
OpenJDK系(Eclipse Temurin、Amazon Correttoなど)は無償セキュリティアップデートの提供期間がOracle JDKより長いというメリットがあるらしい。
正しい情報を調べようとすると、それぞれの公式サイトでサポート期間を調べて表にして、引用元のリンクを付ける必要がある。そこまでの情報源は見つからず。。
以前使ってた記憶あるし、Amazon Correttoが無難そうかなあ。
Amazon Corretto 21をインストールした
Extension Pack for Java Auto Configをインストールした。
下記SpringBoot公式サイトにExtension Pack for Java Auto Configをインストールしてと書かれてるので。
この拡張機能が何をしてくれるのかは不明。。
・Extension Pack for Java
・Spring Boot Extension Pack
あたりの拡張が含まれてるらしい。
Spring InitializrでGradle対応プロジェクトをダウンロードすれば、そのプロジェクトにGradle Wrapperが入ってるからGradleのインストールは不要らしい。
Spring Initializrでプロジェクト作成した
Spring Initializrで作ったプロジェクトをvscodeで開いた。
vscodeのターミナルで下記を実行した
gradlew bootRun
http://localhost:8080
にアクセスしても「このサイトにアクセスできません」となる
http://localhost:8080
にアクセスできないのは依存関係にSpring Webを含めてないのが原因っぽい。
上記の設定でプロジェクトを作り直したら、依存関係にspring-boot-starter-webがあるのを確認できた。
下記コマンドでアプリ実行して、無事にブラウザに画面が表示された。
gradlew bootRun
PostgreSQLのインストーラをダウンロード
インストーラをダブルクリックで実行
psql.exeがあるフォルダをパスに追加
DBを作成
SpringBootのDBマイグレーション管理ツールのデファクトスタンダードはFlywayなのかな?
自分はそれしか使ったことないし、ググった感じもFlywayしか出てこなかった。
Flywayの公式ドキュメント
SpringBoot+Flywayの公式ドキュメント?
下記のChrome拡張で日本語化できた
Flywayの使い方、この記事が分かりやすかった。
Spring Data JPAの公式ドキュメント
とりあえず、SpringBootからDB繋げるようになりたい。。
SpringInitializrでDependenciesに下記を追加すればよさそう。
・Spring Web
・Spring Data JPA
・PostgreSQL Driver
この設定で再作成
application.propertiesに下記を設定したらアプリ起動できた。
DB接続に成功したっぽい。
(starter-data-jpaを入れてると、アプリ起動時にDB接続しに行って接続に失敗するとアプリが終了するので。)
spring.application.name=springboot-todolist
## connect to database
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/todo_app
spring.datasource.username=postgres
spring.datasource.password=postgres
VSCodeでjavaのimport文を追加するショートカットは「Alt + Shift + O」
動作確認用に
・EmployeeEntity.javaを追加
・application.propertiesにspring.jpa.hibernate.ddl-auto=updateを追加
アプリ起動でテーブルができることを確認した。
spring.jpa.hibernate.ddl-auto=updateは、アプリケーション起動時に、Entityに対応するテーブルがなければ作成するという設定。
Entity、Repository、Service、Contollerを追加して、
とりあえずAPIできた。
することメモ
・API設計(とりあえずメモ程度にする予定)
・API作成
・テスト作成
その他
・開発環境(Java、PostgreSQL)のDocker化
・Reactで画面作成
・Git管理
・少しずつ開発環境をブラッシュアップしていきたい
とりあえず登録、更新、削除、検索のAPIを作成する。
テーブル設計
テーブル名:todos
カラム:
・id
・desctiption
・created_at
・updated_at
下記を参考にFlywayを導入する
build.gradleに下記を追加
implementation "org.flywaydb:flyway-core:11.13.2"
implementation 'org.flywaydb:flyway-database-postgresql:11.13.2'
application.propertisに下記を追加
spring.flyway.enabled=true
spring.flyway.baseline-on-migrate=true
src/main/resources/db/migration/に V1__todos.sql を追加。
CREATE TABLE todos (
id SERIAL PRIMARY KEY,
description TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
SpringBootアプリ起動でtodosテーブルが作成された。
次は下記を作成する。
・TodoEntity.java
・TodoRepository.java
・TodoService.java
・TodoController.java
動作確認用にPostmanを使うかな?
あと、Git管理したい。
Postmanで動作確認できた。
することメモ
・不要ファイル削除
・git管理
・テストを書く
MyBatisを使ってみたい。
Spring Bootでテストを書くとき、主に2つのアプローチがある。
統合テスト:
アプリ全体を起動して、HTTPリクエストをシミュレート
@SpringBootTest + @AutoConfigureMockMvc
単体テスト:
コントローラやサービス単体をテスト(他層をモック化)
@WebMvcTest or @DataJpaTest
テストの方針
spring.datasource.url に H2(メモリDB) を使って統合テストを実施したい
統合テストで登録と一覧取得ができた。
次にすること
・カバレッジレポート
・put delete id指定のgetのテスト
SpringBootのテストのドキュメント
https://spring.pleiades.io/spring-boot/reference/testing/spring-boot-applications.html
@SpringBootTest・・・SpringBootのBean(Service, Controllerなど)がすべて利用可能にする
@AutoConfigureMockMvc・・・疑似的なhttpリクエストを送信できるMockMvcを利用可能にする
Bean = Springがアプリ起動時に作って管理してくれるオブジェクト(主にService, Controller, Repositoryなど)
メモ
・カバレッジレポート
・Swagger
・統合テストだけでなく単体テストもしたい
・テストが足りているかチェックしたい
API設計の記事