yukungのブログ

yukungの技術ブログ兼駄文置き場 

はじめての Spring Boot 読み終わった #hajiboot

一足先に仕事が納まっていたので、今日通しで読み終えた。

感想

それほど分量が多い本ではないし、ステップ・バイ・ステップで記述されているので最低限の Java の知識さえあればサラッと読める。サンプルソースコードや正誤表も GitHub で管理されているので、常に最新状況が反映されていて安心感がある。またサンプルも動かなかったりしたらソース落としてきて手元でビルドして確認できる点は、初心者が写経して typo で動かなくてやる気なくす、みたいなことを減らすことができそうだし素晴らしいなぁと思いました。よく、技術書でサンプルコードを zip で落とすパターンもあるけど、もう一律 GitHub でいいんじゃないかなぁ。

内容

Hello World から始まって、Spring Boot というよりは Spring Framework の基本、おそらく最も使う機会が多いと思われる要素(DI、Spring JDBC、Spring JPA)を一巡り、その後 Spring Boot で REST API と Thymeleaf を使った画面のある WebApp を実装し、Flyway や Spring Security にもさっと触れます。そして作ったアプリを heroku にデプロイ、最後に RestTemplate を使ったテスト方法と、Spring Boot でアプリ開発をするにあたって一通りの要素が網羅されていて、Spring Boot の取っ掛かりにはとてもコストパフォーマンスの良い*1書籍だと思います。

感心したところ

また、読んでいて端々に感じたのは、著者の @making さんが読者を置いてけぼりにしないようによく配慮されているなぁという点。例を挙げると、

  • 第2章の DI の説明
    • まず @Autowired を使わずに、Bean 定義と ApplicationContext だけのパターン
    • 次に @Autowired を使ってインジェクションするパターン
    • 最後に @ComponentScan で Bean 定義を省力化するパターン
    • と、順を追って説明している点
  • ソースコードの解説
  • 章と章と繋ぎ目には、前の章の前提事項にちゃんと触れている
  • 細かいけど、ArgumentResolver とか ScannerArgumentResolver とか Frontend とか、クラス名の付け方がちゃんとしている(ちゃんとと言うと語弊があるけど)
    • ギョーミーなシステムだと、まず名前が体を表していないクラスとか腐るほどあるし、入門書とかもクラス名は割と適当だったりするので、こういうちゃんとした名前の付け方って実は初心者には大事だと思う

といったあたり。こういう面を見ても、初心者にはオススメしたい本だなぁと思います。もう、Java で新人研修する会社は、今日び ServletStruts とかありえないので、Java の言語研修が終わったらサーバサイドに関しては一旦これ渡して一通りやらせるのでいいのではないか、と思ったくらい。動くもの作れて楽しいし。JavaEE とかはその後でいいのでは。

読んだ後

これ読んだ後は簡単な CRUD アプリは作れるけれども、本格的に何か作ろうと思ったら、やっぱり公式のドキュメントを読むのが一番確実。そんな難しい英語じゃないし、サンプルコードも豊富なので、そこまで苦労せず読めると思う。細かい config の設定値なども公式ドキュメントに記載されているので、どちらにしろ実際の開発時はドキュメント読みながらになるのではないだろうか。

注意したいところ

読んでて少しばかり残念だった点は、誤植が多かったところ。ただこれも GitHub でサポートされているので、それがあれば問題ない。初版は結構誤植もあったりするので、初心者の人は GitHub の正誤表と突き合わせながら読むと、余計なハマりをしなくても済むと思います。

まとめ

  • Spring Boot これから始める人にはうってつけ
  • 新人研修にもオススメしたい
  • 読み終わったら公式ドキュメント読むべし

個人的な話

先日のエントリで jOOQ を紹介した渋谷javaのスライドでも触れたけど、最近仕事で小さいシステムを Spring Boot で組んでリリースした。

それまで主に面倒見ていたシステムが Guice + Netty という組合せだったのもあって、個人的には Guice に慣れていたので当初 Dropwizard で行こうかと考えていた。Spring にはそれまで仕事では触れてこなかったこともあったし、実際サンプル見ながら簡単なアプリ書いてみても、それまでの Java の Web アプリ、いわゆる Servlet ベースのアプリとは比べ物にならないくらい簡単に組めたし、以下の点*2で気が効いててとても好印象だった。

  • jar で手軽に起動できるところ
  • health check 用のエンドポイントを簡単に実装できる
  • テストに対するサポートが付いてくる(ResourceTestRuleREST API エンドポイントに対するテストのサポート)

と、ほぼ心が決まりかけていたのだけど、ふと Twitter を眺めていたら Spring Boot を知って*3、それでちょっと触ってみたらそれ以上に簡単で驚いた。

その後は、@making さんの SlideShare に上がってる Spring Boot の資料の充実っぷりに驚きつつも大変お世話になり、それと公式のドキュメントを読んで大分理解を深めることが出来た。そのおかげもあって無事そのシステムもリリースして運用に乗っている。その時ははじめての Spring Boot はまだ出版されていなかったので、正直今となっては既知の情報が多かったけど、それでも通しで読み終わってみて、自分で調べたことと照らし合わせながら読むことで知識の定着ができたかなぁと。

最近は、 Java でサーバサイドアプリケーション作るときは、例えばディプロイや起動が速くないとダメとか、トラフィックすごく多くて水平スケールするのに制約があって台数稼げないとか、よほど性能にシビアな要件とかがない限りは、しばらくこれ一択でいいんじゃないかなーと思っている。個人的に楽しみな Grails3 も Spring Boot ベースということなので、Grails3 も触ってみたいなー。

*1:時間的な意味で

*2:もちろんこれらは Spring Boot でもサポートされている

*3:たしか @making さんが Spring Boot 1.2 で JAX-RS 対応予定だよ、って Tweet を見たのがきっかけだった気がする