Spring Bootでおさえておくべき4つのこと

同僚から「Spring Bootのこと教えてー」って声かけてもらったので、社内勉強会でこぢんまりと喋ってきた。

Spring Bootのコンセプト

Springがコードレベルの、Spring Bootがアプリレベルの、Spring Cloudがサービスレベルの、みんながやることやっとくよ。な感じ。

ってつぶやいたらまきさんから

って教えてもらったのでスライドを紹介しときました!あざます!

Spring Bootでおさえておくべき3つのこと

最初はどこまでがSpringでどこからがSpring Bootなのか分かってなくて「めっちゃ色々あって魔法みたいでよく分かんない・・・(ヽ´ω`)」ってなってたけど。最近、Spring Bootってこうかなと思うのが、(1)親pom、(2)auto configuration、(3)maven plugin、の3つ。

(1) 親pom

Mavenで最初にアプリの依存関係設定したことある人だったら分かると思うけど面倒くさい。のを、親pomとして定義してくれてるので使いたいstarterを選ぶだけ。そして、平和が訪れたヽ(=´▽`=)ノ

この辺

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters/spring-boot-starter-parent

依存関係自体はこの辺

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-dependencies

(2) auto configuration

こいつが魔法の元。

この辺

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure

の中の例えばThymeleafだったらこんな感じになってて

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java#L69

...
@ConditionalOnClass(TemplateMode.class)
...
public class ThymeleafAutoConfiguration {
...

ThymeleafのTemplateModeっていうクラスがクラスパスにあれば、この設定が有効になる。そういうわけで、Thymeleafのjarを依存関係に入れておくだけで、Thymeleafの設定が有効になるのである。魔法である。

「そのjarを含めてるってことは使いたいってことだよね?ってことはみんながするような基本的な設定はしとくね。」という感じ。

(3) Spring Boot Maven Plugin

Spring Bootのアプリは通常、全部の依存ライブラリを含んだいわゆる"fat jar"という実行可能jarに固める。で、そのjarを実行すると、組み込みTomcatとかが起動してアプリが動き始める。そういうスタイル。

その実行可能jarを作ってくれたりする便利なやつがSpring Boot Maven Plugin。

この辺

http://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html

開発中はSTSとかから起動して動作確認しても良いし、mavenを使ってこんな風に起動することもできる

./mvnw spring-boot:run

jarに固めたいときは、こうやったらいい

./mvnw clean package

で、そのjarから実行したいときは、こんな感じ

java -jar app.jar

Springチカラ

ということで、Spring Bootに関しては大きく分けてその3つをまずは押さえておきたいかなって話をした。で、それ以外はSpringチカラの話。なのでこの本をおすすめしておいた。

books.rakuten.co.jp

そんな感じ。

12-Factor App

実行可能jarの話が出てきたので12-Factor Appに触れておいた。 12-Factor Appは、クラウドプラットフォームを念頭において、どんな風にアプリケーションを作ると良いかという方針を、Herokuの中の人が書いたもの。

僕の中では、外から設定を与える、というのが大きかったんよなぁ。→ 開発環境用の設定を持ったjarとか、本番環境用の設定を持ったjarとか、そういうふうに環境ごとにjarを作るんじゃなくて、jarはひとつだけで、環境によって異なる設定は外から与えてあげようよ、というのん。

The Twelve-Factor App (日本語訳)

Cloud Native App

Pivotalは、その12-Factor Appをさらに押し進めて、DevOpsやCI、Microservicesなども含めて全体としてどのようにアプリケーションを作ると良いかという方針のCloud Native Applicationというものを推奨している。

pivotal.io

補足しておいたのは「PivotalがSpringを引っ張っているのではなく、SpringがPivotalを引っ張っているのだ」ってSpring Oneで言ってたよってこと。

僕とSpring Cloud

僕はこんな風に考えてるんだよー。というのも伝えておいた。

bufferings.hatenablog.com

(4) Spring Bootでおさえておくべきこと4つ目

にして最も大事なことは・・・

Pivotalのまきさん!

まきさんの発信してくれる情報をキャッチすべし。って伝えておいた。

今日話した中で間違いなくここが一番重要。

JSUG

それと、JSUGに参加すべし。ということでついこないだあったやつのスライド、まきさんのとたださんのを伝えておいた。すごくいい資料。

実例で学ぶ、明日から使えるSpring Boot Tips #jsug

Spring for Spring Boot // Speaker Deck

社内の詳しい人

社内だと、藤井さんとTommyさんがめっちゃ詳しいよ!って伝えておいた。

楽天トラベルとSpring(Spring Day 2016)

あとは

そういう話をして

最後にひとつお願いがある!

もし色々と挑戦したら、その試行錯誤を僕にも共有してほしい!めっちゃ面白そうだし!

って伝えて締めくくった。良い日だった。