spring frameworkの歴史を整理（詳細版）

# はじめに
**こちらは前回の記事のより詳細の説明を加えた内容になっています。**

筆者は現在29歳です。
私はspringでの開発をメインで行っていますが、今ではjavaの主要でかつ当たり前として使っているフレームワーク。私が小学生の頃まだ働いていない頃に何が起きていたか、どのようにここまで進化をたどってきたか、そこを理解することこそが重要だと思い、今一度自分の中で整理したいという気持ちが芽生えました。調べた内容をそれぞれ整理できればと思いますので、もしご指摘ありましたらコメントをお願いします。
springの歴史を知ることこそが、将来的に自分のプログラミングや開発全体に活かせると思っています。
フレームワークに限らず何かしら学ぶ際には、学ぶ対象の歴史や背景を知ることは大切。

# 1. 誕生と初期の発展（2003年〜2008年）
* 2003年: Rod JohnsonがSpringの基となる書籍「Expert One-on-One J2EE Design and Development」を発表。その中で、DIとAOPを取り入れたフレームワークのアイデアを紹介しました。
この書籍はJava 2 Platform, Enterprose Edition(J2EE)を用いたアプリケーションを容易にし、性能が改善されました。現在のソフトウェア開発でJavaが市場を席巻するようになったのは同書のおかげとされています。これを期にSpring Frameworkの開発が始まり、2004年にSpring Framework 1.0がリリースされます。

    - 特徴: EJB(Enterprise JavaBeans)を使わず、軽量なDI（依存性注入）やAOP（アスペクト指向プログラミング）を実現しました。

（Rod Johnson氏によると「エンティティBean（EJB：Enterprise JavaBeansに含まれるデータベース・アクセスのカプセル化機能）なんてないほうがよかった。エンティティBeanのせいで2～3年が無駄に失われてしまった」と語っています。J2EEの中心技術であるEJBは以下の問題を抱えていました。
    - 設定が煩雑
    - コンポーネントの作成が煩雑
    - 実行速度が遅い
）


* 2006年:Spring 2.0がリリースされます。
    - 特徴: XML設定が強化され、AOPのサポートが拡張されます。また、Spring Securityや Spring WebFlowなど、Web開発に必要なものを中心にSpring Frameworkの周辺プロジェクトがいくつか立ち上がりました。

当時はXMLで設定を書くのが主流。Springの設定ファイルについて巨大化する傾向がありましたが、それでもはるかにEJBよりシンプルだったそうです。

---

## 2. アノテーション時代の到来（2007年〜2013年）

### Spring Framework 2.x（2006年〜2009年）

#### 背景
Java 5（2004年）の登場により、アノテーションが本格的に使えるようになりました。Spring 2.0では、XMLに依存せずアノテーションで設定できるように進化しました。

#### Spring 2.xの主な特徴
- `@Component` や `@Autowired` などのアノテーションによる設定の簡略化
- AOPの機能強化（アスペクトJの統合）
- Spring MVCの改良（Webアプリケーション開発がしやすくなった）

---

### Spring Framework 3.x（2009年〜2013年）

#### 背景
Java 6, Java 7が登場し、開発の効率化が求められるようになりました。また、RESTful APIの概念が広まり、Springもこれに対応する必要がありました。

#### Spring 3.xの主な特徴
- **JavaConfigの導入**（`@Configuration` や `@Bean` を使ってJavaコードで設定できるようになった）
- **RESTサポート**（Spring MVCの拡張）
- **SpEL（Spring Expression Language）** の導入（動的なプロパティ設定が可能に）

この時期に**「脱XML化」**が進み、Javaベースの設定が普及し始めました。

---

## 3. Spring Bootの登場と普及（2014年〜2017年）

### Spring Framework 4.x（2013年〜2017年）

#### 背景
この頃、**マイクロサービス**の概念が注目され、従来のモノリシックなアーキテクチャから、より小さな単位で動くサービスを構築する流れが生まれました。

#### Spring 4.xの主な特徴
- **Java 8を公式サポート**（ラムダ式やストリームAPIを活用）
- **WebSocketのサポート**
- `@RestController` **アノテーションの導入**（REST API開発が簡単に）

---

### Spring Boot 1.x（2014年〜2018年）

#### 背景
Spring Frameworkは強力なフレームワークでしたが、依然として**設定が多く、環境構築が大変**でした。  
そこで、**「設定不要ですぐ動く」**を目指してSpring Bootが誕生しました。

#### Spring Boot 1.xの主な特徴
- **自動設定（Auto Configuration）** によるセットアップの簡略化
- **組み込みWebサーバー（Tomcat, Jetty, Undertow）** の標準搭載
- **`application.properties` による簡易設定**

Spring Bootはこの時期から**マイクロサービス開発**で広く使われるようになりました。

---

## 4. クラウド・コンテナ時代（2018年〜現在）

### Spring Framework 5.x（2017年〜現在）

#### 背景
クラウドネイティブなアーキテクチャが普及し、**リアクティブプログラミング（非同期処理）**が求められるようになりました。

#### Spring 5.xの主な特徴
- **Spring WebFluxの導入**（リアクティブプログラミング）
- **Java 9以降のモジュールシステム対応**
- **Kotlinのサポート強化**

---

### Spring Boot 2.x（2018年〜2023年）

#### 背景
マイクロサービス、クラウドネイティブの発展により、Spring Bootは**より柔軟で高速なアーキテクチャ**を求められるようになりました。

#### Spring Boot 2.xの主な特徴
- **KubernetesやDockerとの親和性向上**
- **Spring SecurityやSpring Dataの強化**
- **Actuatorの改良**（モニタリング機能が強化）

---

### Spring 6.x / Spring Boot 3.x（2022年〜現在）

#### 背景
- **Java 17以降が主流**になり、最新のJDK機能を活かすことが求められるように
- **クラウドネイティブ（AWS, GCP, Azure）やGraalVMによるネイティブコンパイル**が重要に

#### Spring 6.x / Boot 3.xの主な特徴
- **Jakarta EE 10への移行**（Java EEの完全廃止）
- **GraalVMネイティブイメージ対応**（起動速度が大幅向上）
- **Java 17以上が必須**

このように、Springはクラウド・コンテナ環境に最適化される方向へ進化しています。

---

## まとめ

| 年代 | 主なバージョン | 主要な技術トレンド |
|------|--------------|-----------------|
| **2003年〜2008年** | Spring 1.x / 2.x | EJBからの脱却、DI・AOPの確立 |
| **2009年〜2013年** | Spring 3.x / 4.x | アノテーション化、REST対応 |
| **2014年〜2017年** | Spring Boot 1.x | 設定不要の自動構成、マイクロサービス化 |
| **2018年〜2022年** | Spring 5.x / Boot 2.x | リアクティブプログラミング、クラウド対応 |
| **2022年〜現在** | Spring 6.x / Boot 3.x | Jakarta EE 10移行、GraalVM最適化 |

現在のSpringは、**「クラウドネイティブ & ネイティブコンパイル」**にフォーカスし、ますます**高速・軽量な開発**へと進化しています。