Spring Bootの基本的な使い方

# 1. Spring Bootの特徴

簡単な設定: XMLや大量の設定ファイルを使用せず、シンプルな構成でスタートできます。

組み込みサーバー: TomcatやJettyが組み込まれており、外部サーバー設定が不要です。

依存関係管理: Spring Boot Starterを使用して、必要な依存関係を一括管理できます。

プロダクション対応: Actuatorを使ってアプリケーションの監視や運用が容易です。

# 2. 環境構築

必要なもの

JDK (Java Development Kit)

IDE (IntelliJ IDEA, Eclipseなど)

Maven または Gradle

プロジェクトの作成

Spring Initializr (https://start.spring.io/) を使用してプロジェクトを作成します。

必要な依存関係を選択します (例: Spring Web, Spring Data JPA, MySQLなど)。

curl https://start.spring.io/starter.zip -d dependencies=web,data-jpa,mysql -o project.zip
unzip project.zip -d myproject

# 3. アプリケーションの基本構成

Mainクラス

Spring Bootアプリケーションのエントリーポイントです。

```java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
```
# 4. Spring Bootで作成されるファイル

Spring Bootプロジェクトを作成すると、いくつかの基本的なファイルやフォルダーが生成されます。

**4.1 src/main/java**

Javaコードを格納するフォルダーです。

Applicationクラス: アプリケーションのエントリーポイント。

コントローラー、サービス、リポジトリ、エンティティクラス: アプリケーションの機能に応じて作成。

**4.2 src/main/resources**

リソースファイルを格納するフォルダーです。

application.propertiesまたはapplication.yml: アプリケーションの設定を記述します。

staticフォルダー: 静的リソース (CSS, JavaScript, 画像など) を格納。

templatesフォルダー: Thymeleafなどのテンプレートエンジンのファイルを配置。

**4.3 src/test/java**

テストコードを格納するフォルダーです。

単体テストや統合テストを実装します。

**4.4 pom.xml (または build.gradle)**

ビルドツールの設定ファイル。

依存関係管理: 使用するライブラリを指定。

プラグイン: プロジェクトのビルドや実行に必要な設定を記述。

# 5. MVCアーキテクチャ

Spring Bootは、Model-View-Controller (MVC) アーキテクチャに基づいてアプリケーションを構築します。

**5.1 Model**

アプリケーションのデータ構造やビジネスロジックを定義します。エンティティクラスやサービス層が該当します。
```java
package com.example.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}
```

**5.2 View**

ユーザーインターフェースを担当します。Spring Bootでは、ThymeleafやReactなどを使用してビューを作成します。

**5.3 Controller**

リクエストを受け取り、適切なサービスを呼び出して処理結果をビューに返します。
```java
package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/users")
    public String getUsers() {
        return "Displaying user list";
    }
}
```

# 6. インターフェースの役割

インターフェースは、実装の詳細を隠し、モジュール間の結合度を低くする役割を果たします。Spring Bootでは、以下のような場面でインターフェースが使用されます。

**6.1 リポジトリ**

データベースとのやり取りを抽象化します。
```java
package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}
```

**6.2 サービス**

ビジネスロジックを提供する層で、コントローラーとリポジトリの間をつなぎます。

```java
package com.example.demo.service;

import com.example.demo.entity.User;
import java.util.List;

public interface UserService {
    List<User> getAllUsers();
}
```

**6.3 実装クラス**

インターフェースを実装し、実際のロジックを記述します。

```java
package com.example.demo.service.impl;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}
```

# 7. REST APIの作成

コントローラー

Spring Bootを使用して簡単にREST APIを作成できます。

```java
package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}
```

実行
```
mvn spring-boot:run
```

ブラウザまたはPostmanでhttp://localhost:8080/helloにアクセスすると、Hello, Spring Boot!が表示されます。

**以上がSpring Bootの基本的な使い方です。これを基にアプリケーションを構築してみましょう！**