1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Spring Boot入門】#0 事前準備

Last updated at Posted at 2024-10-30

はじめに

自身の知識のアウトプットも兼ねて、新人研修用に作成した記事となります。Spring Bootを学び始めた方を対象とした内容になっています。

環境要件

環境要件
OS:Windows 10 Pro
Java:17.0.2
Spring Boot:3.3.4
DB:XAMPP(MySQL 10.4.21-MariaDB)
IDE:Spring Tool Suite 4(STS)

依存関係

新規プロジェクト作成時に、依存関係(機能)を追加します。
今回追加した依存関係は以下の通りです。

Lombok

Javaプログラミングにおける便利なライブラリで、コードの冗長性を減らし、開発効率を向上させます。アノテーションを用いることで、getterやsetter、toStringメソッドなどのボイラープレートコードを自動生成し、手動での記述を不要にします。

MySQL Driver

Spring BootアプリケーションがMySQLデータベースへ接続するために使用されるJDBCドライバです。MySQL Connector/Jが一般的に使用されます。

Spring-Boot Devtools

Spring Bootアプリケーションの開発を効率化するための追加ツールセットです。このモジュールは、開発中のアプリケーションに対して自動再起動やキャッシュの無効化などを提供し、コード変更に対する迅速なフィードバックループを実現します。

Spring-Data-JPA

Springフレームワークの一部であり、Java Persistence API(JPA)を使用してデータベースアクセスを簡素化するためのライブラリです。

Spring Web

Webアプリケーションの構築を効率化するための多くの機能を提供します。

Thymeleaf

Javaで書かれたテンプレートエンジンであり、特にSpring Bootアプリケーションで広く使用されています。Thymeleafは、HTMLやXMLをテンプレートとして使用し、動的なコンテンツを生成するための機能を提供します。

Validation

ユーザーからの入力データが正しいかどうかを検証するための機能です。

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>crud_sample</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>crud_sample</name>
	<description>Demo project for Spring Boot</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

データベースを作成する

phpMyAdminなどのGUIやXAMPPコントロールパネルにあるshellを利用してデータベースを作成してください。
XAMPPのshellから実行する場合のコマンドは下記の通りです。

shell
# MySQLに接続
$ mysql -u root -p

# MySQLに接続後、DB作成
CREATE DATABASE sample;

# DB作成後、MySQLから抜ける
exit

DB接続情報

application.properties
# MySQLの接続設定
spring.datasource.url=jdbc:mysql://localhost:3306/sample
spring.datasource.username=root
spring.datasource.password=

# Spring-JPA: DBのテーブルを自動作成してくれる機能
spring.jpa.hibernate.ddl-auto=update

spring.datasource.url

データベースへの接続URLです。ここではlocalhost:3306でMySQLに接続しています。データベース名はsampleとしています。

spring.datasource.username

MySQLのユーザー名です。ここではrootを設定しています。

spring.datasource.password

MySQLのパスワードです。今回は特に設定していません。

spring.jpa.hibernate.ddl-auto=update

ddl-autoupdateにすることで、1回作成したテーブルは再作成せず、存在しないテーブルだけEntityの定義に基づいて新規作成してくれます。

ディレクトリ構成と各レイヤーの役割

おおまかなディレクトリ構成は以下の通りです。
ここではWeb三層構造(アーキテクチャ)を意識した構成で実装したいと思います。
各レイヤーは独立した役割を持ち、下位レイヤーにのみ依存します。

ディレクトリ構成
com/example/demo
├── CrudSampleApplication.java   // メインアプリケーションクラス
├── controller                   // コントローラー層
│   ├── form
│   │   └── CompanyForm.java     // ユーザー入力用フォームオブジェクト
│   └── CompanyController.java   // HTTP リクエストを処理
├── entity                       // モデル層 (エンティティ)
│   └── Company.java             // 会社データを表すエンティティ
├── repository                   // リポジトリ層
│   └── CompanyRepository.java   // データアクセスインターフェイス
└── service                      // サービス層
    └── CompanyService.java      // ビジネスロジック

メインアプリケーション(Main Application)

CrudSampleApplication.java
Spring Bootアプリケーションのエントリーポイントです。このクラスが実行されることで、アプリケーションが起動します。

コントローラー層 (プレゼンテーション層)

このレイヤーはユーザーやクライアントからのリクエストを受け取り、適切なサービスメソッドを呼び出してデータを取得します。ユーザーインターフェイスとサービス層の仲介役を果たします。

CompanyController.java
HTTPリクエストを処理し、対応するサービスメソッドを呼び出します。

CompanyForm.java
フォームデータを受け取るためのオブジェクトです。ユーザーから入力されたデータをバインドし、コントローラで扱いやすい形にします。

サービス層 (ビジネスロジック層)

ビジネスロジックを実装するレイヤーです。コントローラから呼び出され、リポジトリに対する適切なメソッドの呼び出しを行います。

CompanyService.java
データの作成や更新、削除などの操作を行います。リポジトリレイヤーと連携して実行します。

リポジトリ層 (データアクセス層)

データの永続化(データベースとのやり取り)を行います。このレイヤーがデータベースと通信し、データの取得や保存、更新、削除を担当します。このレイヤーは、ビジネスロジックを直接のデータベースアクセスから分離します。

CompanyRepository.java
Spring Data JPAを使って、データベースに対する操作を簡単に実施できるインターフェースです。

モデル層 (ドメイン層)

アプリケーションのデータ構造を表します。これらのクラスがデータベースのテーブルにマッピングされます。

Company.java
Companyテーブルを表すエンティティクラスです。テーブルの列に対応するフィールドを持ち、JPA (Java Persistence API) アノテーションでマッピングを定義しています。

視覚的なフロー

[ユーザー] <---> [コントローラー層] <---> [サービス層] <---> [リポジトリ層] <---> [データベース]

まとめると...

コントローラー層: HTTP リクエストとユーザーの操作を処理します。
サービス層: ビジネスロジックを含み、データを処理します。
リポジトリ層: データアクセスとデータベースとの対話を管理します。
モデル層: データの構造 (エンティティ) を定義します。

このようなレイヤード・アーキテクチャを採用することの利点は、各レイヤーが異なる責務を持つため、コードの再利用性が高まり、テストがしやすくなり、アプリケーションのメンテナンス性が向上することです。

例えば、ビジネスロジックの変更があった場合でも、サービス層のみを変更すれば済み、他のレイヤーには影響を及ぼさないことが期待できます。

さいごに

今回は事前準備と題し、環境要件から依存関係、ディレクトリ構成などCRUDアプリケーションを作成するために必要な作業や知識についてまとめました。
次回は新規登録画面の表示機能から作成していきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?