IntelliJでJava SpringBootのプロジェクトを作成

# はじめに

IntelliJ IDEAでSpringBootのプロジェクトを作成する手順を整理します。
今回はJava、Gradleを利用します。

# 環境
MacOS Catalina （10.15.7）
Java１１(openjdk 11.0.12 2021-07-20 LTS)
IntelliJ IDEA ２０２１．２（Ultimate Edition）


# 手順

## プロジェクト作成

IntelliJを起動して**Create New Project**をクリックします。

![スクリーンショット 2021-09-05 0.27.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/9437411d-9576-9547-122b-e4185e2459da.png)

Gradle、Javaを選択して**Next**をクリックします。

![スクリーンショット 2021-09-05 0.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/409992bf-48c9-6d5d-a73a-9f40dcdd3e29.png)

SprintBootTestとしてプロジェクトを作成します。

![スクリーンショット 2021-09-05 0.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/aef678da-9a3e-ff30-0af1-7d8c75c3a105.png)

## build.gradleの編集

プロジェクトで作成されるbuild.gradle

```gradle:build.gradle
plugins {
    id 'java'
}

group 'com.ykdevs'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}
```

以下の様に編集。
バージョンは[SpringBoot](https://spring.io/projects/spring-boot)から最新版を指定した。
pluginsで(org.springframework.boot](https://plugins.gradle.org/plugin/org.springframework.boot)と[io.spring.dependency-management](https://plugins.gradle.org/plugin/io.spring.dependency-management)を指定。
[参考](https://spring.pleiades.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.installing.java.gradle)

IntelliJを利用するので、pluginsにideaを指定した。[参考](http://gradle.monochromeroad.com/docs/userguide/idea_plugin.html)
JUnitは[JUnit5](https://junit.org/junit5/)を利用する。

簡単なWebアプリケーションを利用するので[spring-boot-starter-web](https://spring.pleiades.io/guides/gs/spring-boot/)を指定する。

```gradle:build.gradle
plugins {
    id 'org.springframework.boot' version '2.5.+'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'idea'
}

group 'com.ykdevs'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    // SpringBoot
    implementation "org.springframework.boot:spring-boot-starter-web"
    testImplementation "org.springframework.boot:spring-boot-starter-test"

    // JUnit
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}
```

# アプリケーション実行クラスの作成

プロジェクト作成時に以下のようなディレクトリができている。

```
src
├─ main
│　　│
│　　├─ java
│　　│
│　　└─ resources
└─ test
 　　│
 　　├─ java
 　　│
 　　└─ resources
```

main/java配下でパッケージの作成を行う。

![スクリーンショット 2021-09-05 0.39.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/487450aa-0d0d-3954-b875-8baa9f20ca1a.png)

カンマ区切りでパッケージ名とアプリケーションクラスを指定すれば、ディレクトリとクラスファイルが同時に作成される。

![スクリーンショット 2021-09-05 0.39.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/50a27e2a-93d8-402e-6d77-b45aeaa04167.png)

@SpringBootApplicationのアノテーションをつけ、main関数を作成する。

```java:Application.java
package com.ykdevs.SpringBootTest;

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

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
```

Webアプリケーションクラスを作成する

![スクリーンショット 2021-09-05 0.47.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/f88e34be-fd02-963f-3fae-0fccc798a946.png)

```java:IndexController.java
package com.ykdevs.SpringBootTest.app;

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

@RestController
public class IndexController {

    @GetMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }
}
```

# RunでWebアプリケーションを起動する。

![スクリーンショット 2021-09-05 0.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81113/3d8f25b4-486c-7a32-7d86-60a0bc99d35d.png)


# 参考
[Gradle User Guide](http://gradle.monochromeroad.com/docs/userguide/userguide.html)
[Spring Boot入門−公式ドキュメント](https://spring.pleiades.io/spring-boot/docs/current/reference/html/getting-started.html)
[JUnit 5 ユーザーガイド](https://oohira.github.io/junit5-doc-jp/user-guide/)