LoginSignup
10
14

More than 5 years have passed since last update.

Spring Frameworkの公式スタートガイドについて

Last updated at Posted at 2018-07-16

はじめに

今更ながらSpring Frameworkを覚えようと思い公式のスタートガイドを覗いてみたが、数が滅茶苦茶多かった。
本当はすべて実際に実行しようと思っていたが挫折し、カテゴリ分けすら中途半端な感じになったが、一応一通り目は通したので供養のためにまとめた。
なお内容は2018年6月時点のものである。

スタートガイド

Spring Bootのビルドの基本について

https://spring.io/guides/gs/spring-boot/
Spring Bootのビルドにおける基本的な内容について。
他のスタートガイドと同列に扱われているが、最初に目を通してもいいと思う。

IDE

Spring Tool Suite

https://spring.io/guides/gs/sts/
Spring Framework用のIDEであるSpring Tool Suiteについて。

IntelliJ IDEA

https://spring.io/guides/gs/intellij-idea/
IntelliJ IDEAの使い方について。Ultimate EditionはSpring Frameworkと連携しているらしいが、多分有料。

REST API

作成

https://spring.io/guides/gs/rest-service/
HTTP GETリクエストでJSONを返すAPIの作り方。
POSTリクエストによるAPIの作成等には特に触れていないので、そこは別途調べる必要がある。

実行

https://spring.io/guides/gs/consuming-rest/
RestTemplateクラスによる簡単なREST APIの実行方法。

定期タスクの実行

https://spring.io/guides/gs/scheduling-tasks/
一定間隔ごとにタスクを実行させたい場合の実装方法について。
サンプルではfixedRate(実行中のタスクが完了したかどうかにかかわらず、一定間隔でタスクを実行)を使用しているが、その他にもfixedDelay(実行中のタスクが完了してから一定時間待機して次のタスクを実行)やcronなんかもある。

プロジェクトのビルドについて

Gradle

https://spring.io/guides/gs/gradle/
Gradleによるビルド。

Maven

https://spring.io/guides/gs/maven/
Mavenによるビルド。

WARファイルの作成

https://spring.io/guides/gs/convert-jar-to-war/
WARファイルの作成について。

マルチプロジェクト

https://spring.io/guides/gs/multi-module/
複数のプロジェクトをビルドする方法について。

DB

JDBCによるRDBへの接続

https://spring.io/guides/gs/relational-data-access/
JdbcTemplateクラスを使用したRDBへの接続方法について。

トランザクション管理

https://spring.io/guides/gs/managing-transactions/
その名の通りDBのトランザクション管理について。

ファイルのアップロード

https://spring.io/guides/gs/uploading-files/
ファイルのアップロード方法について。
インターフェースしか例を表示してない箇所とかあるので、とりあえず動かしたいとかいう場合は公式のGitHubを参考にするのが良い。
あとテストコードでMockMvcRequestBuilders.fileUploadメソッドを使用しているがもう非推奨のようなので、代わりにMockMvcRequestBuilders.multipartメソッドを使うのが良さそう。あんまちゃんと更新してないんだろうか……

セキュリティ

LDAPによる認証

https://spring.io/guides/gs/authenticating-ldap/
LDAPによる認証について。
application.propertiesの修正内容を省略しているようなので、その点については公式のGitHubが参考になる。
テスト用のためユーザー情報をファイルで管理してたり、パスワードのエンコード用にLdapShaPasswordEncoder既に非推奨になっているクラス)を使用していたりするので、本番で使う場合はもっと色々調べる必要がありそう。

ページの認証

https://spring.io/guides/gs/securing-web/
Spring Securityを使って認証されたユーザーしか閲覧できないページを作成している。

Facebook

※2018/08追記
下記のリンク自体はあるが、公式のスタートガイド一覧からは削除されていた。GitHubのサンプルプログラムもプロジェクト名がdeprecatedになっているため、今後Facebook関係のプロジェクトは使えない気がする。

アプリケーションへの接続

https://spring.io/guides/gs/register-facebook-app/
FacebookTemplateクラスを使ったFacebookアプリケーションへの接続。公式のGitHubにサンプルあり。

データへのアクセス

https://spring.io/guides/gs/accessing-facebook/
Facebookのデータへのアクセスについて。例ではフィード情報を取得しているが、ドキュメントを見る限りいいね!や友達情報なんかも拾ってこれそう。

Pub/Sub

Redis

https://spring.io/guides/gs/messaging-redis/
NoSQLデータベースとして知られるRedisだが、メッセージの送受信なんかも出来るらしい。サンプルではそのメッセージの送受信についてまとめている。

RabbitMQ

https://spring.io/guides/gs/messaging-rabbitmq/
RabbitMQを使ったメッセージの送受信について。

JMS

https://spring.io/guides/gs/messaging-jms/
JMSによるメッセージの送受信について。

Google Cloud Pub/Sub

https://spring.io/guides/gs/messaging-gcp-pubsub/
Google Cloud Pub/Subの利用について。サンプルだとSpring Integrationも使用してる。

Twitter

※2018/08追記
下記のリンク自体はあるが、公式のスタートガイド一覧からは削除されていた。GitHubのサンプルプログラムもプロジェクト名がdeprecatedになっているため、今後Twitter関係のプロジェクトは使えない気がする。

アプリケーションへの接続

https://spring.io/guides/gs/register-twitter-app/
Twitterアプリケーションへの接続方法……なのだがなんかページがバグってる気がする。GitHubへのリンクもうまく張れてない。一応公式のGitHubはここ

データへのアクセス

https://spring.io/guides/gs/accessing-twitter/
Twitterのデータへのアクセスについて。ドキュメントを見る限りタイムラインやユーザーリストの操作なんかもできそう。

Neo4j

データへのアクセス

https://spring.io/guides/gs/accessing-data-neo4j/
グラフデータベースであるNeo4jへのデータアクセスについて。

REST

https://spring.io/guides/gs/accessing-neo4j-data-rest/
RESTによるNeo4jへのアクセスについて。

Spring Boot Actuator

https://spring.io/guides/gs/actuator-service/
Spring BootにはSpring Boot Actuatorなるサブプロジェクトがあり、これを組み込むことでヘルスチェック用のエンドポイント等様々なエンドポイントが追加されるらしい。

バッチ処理

https://spring.io/guides/gs/batch-processing/
Springにおけるバッチ処理について。
CSVからデータ取得→値を大文字に変換→DBに値を保存という一連の処理を実行している。

HATEOAS

https://spring.io/guides/gs/rest-hateoas/
HATEOASの考え方?を組み込んだRestful APIの作成について。

Pivotal GemFire

データへのアクセス

https://spring.io/guides/gs/accessing-data-gemfire/
インメモリデータグリッドであるPivotal GemFireの利用について。

データのキャッシュ

https://spring.io/guides/gs/caching-gemfire/
Pivotal GemFireのデータのキャッシュについて。

REST

https://spring.io/guides/gs/accessing-gemfire-data-rest/
RESTによるPivotal GemFireへのアクセスについて。

EIP

https://spring.io/guides/gs/integration/
スタートガイドのタイトルは「Integrating Data」(データのインテグレーション?)。
Springのプロジェクトの一つにSpring Integrationなるプロジェクトがあり、調べた限りではEIP(Enterprise Integration Patterns)の概念に従ったフレームワークらしい。データをメッセージとしてやり取りし、他のアプリケーションと統合させるために利用されるんだとか。

JPA

データへのアクセス

https://spring.io/guides/gs/accessing-data-jpa/
JPAによるDBへのデータアクセスについて。

REST

https://spring.io/guides/gs/accessing-data-rest/
REST+JPAによるDBアクセスについて。専用のアノテーションつけるだけでコントローラーとか作成せずとも動作するみたい。

MySQL

https://spring.io/guides/gs/accessing-data-mysql/
JPAを使用したMySQLへのデータアクセスについて。

MongoDB

利用方法

https://spring.io/guides/gs/accessing-data-mongodb/
NoSQLであるMongoDBの利用について。

REST

https://spring.io/guides/gs/accessing-mongodb-data-rest/
RESTによるMongoDBへのアクセスについて。

Webページ

作成

https://spring.io/guides/gs/serving-web-content/
SpringフレームワークによるWebページの作成について。

フォーム入力のバリデーション

https://spring.io/guides/gs/validating-form-input/
タイトルの通り、フォーム入力のバリデーションについて。

フォーム送信

https://spring.io/guides/gs/handling-form-submission/
フォーム送信について。

非同期処理の実行

https://spring.io/guides/gs/async-method/
マルチスレッドによる処理の実行について。

WebSocket

https://spring.io/guides/gs/messaging-stomp-websocket/
WebSocketの利用について。

AngularJS

https://spring.io/guides/gs/consuming-rest-angularjs/
AngularJSを利用する場合について。

rest.js

https://spring.io/guides/gs/consuming-rest-restjs/
rest.jsの利用について。というか、検索かけてもrest.jsが何なのかがいまいちわからなかったがメジャーなんだろうか。

jQuery

https://spring.io/guides/gs/consuming-rest-jquery/
jQueryの利用について。

CORS

https://spring.io/guides/gs/rest-service-cors/
CORSへの対応について。

YARN

Gradleによるビルド

https://spring.io/guides/gs/gradle-yarn/
YARNを利用したビルドについて(Gradle)。

Mavenによるビルド

https://spring.io/guides/gs/maven-yarn/
YARNを利用したビルドについて(Maven)。

アプリケーションの作成

https://spring.io/guides/gs/yarn-basic-single/
YARNを使用したシンプルなアプリケーションの作成について。

アプリケーションの作成(マルチプロジェクト)

https://spring.io/guides/gs/yarn-basic/
YARNを使用したシンプルなアプリケーションの作成について。シンプルと言いつつHadoopと連携したりすることでJARが3つくらい作成される。

テスト

https://spring.io/guides/gs/yarn-testing/
YARNを使用したアプリケーションに対するテストについて。

バッチ処理

https://spring.io/guides/gs/yarn-batch-processing/
YARNを使用したアプリケーションにおけるバッチ処理について。

バッチ処理の再実行

https://spring.io/guides/gs/yarn-batch-restart/
YARNを使用したアプリケーションで失敗した所からバッチ処理を再開する方法について。

SOAP

Webサービスの利用

https://spring.io/guides/gs/consuming-web-service/
SOAPベースのWebサービスを利用する方法について。

Webサービスの作成

https://spring.io/guides/gs/producing-web-service/
こちらはSOAPベースのWebサービスを作成する方法について。

キャッシュ

https://spring.io/guides/gs/caching/
データのキャッシュについて。メソッド等の実行結果とかをキャッシュから取得したりとかできるらしい。

Cloud Foundry

https://spring.io/guides/gs/sts-cloud-foundry-deployment/
STSを利用してPaaSのひとつであるCloud Foundryへアプリケーションをデプロイする方法について。

HashiCorp Vault

設定方法

https://spring.io/guides/gs/vault-config/
機密情報管理のためのアプリケーションにHashiCorp Vaultなるものがあるらしく、それをSpringから利用するための設定方法が記述されている。

データアクセス

https://spring.io/guides/gs/accessing-vault/
上記HashiCorp Vault内のデータアクセスについて。

WebFlux

https://spring.io/guides/gs/reactive-rest-service/
Version 5からの新機能で、リアクティブプログラミングによって従来とは異なりノンブロッキングなアプリケーションを作成できるらしい。
……と書いても単語の意味を知らないと何のことだが分からないが、要はより少ないスレッドで効率的な処理を実行できるらしい。
これまでのREST APIの実行にはRestTemplateがあったが、ノンブロッキングなアプリケーションとの通信のためにWebClientというクラスもVersion 5から追加されており、そちらの使い方も記述されている。

Azure

https://spring.io/guides/gs/spring-boot-for-azure/
SpringによるアプリケーションをMicrosoft Azureにデプロイする方法について。

ロードバランサ

https://spring.io/guides/gs/client-side-load-balancing/
Netflix Ribbonというクライアント側ロードバランサを使った例について。後述のNetflix Eurekaなんかと絡めて使ったりするらしい。

ルーティング

Zuul

https://spring.io/guides/gs/routing-and-filtering/
Netflix Zuulというライブラリを使用したリクエストのルーティング&フィルタリングについて。

Spring Cloud Gateway

https://spring.io/guides/gs/gateway/
Spring Cloud Gatewayを使用したリクエストのルーティング。サンプルではNetflixが開発しているHystrixというライブラリ(接続先サービスに障害が発生していた場合に対処してくれたりするらしい)を使用した場合の例が紹介してある。
正直ライブラリの目的をちゃんと理解できていないが、よくZuulと比較されているらしいので多分同じカテゴリなんだろう。
Zuul 1時点ではブロッキングAPIでWebSocket等に対応していないが、Spring Cloud GatewayはノンブロッキングAPIなのでWebSocketにも対応している……というのが強みだったらしいが、Zuul 2はノンブロッキングAPIになったようなので、他の点で差別化しているんだろうか。

サービスディスカバリ

https://spring.io/guides/gs/service-registration-and-discovery/
サービスディスカバリ(作成したサービスを登録しておき、必要に応じて検索したりするミドルウェアらしい)であるNetflix Eurekaの利用について。

APIドキュメント

https://spring.io/guides/gs/testing-restdocs/
Spring REST Docsを使用したAPIドキュメントの作成について。

テスト

Consumer Driven Contract

https://spring.io/guides/gs/contract-rest/
コンシューマ駆動契約?について。マイクロサービスにおけるテストの考え方らしい。Spring Cloud Contractというサブプロジェクトがあり、そちらの例になっている。

Webレイヤーのテスト

https://spring.io/guides/gs/testing-web/
Spring Frameworkのテストの基本について。サーバーが立ち上げられるかどうかの簡単なテストから、サーバーを立ち上げずにAPIの動作テストをしたりしている。

Circuit Breaker

https://spring.io/guides/gs/circuit-breaker/
Spring Cloud Gatewayのサンプルにも出ていたNetflix Hystrixについて。関連するサービスが停止していた場合、その他の関係するサービスへの影響を食い止めるための仕組み。

Vaadin

https://spring.io/guides/gs/crud-with-vaadin/
Javaを使用したUIフレームワークであるVaadinについて。サンプルではJPAも使用してDB操作できるUIを作成している。

Redis

https://spring.io/guides/gs/spring-data-reactive-redis/
Pub/SubでRedisを使用した場合の例もあったが、普通に値突っ込んで取得する場合のサンプルはこちらになる。

設定の管理

https://spring.io/guides/gs/centralized-configuration/
Config Serverなるものを立ち上げクライアントサーバーから参照させることで、複数のクライアントサーバーに対して同じ設定を動的に適用させることが出来る……んだと思ってる。

Docker

https://spring.io/guides/gs/spring-boot-docker/
みんな大好きDockerとの連携について。

おわりに

  • 数が多すぎる
  • 一通り眺めて知らない単語を調べるだけでも勉強にはなる
  • Spring Frameworkの基本といえばDIとかだろうが、それらに関するアノテーションの解説等は上記に含まれていない。それらについては別途調べたり、公式のリファレンスを見るのがいいと思うが、こっちも多い……
10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14