先日、拙著「はじめてのSpring Boot」が出版されました。
はじめてのSpring Bootって本を書きたい
— Toshiaki Maki (@making) May 10, 2014
思いついてから約半年で出版までたどり着けました。工学社さんありがとうございました。
本記事では、各章をどういう思いで書いたかと紹介したいと思います。
第1章 「Spring Boot」とは?
この章ではまずはSpring Bootが生まれた背景を説明しました。物語の初めに全体像を持ってくるのは定番ですね。 そしてとにかくすぐに「Hello World!」まで試せることを意識しました。以下に速く「Hello World!」を作れるかでフレームワークの学習コストが判断できますよね。
この段階で実行可能jarまで作っています。これ以降実行可能jarの話はあまり出てきませんが、1章で説明したポータビリティの高さが4章のHerokuデプロイに効いてきます。
プロジェクトの作り方は「Spring Initializer」から作る方が楽なのですが、Spring独自色を薄くしたかったので、素のmaven archetypeから作るようにしました。
本当は「Spring CLI」の話もしたかったけれども、頭でっかちになりそうだったのでやめました。
第2章 速習「Spring Framework」
この章では、Spring Bootでアプリを開発をする上で最低限必要なDI、DBアクセスについて説明しました。
DIについてはさくっと学べるように
- DIコンテナからルックアップ
- オートワイヤリングによるDI
- コンポーネントスキャンによる自動Bean登録
の3ステップでアプリを改善する形で進めました。
ステップバイステップで学んでいくことが混乱なく理解する近道だと思っています。
スコープの話をカットしてしまったのが少し悔やまれます。
この章でLombokを導入しました。ステップバイステップと良いながら、関係のないものを混ぜて矛盾しているように見えますが、 これはこだわりです。この後の説明がLombok使った方が簡潔に書けて、ネガティブな印象が薄まるが分かっていたので、いきなり導入するのが大事だと思いました。
後半はDBアクセスについてです。Spring JDBCとSpring Data JPAについて紹介しました。 私はJPA派なのですが、世の中そうではないことは認識しているので、素のSQLを書くタイプとJPAで書くタイプの両パターン用意しました。 話の流れは当然、素のSQL→JPAです。素のSQLタイプにはDomaを紹介することを考えたのですが、まずはSpring標準のものをということでSpring JDBCを使いました。 実際、Spring JDBC(というかJdbcTemplate)はラムダとLombokを組み合わせたらかなり強力です。学習コストもかなり低く、結構オススメです。
以降はSpring Data JPAの紹介になります。個人的にはSpring Data JPAが好きです。
JPAを使う上で必須なのがSQLログです。ちゃんとSQLログを出せるようにLog4JDBCを導入しました。多分、本で紹介されるのは世界初なんじゃないでしょうか (訂正: 現場で使えるJavaライブラリで紹介されていました)。
最新のLog4JDBC-LogJ2を使った場合の設定はこちらを参照ください。
Domaはノートで書こうと思ったのですが、中途半端になってしまったので辞めました。どこかで紹介したいと思います。
第3章 「Spring Boot」による「Webアプリ開発」
3章でいよいよアプリ開発になります。昨今のAPI Firstな流れにのって、REST API開発→画面遷移アプリ開発の順にしました。 この流れの方が、Spring Securityにつなぎやすかったので、ちょっとずつ理解していくという点で良かったと思います。
3章はノートでこだわりポイントをいくつか書いているので飛ばさず読んでいただきたいです。
ThymeLeafの部分ではLayout Dialectについて扱っていたり、Spring Security連携を扱っていたりと、少ないページ数の割には実践的な内容になっています。CSRFトークンが自動で埋め込まれていることを説明するのを忘れてしまいました・・
DBマイグレーションについては賛否両論あるみたいなのです。 私自身は、実はGitBucketのアプリケーションアップデート方法が好き(jarを上書きして再起動するだけ)で、の実装をみるとDBマイグレーションライブラリが使われたので、Flywayを使い始めたのでした。 Spring Bootアプリケーションのポータビリティを考えるとあると良いなと思い、紹介しました。 そのかわり起動が遅くなるんですよね・・
Spring Securityでは認証・認可の基本パターンを紹介しました。よくSpring Bootのサンプルではインメモリのサンプルユーザーを使う例が紹介されているのですが、あれは実際には使いものにならないので、ちゃんとUserDatails
とUserDatailsService
を実装して、DBから取ってくるようにしました。これで応用が効くはずです。Spring Securityの説明の一緒に、JPAの関連の話、DBマイグレーションによるアップデート方法を混ぜているのでステップバイステップの精神に少し反していますが・・
本当はちゃんと説明したかったのは入力チェックと例外ハンドリングについて。まじめに書くとかなりの分量になってしまうので割愛しました。 詳しくはこのガイドラインの
- 入力チェック
- 例外ハンドリング
- RESTful Web Service
を読んでいただきたいです。
第4章 PaaS「Heroku」にデプロイ
折角作ったアプリを公開できるようにしたいと思ったのと、Spring Bootのポータビリティを体感してほしいと思ったのでHerokuデプロイの章を用意しました(Spring的にはCloud Foundryなんでしょうが・・)。 この章ではProfileの切り替え方法に付いても言及しています。これはJGGUGでSpring Bootハンズオンをやった際に、@uehajさんから質問を受けたのが契機でした。容易なProfileの切り替えはSpringのメリットの1つですが、単品で説明するとメリットがわかりにくいところ、実例に沿って説明できたので良かったと思います。
なお、執筆後に見直しているタイミングでHerokuのダッシュボードが新しくなっていたのは見なかったことにしました。
第5章 「Spring Boot」におけるテスト
これは、最初の目次を考えているときに@grimroseさんからE2Eテストに付いて言及してほしいというコメントがあったため追加したものです。 最初はテスト面倒くさいなーと思っていたのですが、やってみると組み込みAPサーバーを使った簡単なE2Eテストの強力さに感動しました。 いまはSpring Bootのメリットの1つとして紹介しています。
ノートでRest-assuredを使った簡単なHTTPアクセスについて追加しています。これはギリギリにぶちこんだ内容ですが、かなり便利で一押しなので、いれてよかったと思います。
と、まあ
- ステップバイステップで理解を進めていけること
- 学んだことの応用が効くこと
を意識して、執筆しました(といっても色々足りない部分があり、沢山指摘されています・・・汗)。250ページくらいいくかなー?と思っていたのですが、終わってみれば170ページ程度でした。 これはSpring Bootが設定少なくアプリを作れるプラットフォームだからかな、と思います。
薄い割には実践的でかつ、これをベースに次の開発で使えるような内容になっているので、是非読んでみて次の開発の候補に考えていただければと思います。
疑問があれば、#hajibootハッシュタグでつぶやくか、Githubのissueに登録していただければ何かしら答えたいと思いますので、気軽にきいてください。ゆるふわでかえしますw
是非、ご購入を!