ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

Spring概論~Spring means Family of Projects~

前提

Springってなんか色々あってよく分からないという人向けの記事です。
※実装の解説はしません。
用語がそれぞれ何を指しているのか明確にしたいという人向け。

【公式】"Spring" means "family of projects"

The term "Spring" means different things in different contexts. It can be used to refer to the Spring Framework project itself, which is where it all started. Over time, other Spring projects have been built on top of the Spring Framework. Most often, when people say "Spring", they mean the entire family of projects. This reference documentation focuses on the foundation: the Spring Framework itself.

Spring公式ドキュメントでは、 「"Spring"という言葉はコンテキストによってさまざまな意味を持つが、殆どの場合は"Springプロジェクトのファミリー"を指す」と言っています。

「Springプロジェクト」とは何か?

f:id:penguinlabo:20200704154538p:plain

公式サイトのprojectsページでは、左側にズラッと「Spring〇〇」というキーワードが並んでいるのが見えます。
この一つ一つが「プロジェクト」です。

したがって、よく耳にする「SpringBoot」や「SpringFramework」というのは、「一つのプロジェクト」のことを指しています。
さらに、各トグルを開くと出てくる「Spring Security Kerberos」や「Spring Security OAuth」は「サブプロジェクト」と呼ばれます。

SpringはSpringFrameworkプロジェクトから始まった

とりわけ有名なSpringFrameworkプロジェクトとSpringBootプロジェクトについて説明します。

まずは「SpringFrameworkプロジェクト」から。

SpringFrameworkプロジェクトは、Springファミリーの始祖です。

他のプロジェクトが「Spring〇〇プロジェクト」と何かの機能に特化した名前になっているのに、 このプロジェクトだけ「Spring"Framework"プロジェクト」とジェネラルな名前になっているのは、Springは始めこれだけだったからです。

SpringFrameworkプロジェクトのjavadoc を見ると、
 ・AOPを実現する org.springframework.aopパッケージ
 ・JavaBeanを扱う org.springframework.beansパッケージ
 ・データアクセスを実現する org.springframework.daoパッケージ
 ・JavaEEテクノロジーを使ってMVCを実現する org.springframework.webパッケージ
など基底的なパッケージだけで構成されていることが分かります。

Springファミリーは、SpringFrameworkプロジェクトという、Javaエンタープライズ系システムを作る際に必要とされる、最低限の機能を包括的に提供することから始まりました。
エンタープライズ系システム=企業向けシステム=データ登録処理があるシステム。

余談ですが、『SpringMVC』とタイトルに銘打ったサイトや書籍が多くありますが、実は「SpringMVCプロジェクト」や「org.springframework.mvcパッケージ」というのは存在しません。Mavenのセントラルリポジトリに、artifactId名が「spring-webmvc」というリポジトリがありますが、SpringFrameworkプロジェクトのパッケージAPI群で構成されています。SpringでオンラインのWebアプリを作る場合、Web3層のViewレイヤの実装が必然的にModel,View,Controllerの形となるので(またSpring登場時はMVCも今ほど一般的ではなかったため)、呼称として定着したのではないかと拝察しています。 さらに、Spring5(2017年)からはMVCに加えて非ブロッキング処理を可能にする「WebFlux」というのも登場しているようですね。これについてはまだ勉強中です。 https://docs.spring.io/spring/docs/5.0.3.RELEASE/spring-framework-reference/web.html#spring-webhttps://spring.pleiades.io/spring/docs/current/spring-framework-reference/web-reactive.html

SpringBootはSpringに入門するのに最適なプロジェクト

「SpringBootプロジェクト」として特別に作りこまれているのは「org.springframework.boot」パッケージのみです。 他のプロジェクトの多くが、新しいデザインパターン、新しいソフトやデバイスに対応する、新しい機能を提供しているのに対して、Bootは単に「SpringFrameworkをより簡素化・便利化したプロジェクト」です。

たとえば、Bootで「@SpringBootApplication」というアノテーションが提供されましたが、これは単純にこれまで開発者が一つ一つ設定していた「@EnableAutoConfiguration」や「@ComponentScan」といったアノテーションをまとめる役割をしているだけです。また、開発者はTomcatを別に用意する必要がありましたが、Bootのパッケージ群の中にtomcatのjarが組み込まれているため、数分足らずでSpringBootアプリケーションでHelloWorldすることが可能になりました。

マツキがエンジニアになったばかりの2016年時は、まだSpringを使っているプロジェクトは多くありませんでしたが、Boot登場後ハードルが一気に下がり、Springをエンジニアに学習させ、システムに導入するプロジェクトが増えた気がします。

このブログでもSpringBootを使って画面遷移のあるシステムの開発手順を連載中です。

penguinlabo.hatenablog.com

おわり

Springを取り巻く用語は多少すっきりしたでしょうか。 Springの登場から20年経った今もなお、世界中のコミッターの手によって進化しています。 定期的にチェックしてこのブログでも随時取り上げられればと思います。

以上