はじめてのSpring Boot

#はじめてのSpring Boot

最近、スキルアップを狙った就職を考えているため、
フレームワーク未経験ではあるが、フレームワークを使用して
ポートフォリオを作成しようと考えいてる。

現在は、退職済みのため1ヶ月程でポートフォリオを作成する予定だが、
その際の備忘録として記事を投稿する。


ポートフォリオの内容として、Spring Bootを使用して簡単な在庫管理システムを構築する。
今後も、DBや画面の設計、AWSへのデプロイなどを行っていく予定であるが、
Spring Bootの仕様を把握する必要があるため、最初に入門書を何冊か読んだ。

ここでは、直近で読んだ書籍でSpring Boot未経験者からでもアプリケーションを
構築する知識を得られるであろう書籍を紹介する。

紹介する書籍を読む上で、必要となる前提知識は大まかに下記の内容である。
・Java8の言語仕様の知識(Oracle資格 Java8 Gold取得レベル)
　紹介する書籍がJava8での実装を行なっているため、
　Java8の知識は必須となる。
　中でも、StreamAPIは頻出するので、Java8 Goldで関数型インターフェースの動きを
　把握しておいた方がいい

・Java8 デザインパターンの基本的なパターン
　Springのアーキテクチャとして、基本的なデザインパターンが用いられており、
　書籍でもデザインパターンの内容をもとに説明しているものが多い
　押さえておくべきパターンとして、シングルトン、ファクトリーメソッド、アダプター、ビルダー、
　プロキシーなどは知識として事前にもっておく必要がある。
　書籍によっては、簡単なUMLクラス図を使って説明しているものもある。
　特にDIの説明に用いられる委譲の考え方は、Javaの経験が浅くとも必ず理解しておく必要がある。

・Linuxの基礎知識(LPICレベル1取得レベル)
　Spring Bootの環境構築を行う際に、コマンド操作をもとに説明しているものもあるので、
　Linuxの基礎コマンドを把握しておく必要がある
　例として、ローカル環境で開発を進めていく中でRestAPIの呼び出しを
　ローカルのプロセスからコマンドラインで呼び出すなど

・DBの基礎知識
　紹介する入門書は、H2DB、MYSQL,POTSGRESQLを使用してDB操作を行なっている。
　データの読み書きなどを行う基本的なSQLの把握、Java連携を考えてコネクションプール、JDBCの仕様や
　ER図の読み方、正規化、隔離性水準、伝播レベルを押さえておく必要がある

・HTML、CSS、JavaScriptの基本的知識
　HTMLは、Springの機能であるタイムリーフというテンプレートを使用して記述される。
　内容を理解するには、CSSやJSの簡単な動きも簡単に把握しておいた方がいい。
　HTMLは、テーブルタグの作成方法をわかっていないと読み進めていくことができない。
　CSSは、簡単な装飾がされている画面の説明に使用しているため、ネット検索しながらでも対応可能。
　JSは、マレではあるが記述されているものもある。 クリックファンクションの動かし方や
　非同期リクエストの動作の理解が必要。

・ツール
　Eclipseの使い方を把握しておく必要がある。
　書籍の内容で懇切丁寧に説明しているものは、あまりないと感じるためである。
　ビルドツールとしてMavenの動きをコマンドレベルで把握しておいた方がいい。
　していなくとも、下記で紹介する書籍で対応可能だが詰まってしまうこともあるかもしれない。
　知識としてあった方がいい程度。


最後に、Javaを使用したアプリケーションのコードを現場でしっかり読んでおく必要があると感じた。
理由として、Spring Bootの書籍はアプリケーション全体を構築するためのツールとして、
Springの各機能を各章に互いに関連性なく、部分的にサンプルコードを載せているものが非常に多いため、
そもそもアプリケーションがどういう機能によって成立しているのかを把握していないと、
記載されているコードをどのように実装すればいいのか、何のためのコードなのかを理解できないためである。


以上のことを踏まえて、これからSpring Boot(Spring)を学ぶ予定の方に
上から紹介する書籍を順番に読み進めてほしいと思う。


## 後悔しないための入門書 Spring解体新書
https://www.amazon.co.jp/%E3%80%90%E5%BE%8C%E6%82%94%E3%81%97%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AE%E5%85%A5%E9%96%80%E6%9B%B8%E3%80%91Spring%E8%A7%A3%E4%BD%93%E6%96%B0%E6%9B%B8-Boot2%E3%81%A7%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%9C%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B9%E3%82%8B%EF%BC%81Spring-Security%E3%80%81Spring-JDBC%E3%80%81Spring-MyBatis%E3%81%AA%E3%81%A9%E5%A4%9A%E6%95%B0%E8%A7%A3%E8%AA%AC%EF%BC%81-ebook/dp/B07H6XLXD7/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2VJILBQ819F6&keywords=spring+%E8%A7%A3%E4%BD%93%E6%96%B0%E6%9B%B8&qid=1578155083&sprefix=spring+%E8%A7%A3%E4%BD%93%2Caps%2C268&sr=8-1

この書籍は、優れもので"とりあえず動くコードが書ける"のがポイント。
アプリケーション構築の際に、Springの実装に必要な前提知識がなくても読むことができる。
書籍に記載されているプログラムを写経していけば、
自然とSpringの大まかな仕様が把握できるように書かれている。

下記に紹介する書籍では、単純な写経では動かないものも多くSpringを学習する
前提知識が得られないものも多いが、この書籍は、本当に写経すれば動く。

一部、Springのバージョンが古いのもがあり、動かないものもあったが
Javaの基本仕様を把握してスタックトレースを読めればネット検索で対応可能。
当然、Springフレームワークのスタックトレースをこの段階で読める必要もない。

書籍の説明として、Springフレームワークとは何なのか、DIのメリット、SpringMVCの基本的な動き、
AOPの動きや実践的な使い方、DB連携、RestAPIの実装方法、Spring Securityを使用した脆弱性対策の基本などが記載されている。

写経しながら進めていけばSpringアプリケーションの全体像がイメージできるような構成になっている。
このような書籍は、探した中では他になく、初心者がまず最初に読むべき本だと断定できるほどである。

まずは絶対にこの本から読むことをオススメする。


## Javaビルドツール入門 Maven/Gradle/SBT/Bazel
https://www.amazon.co.jp/Java%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%BC%E3%83%AB%E5%85%A5%E9%96%80-Maven-Gradle-SBT-Bazel%E5%AF%BE%E5%BF%9C/dp/4798049387/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=java+%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%BC%E3%83%AB%E5%85%A5%E9%96%80&qid=1578156639&sr=8-1

この書籍は、Javaビルドツールの使い方を説明している。
最初に紹介した書籍でもMavenをEclipse内で起動させて、ライブラリを取得してくる内容があるが
実際に、どのような動きが行われているのかをコマンドラインで確認できる。

また、Springの書籍はMavenだけでなく、Gradleも使用しているものあるため
こちらの書籍で基本的な動きを把握している必要がある。

実際に、コマンドを動作させて読み進めていくことをすすめる。


## はじめてのSpring Boot
https://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AESpring-Boot%E2%80%95%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%BB%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A7%E7%B0%A1%E5%8D%98Java%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-I%E3%83%BB-BOOKS-%E4%BF%8A%E6%98%8E/dp/4777519694/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AESpring+Boot&qid=1578156848&sr=8-1

こちらの書籍も基本的なSpringの動きの理解に使用する。
最初に紹介した書籍と実装する内容は似ているが、
異なるプログラムの書き方をしているものもあったり、
最初の書籍にないものもある。

復習も兼ねて、Springを使い慣れるために読んでおく必要がある。


## Spring Data JPA プログラミング入門
https://www.amazon.co.jp/Spring-Data-JPA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%BA%9D%E5%8F%A3%E8%B3%A2%E5%8F%B8/dp/4798051950/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=spring+data+jpa&qid=1578157041&sr=8-1

ここからは少しレベルが上がる。
次に紹介する書籍と併読することをオススメするが、
この書籍を基準に読み進めた方がいい。

書籍全体を通して、データベース連携について記載されている。
データベースと連携する際の、コネクションプールの取得や
DBテーブルとJavaのオブジェクトマッピングに際するその挙動。
JavaがどのようにしてDBと連携をしているかなどが記載されている。

Springを扱う上で、EntityManagerやTransactionManagerの動きを知っておくことは
非常に重要だと思うので、この書籍を早い段階で読んだ方がいいと感じた。

一度、さらっと全体を読んで演習プログラムを写経しつつ、必要に応じて
重要な箇所を読み直すことをオススメする。

実際には、自分でアプリケーションを作るときにSQLやEntityクラスの書き方に困った場合などに
詳細仕様を把握するために、必要に応じて読むにいいと思われる。

ただし、隔離性水準や伝播レベルの説明が豊富であるため、先にこちらの仕様を把握しておく必要がある。

Spring DATA JPAのアーキテクチャについても説明しているため、
応用力をつけるには必読書だと感じた。

フレームワークを学ぶ中で、どの言語、どのフレームワークが使えるかということは
あまり重要でないと感じた一冊。
アーキテクチャを意識して、なぜフレームワークが好まれるのかを
少しずつ理解しながら応用力をつけていくキッカケになると思う。

アーキテクチャの動きは、この本だけでは理解できないかもしれないので
次に紹介する書籍の関連箇所を併読することをオススメする。


## Spring 徹底入門
https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Spring-Framework%E3%81%AB%E3%82%88%E3%82%8BJava%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BENTT%E3%83%87%E3%83%BC%E3%82%BF-ebook/dp/B01IEWNLBU/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=spring+data+jpa&qid=1578157041&sr=8-2

この書籍の内容は、初心者としては非常に難しいものとなっている。
プログラムの書き方に特化した本ではなく、アーキテクチャを元に
抽象的な概念から実態をもつクラスの実装までの流れを説明したものが多いためである。

現段階で、私も読み込めていない箇所が非常に多いが、
ただフレームワークを扱えるという立場でなく、
これからフレームワークを実装する立場に立った時の
モデルケースとして非常に役に立つと思われる。

この書籍は、Spring Boot単体の機能と分離してSpringの各機能を説明している箇所が
大半を占めるため、サーブレットの内容などもネット検索かけながら読み進めていくことをオススメする。

この書籍で、特にアーキテクチャの内容がいきなりでは理解できないかもしれないので、
次に紹介する書籍と併読することをオススメする。


## Spring MVC/Roo プログラミング入門
https://www.amazon.co.jp/Spring-MVC-Roo-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83-ebook/dp/B00OYN686O/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=spring+mvc%2Froo&qid=1578158363&sr=8-1

こちらの書籍は少し古いものとなっている。
そのため、上に紹介した書籍を元に、必要な箇所を読むことをオススメする。

上の書籍で、アプリケーションサーバのパラメータ設定など、
言葉足らずなものが多いと感じたため、補足としてこの書籍を読むことをオススメする。

現時点では、レガシーな書き方となってしまったものも多いと思われるが、
MVCの基本的な動きやアーキテクチャの理解をする上では重要な内容だと思われる。

私も読めていない箇所が多いが、Springの理解を深めるための補足書として
必要に応じて読む必要があると思う。





## 最後に
以上になりますが、Spring Bootの学習をはじめて1ヶ月半ほどで
Springの全体的な動きを上記の書籍で把握することができました。

今後は特に、レガシーな書き方に執着することなくアーキテクチャの理解を深めたいと考えているため、
Spring徹底入門の熟読に励もうかと思います。

フレームワーク未経験者の方も、是非、上記の紹介順で読み進めていただけたらと思います。


以上