はじめに
勝手にやってる「なぁに?」シリーズ(というメモ)。
今回は、言わずと知れたSpringについて。
Springとは?
知らないことは、最初に歴史をたどると理解がしやすいです。 いいスライドを見つけました。
21~22スライド目で全体感が確認できます。
ざっくり、こんな感じです。
2004年、Rod Jonsonが設立した「INTERFACE 21」という名称(会社名)ではじまった。 重厚なEJBを否定し、軽量なDIコンテナを提供した。
2007年、「spring source」に社名変更。
- 2009年、vmware が spring source を買収。
- 2013年、スピンオフによりPivotalへ。
Springには複数のプロジェクトがあり、2004年から継続的に追加されてきています。 簡単に見ていきます。
Spring Projects には、どんなんがあるの?
SpringのWebサイト(Prjects)にまとめられており、その機能は多岐に渡ります。
まず、プロジェクトは大きく3つに分類されています。
Main Projects(メインプロジェクト) 文字通り、メインで取り組まれているプロジェクト。 ひとつのプロジェクトあたり、3~6人程度で開発されているそうです。(意外と少ない!!)
Community Projects(コミュニティープロジェクト) コミュニティで開発中のプロジェクト(ということかな?)。
Projects in Attic(屋根裏にあるプロジェクト) 開発を終了したプロジェクトなので、屋根裏に放り込まれているわけですね。
全部だと数が多いので、以降はメインプロジェクトのみ見ていきたいと思います。
Main Projects(メインプロジェクト)
1. Spring Boot
- SpringFrameworkベースのアプリケーションを簡単に作ることができるフレームワーク。
- Webコンテナが内包されているため、スタンドアロンで動作する。
- 利用するメリットは、XMLの記述が不要、依存モジュールの管理が容易、単体実行可能なjarファイルの作成が可能など。
- 構築が簡単かつスタンドアロンで動作することから、マイクロサービスの開発で使われることがある。
2. Spring Framework
Core technologies: dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP. Testing: mock objects, TestContext framework, Spring MVC Test, WebTestClient. Data Access: transactions, DAO support, JDBC, ORM, Marshalling XML. Spring MVC and Spring WebFlux web frameworks. Integration: remoting, JMS, JCA, JMX, email, tasks, scheduling, cache. Languages: Kotlin, Groovy, dynamic languages.
3. Spring Cloud Data Flow
- ストリーム処理とバッチ処理に関するデータパイプラインを作成できる。
- ストリーム処理のデータは(理論的には)無制限だが、バッチ処理は一定量のデータ処理を行い終了するという違いがある。
- クラウドネイティブなプラットフォームに最適化されている。
- 参考
4. Spring Cloud
- 分散システムを開発するためのツール群を提供する。
- サービスディスカバリやサーキットブレイカーなど、クラウドネイティブアプリケーションの構築に必要な機能があげられる。
- 内包されるプロジェクトは以下のとおりで、とても多い。
- Spring Cloud Config
- Spring Cloud Netflix
- Spring Cloud Bus
- Spring Cloud Cloudfoundry
- Spring Cloud Open Service Broker
- Spring Cloud Cluster
- Spring Cloud Consul
- Spring Cloud Security
- Spring Cloud Sleuth
- Spring Cloud Data Flow
- Spring Cloud Stream
- Spring Cloud Stream App Starters
- Spring Cloud Task
- Spring Cloud Task App Starters
- Spring Cloud Zookeeper
- Spring Cloud AWS
- Spring Cloud Connectors
- Spring Cloud Starters
- Spring Cloud CLI
- Spring Cloud Contract
- Spring Cloud Gateway
- Spring Cloud OpenFeign
- Spring Cloud Pipelines
5. Spring Data
6. Spring Integration
- EIP(Enterprise Integration Patterns)で提唱されているメッセージングによる非同期なアーキテクチャのデザインパターンをSpringFrameworkを使って実装するためのアプリケーションフレームワーク。
- 参考
7. Spring Batch
- 軽量なバッチフレームワーク。
- シンプルな処理で大量データを処理したり、ジョブの管理を行えたりする。
- 参考
8. Spring Security
- 認証やアクセス制御の機能を提供するフレームワーク。
- Springベースのアプリケーションにおけるデファクトスタンダードと位置付けられている。
9. Spring Hateoas
- HATEOAS : Hypermedia As The Engine Of Application State
- HATEOASはRESTの一部。
- 噛み砕くと「REST内に、次にアクション可能なリンクを含めておくね」というもの。
- 背景にあるのは「Web上のリンク=ユーザーが取れるアクション」という考え方のようだ。
- そのため、RESTクライアント(受信側)は、「ハイパーメディアの一般的な理解を超えて、アプリケーションまたはサーバーと対話する方法に関する予備知識をほとんど必要としません。」としている。(from Wikipedia)
- 少々ややこしい話なので、参考等を見つつ理解を深めていただくことをお勧めする。
- 参考
10. Spring Rest Docs
- RESTfulサービスのAPIドキュメントを自動生成できる。
11. Spring AMQP
- RabbitMQを抽象化したライブラリで、AMQPベースになっている。
- RabbitMQ : 非同期処理を実現するオープンソースのメッセージキューイングミドルウェア。
- AMQP : Advanced Message Queuing Protocol、メッセージ指向ミドルウェアのオープンスタンダードなアプリケーション層プロトコル。
- 参考
12. Spring Mobile
13. Spring for Android
- Androidアプリの開発フレームワーク。
- Spring Frameworkを拡張したもの。
14. Spring Web Flow
- 画面遷移をベースとしたWebアプリケーション開発のフレームワーク。
- ステートフルなデータ扱うためのセッション管理をしてくれる。
15. Spring Web Services
- ドキュメントドリブンなWebサービス開発を行うためのプロダクト。
- 参考
16. Spring LDAP
- LDAPを利用したユーザー認証を行うことができる。
17. Spring Session
- ユーザーのセッション情報を管理するためのAPIと実装(ex.Redis)を提供する。
- アプリケーションコンテナ(ex.Tomcat)のセッション管理を置き換える事ができる。
- 利用メリットは、アプリケーションコンテナ固有の制約などに縛られないこと、クラスタ化したセッションをサポートできることなどがあるよ。
18. Spring Shell
- シェルのようなREPLツールが作れるフレームワーク。
- REPL : Read-Eval-Print Loop、入力-評価-出力 のループ
- 参考
19. Spring Flo
- JavaScriptライブラリ。
- Spring Cloud Data Flow のストリームビルダーの基礎として使用される。
20. Spring for Apache Kafka
- 分散型でフォールトトレラントなストリーム処理システム。
- 参考
21. Spring Statemachine
- Springアプリケーションにおいて、ステートマシンの概念を使用するためのフレームワーク。
22. Spring IO Platform
- 2019年4月9日にサポートが終了した。
- モダンアプリを構築するためのバージョン管理されたプラットフォーム。
- 依存性の管理を行うことができる。
- 参考
おわりに
知らないプロジェクト、内容が多かった。わからない言葉も多かったので、説明が中途半端になってしまった。 まだまだ勉強不足です。また何かの機会に改訂したいと思います。
参考
Spring系の2016年の現行プロジェクトをまとめてみる https://qiita.com/sudoyu/items/2af10b352450d6f57c40