はじめに
今更ながら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を使って認証されたユーザーしか閲覧できないページを作成している。
※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も使用してる。
※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とかだろうが、それらに関するアノテーションの解説等は上記に含まれていない。それらについては別途調べたり、公式のリファレンスを見るのがいいと思うが、こっちも多い……