2
2

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とは?JAR作成までの流れを初心者向けに解説

2
Posted at

Javaを学び始めると、

  • Springって何?
  • Spring Bootって何をしてくれるの?
  • Mavenって何?
  • JARってどうやって作られるの?

と疑問に思う人は多いと思います。

この記事では、Spring Bootでアプリケーションを開発し、JARとして実行できるようになるまでの流れを初心者向けにまとめます。


Spring Bootで必要なもの

Spring BootでWebアプリケーションを開発する場合、主に次のものを利用します。

ツール 役割
JDK Javaコードをコンパイル・実行する
Spring Boot Webアプリケーション開発を簡単にするフレームワーク
Maven ライブラリ管理・ビルドを行う
IDE(IntelliJ、VSCodeなど) コードを書く

① JDK

JDK(Java Development Kit)はJava開発に必要なツールです。

主な役割は

  • Javaコードを書く
  • Javaコードをコンパイルする
  • Javaプログラムを実行する

ことです。

例えば

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

このコードは最初は

Main.java

というソースコードです。

コンパイルすると

Main.class

になります。

つまり

.java
 ↓
javac
 ↓
.class

という流れになります。


② Spring Boot

Spring BootはSpring Frameworkを簡単に使えるようにしたフレームワークです。

例えば

  • DI(Dependency Injection)
  • Bean管理
  • Webサーバー起動
  • 自動設定(Auto Configuration)
  • REST API作成

などを自動で行ってくれます。

例えば

@RestController
public class UserController {

    @GetMapping("/users")
    public String users() {
        return "users";
    }
}

これだけでAPIを公開できます。


③ Maven

Mavenはビルドツールです。

主に

  • ライブラリ取得
  • コンパイル
  • テスト
  • JAR作成

を行います。

設定は

pom.xml

に記述します。

例えば

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

と書くだけで、

Spring Bootに必要なライブラリをまとめて取得できます。


Spring Boot Starterとは?

Starterとは

よく使うライブラリをセットにしたもの

です。

例えば

Web APIなら

spring-boot-starter-web

データベースなら

spring-boot-starter-data-jpa

テストなら

spring-boot-starter-test

などがあります。


Spring BootアプリがJARになるまで

ここから実際の流れを見てみましょう。

Javaコードを書く
        ↓
Mavenが依存ライブラリ取得
        ↓
compile
        ↓
.class生成
        ↓
test
        ↓
package
        ↓
JAR生成

① Javaコードを書く

通常は

src/main/java

以下にコードを書きます。

例えば

src
├── main
│   ├── java
│   │   └── com/example/demo
│   │       ├── DemoApplication.java
│   │       ├── controller
│   │       ├── service
│   │       ├── repository
│   │       └── entity
│   └── resources
│       └── application.properties

Spring Bootでは一般的に

Controller
    ↓
Service
    ↓
Repository
    ↓
Database

という流れで処理が進みます。


② compile

コンパイルを実行します。

./mvnw compile

すると

.java
   ↓
javac
   ↓
.class

へ変換されます。

ここで作られる.classは機械語ではありません。

Javaバイトコードです。

最終的には

.class
   ↓
JVM
   ↓
CPUが実行

という流れになります。


③ test

テストを実行します。

./mvnw test

JUnitやMockitoなどを利用したテストコードが実行されます。

すべて成功すれば次の工程へ進みます。


④ package

最後に

./mvnw package

を実行します。

すると

compile
   ↓
test
   ↓
package

までが実行され、

target/demo-0.0.1-SNAPSHOT.jar

のようなJARファイルが生成されます。


JARとは?

JARは

Java ARchive

の略です。

実行に必要なものを1つにまとめたファイルになります。

Spring Bootでは

  • 自分が作成したクラス
  • Spring Boot本体
  • 使用ライブラリ
  • 設定ファイル

などが1つにまとめられます。

そのため

java -jar demo.jar

だけで実行できます。


JARを実行すると何が起こる?

JARを実行すると

java -jar demo.jar

内部では次のような流れになります。

JVM起動
      ↓
main()実行
      ↓
SpringApplication.run()
      ↓
Spring Boot起動
      ↓
Component Scan
      ↓
Bean生成
      ↓
DI(依存性注入)
      ↓
組み込みTomcat起動
      ↓
API受付開始

SpringApplication.run()

Spring Bootの起点になるのがこちらです。

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

この1行でSpring Boot全体が起動します。


@SpringBootApplicationとは?

実はこのアノテーションは

@SpringBootApplication

だけで

@Configuration
@ComponentScan
@EnableAutoConfiguration

の3つの役割を持っています。

特に重要なのが

@ComponentScan

です。

これによって

@RestController
@Service
@Repository
@Component

などのアノテーションが付いたクラスを探し、

BeanとしてSpringコンテナへ登録します。

例えば

@Service
public class UserService {
}

なら

Spring Boot起動

↓

@ComponentScan

↓

@Service発見

↓

UserService生成

↓

Beanとして登録

↓

必要な場所へDI

という流れになります。


全体の流れまとめ

【開発】

Javaコードを書く
      ↓
pom.xmlへライブラリを書く
      ↓
Mavenが依存ライブラリ取得

【ビルド】

./mvnw compile
      ↓
.java → .class

./mvnw test
      ↓
JUnit・Mockito実行

./mvnw package
      ↓
JAR生成

【実行】

java -jar app.jar
      ↓
JVM起動
      ↓
main()
      ↓
SpringApplication.run()
      ↓
Component Scan
      ↓
Bean生成
      ↓
DI
      ↓
Tomcat起動
      ↓
API受付開始

おわりに

Spring Bootは単なるライブラリではなく、

  • Javaコードを書く
  • Mavenでビルドする
  • JARを作成する
  • JVM上でSpring Bootを起動する
  • Beanを生成しDIを行う
  • Webサーバーを起動する

という一連の流れを簡単にしてくれるフレームワークです。

この全体像を理解しておくと、「今自分はどの工程を触っているのか」が分かりやすくなり、Spring Bootの学習がぐっと進めやすくなります。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?