ITとかCockatielとか

技術のこととか。飼鳥(オカメインコ)のこととか。気になったこととか。基本的には備忘録。

Springとは

はじめに

勝手にやってる「なぁに?」シリーズ(というメモ)。

今回は、言わずと知れたSpringについて。

f:id:sik_bug:20191220231315p:plain

Springとは?

知らないことは、最初に歴史をたどると理解がしやすいです。 いいスライドを見つけました。

橋本 賢二「Spring 12年の歴史」

21~22スライド目で全体感が確認できます。

f:id:sik_bug:20191220231331p:plain

f:id:sik_bug:20191220231344p:plain

ざっくり、こんな感じです。

  • 2004年、Rod Jonsonが設立した「INTERFACE 21」という名称(会社名)ではじまった。 重厚なEJBを否定し、軽量なDIコンテナを提供した。

  • 2007年、「spring source」に社名変更。

  • 2009年、vmware が spring source を買収。
  • 2013年、スピンオフによりPivotalへ。

Springには複数のプロジェクトがあり、2004年から継続的に追加されてきています。 簡単に見ていきます。

Spring Projects には、どんなんがあるの?

SpringのWebサイト(Prjects)にまとめられており、その機能は多岐に渡ります。

f:id:sik_bug:20191220231401p:plain

まず、プロジェクトは大きく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

  • さまざまなデータストアに対応したモジュールを提供する。
  • 具体的には、JDBCJPA、KeValue、MongoDB、Redis、RESTなどがある。

6. Spring Integration

7. Spring Batch

8. Spring Security

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

12. Spring Mobile

  • その名の通り、モバイルアプリケーション用のフレームワーク
  • Spring MVC を拡張したもの。
  • ネイティブアプリではなく、Web用のモバイルアプリが対象。

13. Spring for Android

14. Spring Web Flow

  • 画面遷移をベースとしたWebアプリケーション開発のフレームワーク
  • ステートフルなデータ扱うためのセッション管理をしてくれる。

15. Spring Web Services

16. Spring LDAP

  • LDAPを利用したユーザー認証を行うことができる。

17. Spring Session

  • ユーザーのセッション情報を管理するためのAPIと実装(ex.Redis)を提供する。
  • アプリケーションコンテナ(ex.Tomcat)のセッション管理を置き換える事ができる。
  • 利用メリットは、アプリケーションコンテナ固有の制約などに縛られないこと、クラスタ化したセッションをサポートできることなどがあるよ。

18. Spring Shell

19. Spring Flo

  • JavaScriptライブラリ。
  • Spring Cloud Data Flow のストリームビルダーの基礎として使用される。

20. Spring for Apache Kafka

21. Spring Statemachine

  • Springアプリケーションにおいて、ステートマシンの概念を使用するためのフレームワーク

22. Spring IO Platform

おわりに

知らないプロジェクト、内容が多かった。わからない言葉も多かったので、説明が中途半端になってしまった。 まだまだ勉強不足です。また何かの機会に改訂したいと思います。

参考

Spring系の2016年の現行プロジェクトをまとめてみる https://qiita.com/sudoyu/items/2af10b352450d6f57c40