サーブレット/Struts 1/SAStruts経験者が書籍「Spring Boot 超入門」でSpring Bootを学んでみた
はじめに
これまで、JavaのWebシステム開発において、次のWebフレームワークを使ってきました。
これらの知識をベースに、書籍「Spring Boot 超入門」を使って、新たにSpring Bootを自己学習してみました。
第1章 Spring Freamworkを知ろう
Spring Freamworkは、さまざまなプロジェクトや機能が集まって形成されていることを知りました。私はmacOSを使用しており、インストールした開発環境は、何も現時点で最新のもので、次の通りです。
第2章 基礎知識を身につけよう
インターフェースとリスト
問題なし。インターフェースは、この後のコア機能の説明で効いてきます。
C/SとWebのシステム構成
図でわかりやすく説明されているので、初めての方は理解しやすいです。
LombokとGradle
「そういう機能なのだな」ぐらいで。
第3章 Spring Frameworkのコア機能を知ろう
自分が一番学びたかった部分。Springのコア機能である「依存性の注入」と「アスペクト指向」について、丁寧に解説されています。
依存性
クラスとインターフェースの違いをコーディングして確認。インターフェースという概念の良さを体験できます。
DIコンテナ
コードでクラスを明示的に生成しない話。依存する側とされる側の実装ルールを定義して、その流れを図でわかりやすく解説。インスタンス生成に関するアノテーションもバッチリ紹介されており、次にコーディングして確認していくので、しっかり理解できます。
依存関係は、Springだとアノテーションで、SAStrutsだとdiconファイルで、Struts 1だとstruts-config.xmlファイルで、それぞれ定義している感じ。
アノテーション
最近のJavaだと主流でしょうか。個人的にはあまり使ってこなかったので上手く活用できれば生産効率が上がるものだなぁ、と。ドメイン駆動設計を少し交えてMVCに対比させて図と共にわかりやすく解説されています。
アスペクト指向
「中心的感心事」であるビジネスロジックに対して、「横断的関心事」である付随機能を切り分けて実装する考え方。こちらも図とコーディングでわかりやすく解説されています。
AOPといえば、私の場合は今回の統合開発環境であるPleiadesですね。IDEという「中心的感心事」に日本語訳という「横断的関心事」をインターセプト。
Spring Initializr
Spring Bootのスケルトンプロジェクトを作成できるサービス。個人的にはIDEは使わずコマンドラインで開発したかったので、この情報はありがたかったです。
第4章 データベースを操作しよう
データベース、テーブル作成、データ投入の話は問題なし。私の場合、PostgreSQLをzipファイルを使って手動でセットアップしたせいか、pgAdmin4で上手くデータベースを拾えませんでした。
Spring Data JDBC
データベースのアクセスには、サーブレットではスッピンのJDBC、Struts 1ではiBatis、SAStrutsではDolten(S2Dao)を使っていました。
ドライバーは、メジャーなRDBMSはサポートしています。(Firebirdは...残念)
アノテーションのおかげで、エンティティクラスにはコンストラクタやsetter/getterを明示的に書かなくても良いのでコードもプロパティだけでスッキリ。更新はsave()メソッドのみで、主キーを表す@Idアノテーションのプロパティがnullかどうかでinsertかupdateかを振り分ける仕組みには驚きました。
CrudRepositoryを継承したリポジトリークラスはインターフェースのため、クラス生成を意味する@Repositoryアノテーションをつけないところは、なるほどなぁ、と。(そんな@Repositoryアノテーションは、いつどこで紹介されるのか?)
第5章 MVCモデルを知ろう
Webシステム開発では主流の構成モデルであり、Struts 1で経験済み。
Struts 1でのstruts-config.xmlの内容を、アノテーションで表現する感じ。URLルーティングをコントローラークラスのクラスやメソッドに対応させてコーディングしたり、特定のディレクトリーにビューとなるHTMLファイルを配置する感じは、以前同様に自主学習したRailsを思い出させました。
業務連絡:クラスの役割構成については、自社製フレームワークよりStruts 1に近いです。
第6章 テンプレートエンジンを知ろう
サーバーサイドレンダリングにおいては必要かと。JavaではJSPオンリーでした。Spring BootではThymeleafが推奨されていることのこと。他のテンプレートエンジンの使用経験があれば、方言レベルの違いかと。軽く自作とかしませんでしたか?
第7章 リクエストパラメータを取得しよう
Struts 1でのActionForm。DTO(データ転送オブジェクト)クラスに@Dataアノテーションを付与することで、Webブラウザーからのパラメーター値を設定したDTOクラスを生成してくれます。
第8章 バリデーション機能を知ろう
恥ずかしながら、バリデーション(入力値のチェック)は自前で用意して使っており、フレームワークで用意されていたものは使ったことがないので、上手く使えば便利なのだろうなぁと。
メッセージをmessage.propertiesファイルで管理する方法はStruts 1と同じですかね。適用パターンとしては、例えば、国際化対応で日本語メッセージファイル、英語メッセージファイルなどを用意して切り替えるとかがありますよね。
第9章〜第12章
これまで学んできた内容を駆使して、サンプルWebアプリケーションを作成する流れが紹介されています。
補足(REST対応)
こちらは書籍「プロになるJava」の「第6部 Webアプリケーション開発」をご覧ください。こちらの書籍の章にも、Spring BootでサンプルWebアプリケーションを作成するまでの解説がなされています。
コントローラークラスに@RestControllerアノテーションを使うことで、レスポンスとしてJSON文字列などビュー以外を返すことが可能になります。
さいごに
「Spring Boot完全に理解した」ではありませんが(笑)、Spring Bootを使ったWebアプリケーション開発の最初を一通り学ぶことができました。
集中すれば2,3日で読めますし、各章をチュートリアル形式で実際にコーディングしながら進められるので、これから新しくSpring Bootを始める人や新入社員さん達などにオススメの教材です。
2021年発行ですが、掲載されているコードは最新安定版のSpring Boot 2.6.7でも動作しました。
Spring BootもまたMVCモデルのため、JavaでWebフレームワークを使ったシステム開発経験があれば「これはこれのことか!」と脳内変換やイメージをしやすく、学びの速度を加速できます。
アノテーションのおかげで、POJO(Plain Old Java Object)に役割を与える形で実装できるのも、テストを含めて良い点だと思いました。
業務連絡
これから実現させたいことが一通り学べます。主要なアノテーションを覚えて、各クラスファイルのディレクトリー構成や、MVCの各クラスの書き方を上手く定義して、実装ルールを確立すれば、進めていけるはずです。
P.S. ちなみに、今後、私がSpring Bootで業務を行うかは未定です...まずは趣味Techとして。
Discussion