Spring系の2016年の現行プロジェクトをまとめてみる

[Java EE Advent Calendar 2016](http://qiita.com/advent-calendar/2016/javaee) の7日目の記事です。
Springほにゃららってたくさんあって把握しきれてないので、この機会にまとめてみました。

Springの本家本元プロジェクト一覧はこちら。
https://spring.io/projects

GitHubはこちら。
https://github.com/spring-io/
https://github.com/spring-projects/

Mavenリポジトリのグループはこちら。サブグループも複数あります。
https://mvnrepository.com/artifact/org.springframework

まとめた時点での情報なので、プロジェクトの統廃合などで変化することがあります。

# よくアップデートされているもの

## Spring IO platform (Spring Core)
* アーティファクト名 `spring-core`

Java SE(JDK 7/8)のみを使い、Groovy、Grails、Java EEをサポートするコアライブラリ。Gradleの `dependency-management` プラグインやMavenの `platform-bom` とあわせて、Spring系エコシステムの土台になっている。
http://platform.spring.io/platform/
http://docs.spring.io/platform/docs/current/reference/html/getting-started-using-spring-io-platform.html

## Spring Framework
* アーティファクト名 `spring-context`, `spring-beans`など

いわゆるDI×AOPコンテナに端を発し、Spring系のフレームワークの根幹を成してきた。単にSpringと言った場合、このSpringフレームワークを指す(はずな)ので、Springの後ろにあるものを略すのはやめよう。SpringMVC(Spring Web MVC)も[Springフレームワークのいちモジュール](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)になっており、 `spring-core` も含めて[20のアーティファクト](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html#d5e381)がSrpingフレームワークのモジュールとして列挙されている。
http://projects.spring.io/spring-framework/

## Spring Boot
* アーティファクト名 `spring-boot`
* https://mvnrepository.com/artifact/org.springframework.boot

サーブレットコンテナ(Tomcat、JettyまたはUndertow)を内包したスタンドアロンなアプリケーションを、XML設定不要で書けるフレームワーク。Microserviceの流れの中で注目され、周辺ライブラリを含めひとつのエコシステムを形成している。
http://projects.spring.io/spring-boot/

### Spring Initializr
* http://start.spring.io/

Spring Bootアプリケーションの雛形を、Webでポチポチやるだけで作ってくれる。本記事で紹介してない多数のサブライブラリも1行の端的な説明がされているので、まずfull versionを見よう。Spring Boot Starterを利用することで実現されている。

### Spring Boot Starter
* アーティファクト名 `spring-boot-starter` その他 `spring-boot-*-starter` 多数

機能を使うときに必要になる依存ライブラリの解決をしてくれるライブラリ群。たくさんある。Starterが提供されてる機能については `spring-boot-*-starter` を使うとよい。Spring InitializrもStarterによって実現している。
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters

### Spring Boot CLI
* アーティファクト名 `spring-boot-cli`

`spring` コマンドを提供する。単体のgroovyスクリプトで Spring Boot アプリケーションが実行できたりする。[SDKMAN](http://sdkman.io/)かバイナリ、Homebrew/MacPortsでインストールする。
http://docs.spring.io/spring-boot/docs/current/reference/html/getting-started-installing-spring-boot.html#getting-started-installing-the-cli

### Spring Boot Actuator
* アーティファクト名 `spring-boot-actuator`

Spring Boot アプリケーションに、よく使われるようなEndpoint(API集)を追加してくれる。ちょう便利。
http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

### Spring Boot Developer Tools
* アーティファクト名 `spring-boot-devtools`

開発時にオートリスタート・ライブリロード・リモートデバッグなどの機能を提供する。
http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html

### Spring Boot Test
* アーティファクト名 `spring-boot-test`

JUnit, Spring Test, AssertJ, Hamcrest, Mockito, JSONassert, JsonPath を使ったユニットテスト・インテグレーションテストをSpring Boot上で書くためのライブラリ。
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

## Spring Data
* アーティファクト名 `spring-data-releasetrain` および `spring-data-*` 多数
* https://mvnrepository.com/artifact/org.springframework.data

O/Rマッピングの仕組みを提供するフレームワーク。データストアごとにサブライブラリに分かれている。最近Release Trainという単位でリリースが行われている。
http://projects.spring.io/spring-data/

## Spring Cloud
* アーティファクト名 `spring-cloud-dependencies` および `spring-cloud-*` 多数

分散構成のアプリケーション群を構築・管理するためのフレームワーク。AWS、CloudFroundry、Consulなど個別のプラットフォームに対応したライブラリのほか、Netflix OSS(Eureka, Hystrix, Zuul, Archaiusなど)、クラスタ管理(Zookeeper, Redis, Hazelcast, Consulなど)、分散トレース(Zipkin, HTrace, ELKなどログベース)など多数の機能がサブライブラリで提供されている。Spring Boot同様、Starterもある。Release Trainという単位でリリースが行われている。
http://projects.spring.io/spring-cloud/

## Spring Cloud Data Flow
* https://github.com/spring-cloud/spring-cloud-dataflow

Spring XDをクラウドネイティブに再構成したフレームワーク。CloudFoundry, Apache YARN, Kubernetes, Apache Mesosに対するDeployerが用意されており、それらの上でのMicroserviceのオーケストレーションを提供する。動作にApache KafkaまたはRabbitMQが必要。
http://cloud.spring.io/spring-cloud-dataflow/

## Spring Batch
* アーティファクト名 `spring-batch-core` および `spring-batch-*`
* https://mvnrepository.com/artifact/org.springframework.batch

バッチ処理を作成するのに必要な仕組みを提供する。Spring Bootに組み込むための `spring-boot-starter-batch` など、他のSpring系フレームワークからの利用も考慮されている。
http://projects.spring.io/spring-batch/

## Spring Integration
* アーティファクト名 `spring-integration-core` および `spring-integration-*`
* https://mvnrepository.com/artifact/org.springframework.integration

Endpoint, Channel, Aggregator, Filter, Transformer, Control Busといった要素を使って疎結合なシステムをつなげていくEnterprise Integration Patternsを実現するシステム連携フレームワーク。[MQTT](http://docs.spring.io/spring-integration/reference/html/mqtt.html)、[Twitter](http://docs.spring.io/spring-integration/reference/html/twitter.html)、[Syslog](http://docs.spring.io/spring-integration/reference/html/syslog.html)など、[さまざまなレイヤのアダプタ(Endpoint)に対応](http://docs.spring.io/spring-integration/reference/html/endpoint-summary.html)している。
http://projects.spring.io/spring-integration/

## Spring Security
* アーティファクト名 `spring-security-core`, `spring-security-web` および `spring-security-*`
* https://mvnrepository.com/artifact/org.springframework.security

認証・認可やWebアプリケーションのセキュリティに関わる仕組みを提供するフレームワーク。ユーザがログインするようなシステムの実装で共通的な部分として必要な機能が揃っている。OAuth, SAML, LDAP, OpenId, Kerberos, Spring Dataなどと連携可能で、それぞれサブライブラリになっている。
http://projects.spring.io/spring-security/

## Spring Social
* アーティファクト名 `spring-social-core` および `spring-social-*`
* https://mvnrepository.com/artifact/org.springframework.social

SNSとの連携を実現するフレームワーク。 Twitter, Facebook, LinkedIn, TripIt, GitHub がサポートされているほか、[多数のSNSがコミュニティプロジェクトでサポート](http://projects.spring.io/spring-social/#community-projects)されている。
http://projects.spring.io/spring-social/

## Spring AMQP
* アーティファクト名 `spring-amqp` および `spring-rabbit`
* https://mvnrepository.com/artifact/org.springframework.amqp

RabbitMQをバックエンドにした非同期メッセージングアプリケーションを簡易に実装するためのフレームワーク。分散構成やErlangのサポートもある。
http://projects.spring.io/spring-amqp/

## Spring Session
* アーティファクト名 `spring-session`

TomcatなどサーブレットコンテナのHttpSessionを代替するフレームワーク。クラスタードセッションや単一ブラウザ内の複数ユーザセッション、RESTful APIやWebSocketなどに対応する。
http://projects.spring.io/spring-session/

## Spring Flo

Spring Cloud Data Flowの画面(Stream Designer)に使われているJavascriptライブラリ。
http://projects.spring.io/spring-flo/

## Spring for Apache Kafka
* アーティファクト名 `spring-kafka`

Apache KafkaをSpringから使いやすくするための機能を提供している。 `spring-hadoop` というプロジェクトもあるが、そちらはSpring Dataファミリの一角として扱われているよう。
http://projects.spring.io/spring-kafka/

## Spring Statemachine
* アーティファクト名 `spring-statemachine-core`
* https://mvnrepository.com/artifact/org.springframework.statemachine

なぜかプロジェクト一覧には掲載されていないステートマシン(状態遷移)を管理するフレームワーク。
https://projects.spring.io/spring-statemachine/

## Spring Tool Suite (Spring IDE)

EclipseベースのSpring開発向けIDE。IntelliJ IDEA隆盛で開発ペースは落ちている(※個人の印象です)。
https://spring.io/tools/sts


# 最近それほど大きくアップデートされていないもの

## Spring HATEOAS
* アーティファクト名 `spring-hateoas`

HATEOASに則ったREST APIをSpringMVCで作るためのフレームワーク。あたいHATEOASよくわからない…ので[uehajさんのこの記事](http://uehaj.hatenablog.com/entry/hateoas)とか読んでおくと良さそう。あまり流行ってる感じはなさげ(※個人の印象です)。
http://projects.spring.io/spring-hateoas/

## Spring Web Flow
* アーティファクト名 `spring-webflow`

ステートフルなWebアプリケーションを実装するためのフレームワーク。SPAやMicroserviceの潮流から外れているせいか、2014年に2.4がリリースされたあと大規模なリリースはされていない。
http://projects.spring.io/spring-webflow/

## Spring for Android
* https://mvnrepository.com/artifact/org.springframework.android

SpringフレームワークのAndroid向け…だと思うんですが、あたいAndroidわからないし、Androidな人からも名前を聞いたことないような？(※個人の印象です)
http://projects.spring.io/spring-android/

## Spring Mobile
* アーティファクト名 `spring-mobile`, `spring-mobile-device`

SpringMVCベースのサーバサイドアプリケーションで、モバイルデバイス検知や解像度検知を行うフレームワーク。CSS Media Queriesみたいなことをサーバサイドでもやりたかったんだろうけど、CSSでやるべきことはCSSでやればいいしね…SPAやMicroserviceでは不要でしょう(※個人の印象です)。
http://projects.spring.io/spring-mobile/

## Spring Web Services
* アーティファクト名 `spring-ws-core` など
* https://mvnrepository.com/artifact/org.springframework.ws

SOAPベースのWebサービスを開発するためのフレームワーク。強力なObject/XMLマッピング機能を持つ。XML…ｳｯ…(※個人の印象です)。
http://projects.spring.io/spring-ws/

## Spring LDAP
* アーティファクト名 `spring-ldap-core`

SpringベースのアプリケーションでLDAPを扱うためのフレームワーク。Spring Security経由でもLDAPを扱えるので、Spring Securityを使う場合には `spring-security-ldap` を使うことになるかな。
http://projects.spring.io/spring-ldap/

## Spring Shell
* アーティファクト名 `spring-shell`

コマンドラインアプリケーションを作るためのフレームワーク。Spring Batchがあればいいかな…(※個人の印象です)。
http://projects.spring.io/spring-shell/

## Spring XD

Spring Cloud Data Flowに再構成されました。
http://projects.spring.io/spring-xd/


# (※記事はすべて個人の見解であり、所属する企業を代表するものではありません。)

多数のプロジェクトがあって、これぞSpringワールド。ですね。
Spring Roo, Spring Scalaが無いのは力尽きたから、Spring.NETはさすがに書かなくていいよねって思ったから、SpringFoxは組織が違うから書いていません。

Pivotalの推しは Spring Boot、Spring Cloud、Spring Cloud Data Flow、Spring Security の4つみたいです(これらを起点にして、他のフレームワークも使うでしょう)。
https://pivotal.io/spring-app-framework

何か見当違いなことを書いていましたら、ぜひコメントでご指摘ください。