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

  • 20
    いいね
  • 0
    コメント

Java EE Advent Calendar 2016 の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フレームワークのいちモジュールになっており、 spring-core も含めて20のアーティファクトがSrpingフレームワークのモジュールとして列挙されている。
http://projects.spring.io/spring-framework/

Spring Boot

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

Spring Initializr

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かバイナリ、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

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

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

Spring Batch

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

Spring Integration

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

Spring Security

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

Spring Social

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

Spring 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

なぜかプロジェクト一覧には掲載されていないステートマシン(状態遷移)を管理するフレームワーク。
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://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

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

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

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

この投稿は Java EE Advent Calendar 20167日目の記事です。