spring
spring-io-platform

Spring IO platform のススメ

More than 1 year has passed since last update.


Spring IO platform のススメ

個人的にすごく重宝しているけど、使っているプロジェクトをあまり見たことが無いので書いておこうかと思います。


Spring IO platform のイイトコロ


ライブラリ毎のバージョンに迷わない

ってかメジャーどころのライブラリならバージョン指定しなくて大丈夫です。


ライブラリのバージョンアップが楽

Spring IO platform自体のバージョンを上げてしまうというのが一番手っ取り早いです。

こまめに上げておけば、Springやちゃんとしたライブラリなら互換性が無くなる前にdeprecatedで知らせてくれます。

警告が出た箇所で該当のJavadocを参照して、その通りに修正すれば良いのです。

ですが、バージョンアップ対象のライブラリのリリースノートやコミットログくらいは簡単に追っておきたいところです。

個別にバージョン上げたい場合は後述します。


組み合わせがテストされているという安心感

とは言っても、自分のプロジェクトでテストしているわけではないので、常日頃テストコードは書いておきましょう。

バージョンを上げても殆どバグは出ないですが、あっても必ず単体テストで見つかりました。


実際にやってみる

まずはこれまた重宝しているSPRING INITIALIZRのサイトにアクセスします。

スクリーンショット 2017-09-30 13.19.19.png

で、適当に埋めていきます。

自分はだいたいいつもこんな感じです。

スクリーンショット 2017-09-30 13.23.09.png

そしてGenerate Project

ダウンロードされたZIPファイルを展開します。

$ unzip demo-spring-io-platform.zip

$ cd demo-spring-io-platform

展開したらpom.xmlを修正します。

ここです!ここ大事です!

Spring IO platformのトップページには


pom.xml

<dependencyManagement>

<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

と書かれているのですが、リファレンス見るとオススメはこっちだと書かれているのです。


pom.xml

<parent>

<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR5</version>
<relativePath/>
</parent>

えっ?そんなことしたらspring-boot-starter-parentを親に指定できないじゃんって思った方。安心してください。

spring-boot-starter-parentはおじいちゃんになってもらいます。

platform-bomの親pomはspring-boot-starter-parentになっているのです。

なので、心配は要りません。

dependencyManagementとして設定するのと何が違うって、platform-bomが提供する各ライブラリの変更が簡単にできる点です。

例えばguavaを追加してみます。


pom.xml

<dependency>

<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>

バージョンは指定しません。platform-bomが提供してくれています。

この時点で20.0が適用されます。

「あぁ、guavaだけ最新版に上げたい〜」となった時にguavaなのである程度テストは必要になりますが、こんな形でできます。


pom.xml

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>

+ <guava.version>23.0</guava.version>
</properties>


dependencyの方にバージョン変数を設定しなくてOKです。platform-bomでやってくれています。

dependencyManagementplatoform-bomを設定していると、プロパティのバージョンが反映されません。

じゃあ、次は絶対にバージョンを上げるassertjです。

assertjspring-boot-parentで2.x系のバージョンが指定されています。

Java8対応は3.x系なので、思い切ってバージョンを最新にします。依存度も少ないからこれは安心して上げられます。


pom.xml

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>

<guava.version>23.0</guava.version>
+ <assertj.version>3.8.0</assertj.version>
</properties>


これだけです。既にimportされているライブラリなのでプロパティでバージョン指定だけすればOKです。


まとめ

長く運用していると細かな調整は入ると思いますが、それでもバージョン関係で悩むことは他のチームに比べて殆ど無かったと思います。

良ければ皆さんも是非!