同僚から「Spring Bootのこと教えてー」って声かけてもらったので、社内勉強会でこぢんまりと喋ってきた。
Spring Bootのコンセプト
Springがコードレベルの、Spring Bootがアプリレベルの、Spring Cloudがサービスレベルの、みんながやることやっとくよ。な感じ。
ってつぶやいたらまきさんから
@bufferings そういう話を非技術系の人によくしています。この図使ってますhttps://t.co/4RyLJzo1JS
— Toshiaki Maki (@making) 2017年3月1日
って教えてもらったのでスライドを紹介しときました!あざます!
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-dependencies
(2) auto configuration
こいつが魔法の元。
この辺
の中の例えばThymeleafだったらこんな感じになってて
... @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チカラの話。なのでこの本をおすすめしておいた。
そんな感じ。
12-Factor App
実行可能jarの話が出てきたので12-Factor Appに触れておいた。 12-Factor Appは、クラウドプラットフォームを念頭において、どんな風にアプリケーションを作ると良いかという方針を、Herokuの中の人が書いたもの。
僕の中では、外から設定を与える、というのが大きかったんよなぁ。→ 開発環境用の設定を持ったjarとか、本番環境用の設定を持ったjarとか、そういうふうに環境ごとにjarを作るんじゃなくて、jarはひとつだけで、環境によって異なる設定は外から与えてあげようよ、というのん。
Cloud Native App
Pivotalは、その12-Factor Appをさらに押し進めて、DevOpsやCI、Microservicesなども含めて全体としてどのようにアプリケーションを作ると良いかという方針のCloud Native Applicationというものを推奨している。
補足しておいたのは「PivotalがSpringを引っ張っているのではなく、SpringがPivotalを引っ張っているのだ」ってSpring Oneで言ってたよってこと。
(4) Spring Bootでおさえておくべきこと4つ目
にして最も大事なことは・・・
@bufferings 4つめ👉making
— うらがみ⛄️ (@backpaper0) 2017年2月28日
Pivotalのまきさん!
まきさんの発信してくれる情報をキャッチすべし。って伝えておいた。
今日話した中で間違いなくここが一番重要。
JSUG
それと、JSUGに参加すべし。ということでついこないだあったやつのスライド、まきさんのとたださんのを伝えておいた。すごくいい資料。
あとは
- テンプレートエンジンはThymeleafかなぁとか
- ORMはJPAなのかな。僕はDomaが好きだけどとか
- Actuatorとか
- @SpringBootTestとSeleniumとか
- DDDとPort & Adapterアーキテクチャいいよ。UTしやすくなるし、ビジネスロジックに集中できるしとか
そういう話をして
最後にひとつお願いがある!
もし色々と挑戦したら、その試行錯誤を僕にも共有してほしい!めっちゃ面白そうだし!
って伝えて締めくくった。良い日だった。