【書籍・サイト紹介】Javaから始める 独学Spring Boot

# はじめに

先日公開したポートフォリオ用の Web アプリケーションのバックエンドでは、フレームワークに Spring Boot、言語に Kotlin を利用しました。

基本的に独学で学習を進めてきたのですが、一番苦労したことと言えば、教材選びと学習順序です。
初学者向けではないと言われることが多いためか、学ぶための手引きとなるような記事が少なく、途方に暮れることもしばしばありました。

そのため、これから学習を始めようと思っている方や行き詰っている方にとって少しでも参考になればと思い、この記事を書くことにしました。

この記事では Java の基本的な構文しか知らない状態から、Spring Boot を用いて Web アプリケーションを作成できる状態になるまでに特に欠かせなかったと感じる書籍とサイトを紹介したいと思います。

※ ポートフォリオは、服用したお薬の記録をサポートする Web アプリケーションです。
　アプリケーションの概要や使用した技術を紹介する記事を投稿していますので、詳しくはそちらをご覧ください。

https://qiita.com/hiroe-mkk/items/fb49783b346944961b04

# Java

## 基礎

- [**Java 本格入門**](https://www.amazon.co.jp/dp/B071D8RYR5)
- [**すべての人のための Java プログラミング**](https://www.amazon.co.jp/dp/4320124235)

いずれの書籍も内容が充実しており、他の書籍では触れられていない部分や、初学者が一人で辿り着くには難しい部分まで丁寧に解説されているため、曖昧だった部分が解きほぐされていく感覚がありました。
その一方で、ある程度プログラミング言語に馴染みがないと難しいというレビューも目にしたため、そこは注意が必要かもしれません。

また、「すべての人のための Java プログラミング」に関しては、学校の教科書のような語り口で、好みが分かれそうだなという印象です。以下の書籍サポートページに 1 章と 2 章の PDF が提供されていたので、読んでみると雰囲気がつかめるかもしれません。
ただ、練習問題が多く用意されており、実際に手を動かしながら進められるので、知識を定着させるには最適の一冊だと思います。

[すべての人のための Java プログラミング 書籍サポートページ](https://www.i.h.kyoto-u.ac.jp/users/tsuiki/javaEveryone3/index.html)

## デザインパターン

- [**増補改訂版 Java 言語で学ぶデザインパターン入門**](https://www.amazon.co.jp/dp/B00I8ATHGW)
- [**Web アプリ開発エンジニアのための技術情報サイト TECHSCORE**](https://www.techscore.com/tech/DesignPattern/)

「Java 言語で学ぶデザインパターン入門」は、UML とサンプルコードがデザインパターンごとに用意され、平易な言葉で解説されています。
そのため、言語を学び終えたばかりでまとまったコードや UML に慣れていないという方にとっての次のステップとしても最適です。
ただ、この書籍だけではデザインパターン固有のコードかどうかの判断が難しいことがあったため、上述したサイトなども併せて学習することをお勧めします。

また、デザインパターンが必須かと問われれば、そうではないとは思うのですが、Spring Boot においても幅広く活用されているため、理解があればよりスムーズに学習を進められるのではないかなと思います。

少々難易度は上がるのですが、デザインパターンに対する解像度をグッとあげてくれた書籍があるので、こちらも紹介したいと思います。

- [**アジャイルソフトウェア開発の奥義**](https://www.amazon.co.jp/dp/4797347783)

この書籍では、ケーススタディを通じて、どのようにしてデザインパターンを導入するに至るのかを順を追って教えてくれます。
672 ページと大容量で、初心者に優しい内容ではないので根気が必要になりますが、この一冊でオブジェクト指向に対する理解もかなり深まりますし、ソースコードが豊富でコードを読む体力もつけられるのでおすすめです。

# Spring Boot

とりあえず Spring Boot の雰囲気を掴みたいという方は、以下のサイトの説明に沿って実際に手を動かしてみるとイメージがしやすいかと思います。

- [**e-ラーニング　SpringBoot入門**](https://www.sys-link.jp/technical/SpringBoot/SpringBoot0-0.html)

下記の書籍は Kindle Unlimited 読み放題で読めます(2024年1月現在)。
いずれの書籍も非常に読みやすく、初心者にもわかりやすく説明されているので、スムーズに入門できるのではないでしょうか。

- [**後悔しないための Spring Boot 入門書**](https://www.amazon.co.jp/dp/B08XPBPH9C)
- [**Spring Boot 2 入門**](https://www.amazon.co.jp/gp/product/B0893LQ5KY)
- [**Spring Boot 2 応用**](https://www.amazon.co.jp/gp/product/B08RL67N9S)

また、公式のガイドやチュートリアルにも一度は目を通しておくことをおすすめします。

- [**Spring Boot 公式のガイドやチュートリアル**](https://spring.pleiades.io/guides)

なお、私が Spring を学ぶにあたって欠かせない存在だったのが以下のサイトです。

- [**Macchinetta Server Framework Development Guideline**](https://macchinetta.github.io/server-guideline-thymeleaf/current/ja/index.html)

このドキュメントでは、保守性の高い Web アプリケーション開発をするためのベストプラクティスが詳細に解説されています。
Spring Boot ではないので適宜読み替える必要がありますが、例外ハンドリングやセッション管理など、他では充分に取り上げられていない領域まで丁寧に説明されているので、非常に勉強になります。
また、レイヤ化などのアーキテクチャに関する部分も説明されているため、設計に目を向けていく足がかりとしても適しているのではないかなと思います。

上記の書籍などでいきなり Spring Boot を学ぶのが難しいと感じた方は、少々遠回りにはなりますが、[「**スッキリわかるサーブレット＆JSP 入門**」](https://www.amazon.co.jp/dp/4295015962)という書籍を読んでいただくと、 Web アプリケーションに対するイメージが湧きやすいかもしれません。

Web アプリケーション開発が初めてで、全体像がいまいちピンとこないという方には[「**アプリケーションアーキテクチャ設計パターン**」](https://www.amazon.co.jp/dp/4774193038)という書籍もおすすめです。
この書籍では Java EE におけるエンタープライズシステム向けの設計パターンを解説しているのですが、Web アプリケーションにも十分に応用可能です。
特に何が分からないかも分からないという状態のとき、全体を俯瞰してみることができると随分と学習を進めやすくなる印象がありました。
さまざまな分野が網羅されている書籍なので、同じようにモヤモヤを抱えている方は一度読んでみてはいかがでしょうか。

また、Spring Boot とは直接関係はありませんが、Web アプリケーションを作成する際にはセキュリティも重要な要素となるため、以下の書籍も読んでおくとよいでしょう。

- [**体系的に学ぶ 安全な Web アプリケーションの作り方**](https://www.amazon.co.jp/dp/4797393165)


# Kotlin

Spring Boot で Web アプリケーションを作成するという目的は以上で達成可能なのですが、Kotlin での Spring Boot フレームワークの活用が非常に有用だったので、こちらも紹介させてください。

- [**Kotlin サーバーサイドプログラミング実践開発**](https://www.amazon.co.jp/dp/4297118599)

この書籍では、Java と Kotlin の関係性がわかりやすく説明されており、さらに Kotlin を用いた Spring Boot による Web アプリケーションの開発方法も丁寧に紹介されています。
Kotlin と Spring Boot のいずれにも触れたことがないという方にとっても理解しやすい構成になっているので、ステップを踏む必要がないという方はこの書籍から始めてもよいのではないでしょうか。

(本当はこの書籍に加えて Kotlin の文法について体系的にまとめられていたサイトを利用していたのですが、リンクが切れていて探し出せませんでした。見つけ次第、また追記しようと思います。)

# おまけ

個人的に、この分野において挫折を回避しつつ知識を深めていくためには、複数の書籍やサイトを行き来することが重要だと考えています。
これは、同じ概念であっても異なる表現や抽象度、文脈で語られるため、ある文献で理解できない部分でも別の文献を参照することでスムーズに理解できることがあるからです。

また、重要なポイントや気づきをメモに残す方が多いと思いますが、このとき、一つの概念に対する情報は一か所にまとめておくということも大切です。
このようにすれば、様々な視点での情報が一か所に整理されるため、初めは理解できないことでも、根気よく積み重ねることで点と点がつながり、次第に理解できるようになっていきます。

加えて、理解したタイミングで再度読み返すことで新たな知見を得られることも多いため、情報源を明記することも忘れないようにしましょう。

# 最後に

とりあえずバーッと書き進めたので、抜けがあったらまた追加したいと思いますが、ひとまずは以上となります。
これから学習を始める方々、行き詰っている方々の一助となれたら幸いです。

それでは、最後までお読みいただきありがとうございました。