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
- アーティファクト名
spring-boot
- https://mvnrepository.com/artifact/org.springframework.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
- アーティファクト名
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
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、Twitter、Syslogなど、さまざまなレイヤのアダプタ(Endpoint)に対応している。
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/
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://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
- アーティファクト名
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
何か見当違いなことを書いていましたら、ぜひコメントでご指摘ください。