今日のテーマ
最近、秀和システムの
「SpringBoot3プログラミング入門」 を一通り学習し終えました。
ただ、本を読み終えるとよくあるのが
「あれ何章でやったっけ?」「JPAの使い方どうだった?」「WebFluxっていつ使うんだっけ?」
という 知識の断片化問題。
そこでこの記事では、
書籍の内容を整理、個人開発で使う視点で再構成
後から見返すためのまとめとして整理しました。
これから Spring BootでWebアプリを個人開発していく人のための復習記事として書いています。
Chapter1 Spring Boot開発の準備
サーバー開発とSpring Boot
Spring Bootは
-
JavaのWebアプリケーションフレームワーク
-
Springの設定を自動化したもの
特徴
-
設定が少ない
-
組み込みサーバー(Tomcat)
-
すぐWebアプリが動く
つまり
-
JavaでWebアプリを最短距離で作るためのフレームワーク
-
Spring Boot CLIとSpring Initializer
-
Spring Bootプロジェクトは主に2つの方法で作れる。
Spring Initializer
一番よく使う方法。
作れるもの
-
Maven / Gradleプロジェクト
-
Spring Bootの基本構成
-
必要な依存関係
よく使う依存
-
Spring Web
-
Thymeleaf
-
Spring Data JPA
-
H2 / MySQL
Visual Studio Code + Spring Boot Extension Pack
VSCodeでもSpring開発は可能。
主な機能
-
Spring Boot Dashboard
-
プロジェクト生成
-
アプリ起動
-
デバッグ
Java開発では
-
IntelliJ
-
VSCode
のどちらでもOK。
Chapter2 プロジェクトの基本
Spring Bootプロジェクト構成
基本構成
src
└ main
├ java
│ └ com.example.demo
│ ├ controller
│ ├ model
│ ├ repository
│ └ service
└ resources
├ templates
├ static
└ application.properties
役割
| ディレクトリ | 役割 |
|---|---|
| controller | リクエスト処理 |
| model | データモデル |
| repository | DBアクセス |
| service | ビジネスロジック |
| templates | HTML |
Spring Bootのエントリーポイント
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args){
SpringApplication.run(DemoApplication.class, args);
}
}
役割
-
Springコンテナ起動
-
Bean管理
-
Webサーバー起動
RESTコントローラー
REST APIを作る場合
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello Spring Boot";
}
}
特徴
-
JSONを返す
-
APIサーバー向け
Controller(MVC)
画面表示を行う場合
@Controller
public class PageController {
@GetMapping("/")
public String index(){
return "index";
}
}
戻り値
templates/index.html
Chapter3 テンプレートエンジン
Spring BootではHTML生成にテンプレートエンジンを使う。
Thymeleaf
Spring Boot標準。
特徴
-
HTMLとしてそのまま読める
-
Springとの統合が強い
例
<p th:text="${message}"></p>
Mustache
ロジックレステンプレート。
特徴
-
シンプル
-
学習コスト低い
Groovyテンプレート
Groovyを使ったテンプレート。
ただし実務では
- Thymeleaf
が圧倒的に多い。
Chapter4 モデルとデータベース
Webアプリ開発の中心。
ここが Spring Bootの最重要部分。
JPAによるDB操作
エンティティ
@Entity
public class Message {
@Id
@GeneratedValue
private Long id;
private String text;
}
-
JPAのメリット
-
SQLを書かなくてよい
-
ORM
データとオブジェクトの対応
CRUDの作成
Repository
public interface MessageRepository
extends JpaRepository<Message, Long> {
}
使えるメソッド
-
save()
-
findById()
-
findAll()
-
delete()
バリデーション
入力チェック
@NotNull
@Size(min = 1, max = 100)
private String text;
Controller
public String save(
@Valid Message message,
BindingResult result
)
Chapter5 DBアクセスをさらに理解
JPAのコア機能。
EntityManager
@PersistenceContext
EntityManager entityManager;
使える機能
-
persist
-
remove
-
find
-
query
JPQL
SQLに似たJPA専用クエリ。
例
SELECT m FROM Message m
特徴
テーブルではなく エンティティ名
Criteria API
Javaコードでクエリを書く方法。
特徴
-
型安全
-
動的クエリ
ただし
実務ではあまり人気がない
理由
- コードが長い
エンティティの関連
代表的なリレーション
@OneToMany
@ManyToOne
@OneToOne
@ManyToMany
例
@ManyToOne
User user;
Chapter6 リアクティブWebアプリ
Spring Bootには
Spring WebFlux
がある。
従来
Spring MVC
との違い
| MVC | WebFlux |
|---|---|
| 同期処理 | 非同期 |
| スレッド占有 | 少ない |
| 簡単 | 少し難しい |
WebFlux型
Mono
Flux
ファイルアクセスとネットワーク
リアクティブでは
-
非同期IO
-
ストリーム処理
が可能。
関数型ルーティング
MVC
@Controller
WebFlux
RouterFunction
という書き方もできる。
WebClient
APIアクセス
WebClient client = WebClient.create();
REST API呼び出し用。
Chapter7 Springの重要機能
最後はSpringの基礎概念。
BeanとDI
Springの核心。
Bean
Springが管理するオブジェクト
DI
依存性注入
例
@Autowired
MessageRepository repository;
メリット
-
疎結合
-
テストしやすい
-
管理しやすい
Spring Security
認証機能。
主な用途
-
ログイン
-
ユーザー管理
-
権限制御
基本設定
@EnableWebSecurity
この本を終えて理解したSpring Boot開発の流れ
Spring BootでWebアプリを作る基本構造は
Controller
↓
Service
↓
Repository
↓
Database
画面系
Controller
↓
Thymeleaf
API系
Controller
↓
JSON
今後個人開発するなら
個人的に必要な技術スタックはこれ。
基本構成
Spring Boot
Spring MVC
Thymeleaf
Spring Data JPA
MySQL
API型
Spring Boot
REST API
React / Vue
個人的に重要だと思ったポイント
この本で特に重要なのは
① Controller
HTTPリクエスト処理
② JPA
DB操作
③ Thymeleaf
画面表示
④ DI / Bean
Springの設計思想
次に学ぶと良さそうなこと
Spring Bootをもう一段レベルアップするなら
-
Spring Security(ログイン機能)を詳しく
-
REST API設計
-
Docker
-
AWSデプロイ
-
フロントエンド(React / Vue)
まとめ
この本は
Spring Boot Web開発の一通りを触れる入門書
でした。
ここからはインプットした知識を活かして、実際に簡単なアプリケーションを作りながら
理解を深めていこうと思います。