Spring Framework / Spring Boot
Spring Framework / Spring Boot とは
Spring Framework は、Java アプリケーション開発のための包括的なフレームワークである。2003 年に Rod Johnson によって公開され、当時複雑だった Java EE(現 Jakarta EE)の開発を大幅に簡素化する目的で設計された。現在では Java によるエンタープライズ開発の事実上の標準となっている。
Spring Boot は 2014 年に登場した Spring Framework の拡張プロジェクトで、煩雑だった Spring の初期設定を自動化し、すぐにアプリケーション開発を始められるようにしたものである。
なぜ SIer で重要か
SIer の新規 Java プロジェクトでは、ほぼ例外なく Spring Boot が採用されている。Spring は業務システムに求められるトランザクション管理、セキュリティ、データベースアクセスなどの機能を網羅しており、大規模開発に必要な機能が一通り揃っている。また、Spring の知識は SIer の Java 案件で共通言語として通用するため、新入社員が最初に学ぶべきフレームワークと言える。
基本概念
DI(依存性注入)
DI は Spring の最も重要な概念である。あるクラスが別のクラスを利用するとき、利用する側が直接インスタンスを生成するのではなく、外部(Spring コンテナ)からインスタンスを注入してもらう仕組みを指す。
// DI を使わない場合(密結合)
public class OrderService {
private OrderRepository repository = new OrderRepositoryImpl();
}
// DI を使う場合(疎結合)
@Service
public class OrderService {
private final OrderRepository repository;
@Autowired
public OrderService(OrderRepository repository) {
this.repository = repository;
}
}
DI を使うことで、クラス間の結合度が下がり、テストしやすく変更に強いコードを書ける。
AOP(アスペクト指向プログラミング)
AOP は、ログ出力やトランザクション管理、認可チェックなど、複数のクラスに横断的に適用される処理(横断的関心事)を本来のビジネスロジックから分離する仕組みである。Spring では @Transactional アノテーションを付けるだけでトランザクション管理が自動適用されるが、これは AOP の仕組みで実現されている。
Spring Boot の自動設定
Spring Boot は「Convention over Configuration(設定より規約)」の思想に基づき、クラスパスに存在するライブラリを検出して自動的に設定を行う。たとえば、spring-boot-starter-web を依存関係に追加するだけで、組み込み Tomcat サーバが起動し、Spring MVC の設定が自動で行われる。
主要モジュール
| モジュール | 役割 |
|---|---|
| Spring MVC | Web アプリケーション開発(Controller, REST API) |
| Spring Security | 認証・認可の仕組みを提供 |
| Spring Data JPA | JPA を使ったデータベースアクセスを簡素化 |
| Spring Batch | 大量データのバッチ処理フレームワーク |
| Spring AOP | アスペクト指向プログラミングのサポート |
SIer での使われ方
新規開発の標準
SIer の新規 Java プロジェクトでは、Spring Boot をベースにしたアプリケーション開発が標準となっている。プロジェクト開始時には Spring Initializr でひな形を生成し、必要なスターター(starter)を追加していく流れが一般的である。
TERASOLUNA との関係
NTTデータが策定した開発ガイドライン「TERASOLUNA」は Spring Framework をベースにしており、NTTデータ系の案件では TERASOLUNA のガイドラインに従って Spring を使うことが多い。
Spring と Jakarta EE の関係
Spring は元々 Java EE(現 Jakarta EE)の複雑さを解消するために生まれたが、両者は対立するものではない。Spring は内部的に Jakarta EE の仕様(Servlet、JPA、Bean Validation 等)を利用しており、Jakarta EE の仕様を Spring が使いやすくラップしているという関係にある。SIer の現場では「Jakarta EE のアプリケーションサーバ上で動く Spring アプリケーション」という構成も珍しくない。
まとめ
- Spring Framework は Java エンタープライズ開発の事実上の標準フレームワークであり、DI と AOP が中核概念である
- Spring Boot の登場によりセットアップが劇的に簡素化され、新規開発では Spring Boot がほぼ標準となった
- DI によりクラス間の結合度を下げ、テストしやすく保守性の高いコードを実現できる
- SIer の Java 案件では Spring の知識が共通言語として求められるため、最初に習得すべき技術である
- TERASOLUNA など SIer 独自のガイドラインも Spring をベースにしていることが多い