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の学習がぐっと進めやすくなります。