SpringBootCampの予習がてらSpring Bootを味見してみた
Spring Boot Camp@岡山に参加キメた割にはSpring Bootそもそもよくしらないので、予習を兼ねて少し触ってみました。フレームワーク味見の第2弾です。今回も闇を見ずに終わりたいと思います。
なお、そもそもSpring Bootを新しいアプリケーションフレームワークだと誤解していた模様です。どちらかというとSpring frameworkを使ったプロジェクトの構成とデプロイを楽にする方面の話なんですね。
予習の予習
gvmでSpringBootCLIをインストールできるようなのでやってみます。インストール後、spring
というコマンド名でSpringBootCLIを使えます。
プロジェクトの作成
ビルドシステムにgradleを指定してプロジェクトを作ってみましょう。
> spring init --build=gradle my-app
何に使って良いんだかわからない空っぽのプロジェクトが作成されました。
依存関係を指定しないとアプリケーションの構成がされないわけですね。デフォルトでWebアプリケーションなのかと思った。。。それからベースパッケージ名やアプリケーション名が指定されておらず、問答無用でdemoパッケージが作られたり、jarファイル名がdemoになっていたりします。とりあえず、依存関係やパラメータをlistオプションで確認できるようです。
> spring init --list
で、これでずらーっと一覧が出てくる訳ですが、パラメータの指定ができない。helpにもオプションが載ってないし、試しに指定してみてもエラーになるしで、このコマンドを使うワークフローが把握できずに微妙に使いづらいです。
@mao_instantlife 使いません〜
プロジェクト雛形生成は便利なのですが、ハンズオンではある程度出来た状態から進めます
— Toshiaki Maki (@making) 2015, 5月 29
で、このような流れとなり、今回時間を使うところではないな、と判断しました。
「はじめてのSpring Boot」で予習
根本さんに借りました。とりあえず写経して、後でgradleで少し試してみます。その前にmavenがそもそもいなかったので、おもむろにbrew install maven
しました。
はじめてのSpring Boot―「Spring Framework」で簡単Javaアプリ開発 (I・O BOOKS)
- 作者: 槇俊明
- 出版社/メーカー: 工学社
- 発売日: 2014/11
- メディア: 単行本
- この商品を含むブログ (5件) を見る
一通り写経した上で感じたあれこれを(内容は書籍読んだ方が正確なので割愛)。
プロジェクト立ち上げて動かすまでが速い
それがなかったら何が美味しいの?という突っ込みが入りそうですが、実感してみると美味しさはわかります。特に私が旨味を感じたのは以下の点です。
- EnableAutoConfigurationアノテーション
- アプリケーションサーバの準備不要
- 目的別の依存関係がわかりやすい
最近のフレームワークの美味しい所をSpringに取り込んだ感じがして、Springってこんなにスピード感あるフレームワークだっけ?と思ってしまいます。とりあえずデフォルトが通用したり、まずは動かして確認できる、だったり。
また、ライブラリの依存関係が目的別に管理されている(Spring Bootの枠内では)というのは大きいです。複数のライブラリがある目的の為に関連するというのは当たり前の話であって、依存関係の依存関係みたいなものもあります。最初に書いたときは目的わかってますからまとまりがわかるんですけど、時間が経ってくると。。。それに、目的別の依存関係ごとに動作確認済みライブラリがセットで提供される(ですよね?)というのは、運用面とか考えると楽かな、と。
そこかしこにエンジニアを楽にしようという気概が感じられて非常に良いです。
その他
それ以外の所でちょいちょい気になった所があるので、合わせてメモしておきます。
DataSourceの作成に失敗する
「はじめてのSpring Boot」は1.1.8をベースに書かれてあったのですが、写経時には1.2.4が安定版最新になっていたのでそちらで進めていました。で、AppConfigクラスに同じDataSourceを返すBeanメソッドが複数あるとアプリケーションの起動に失敗します。
これは、Spring Bootのバージョンによるものらしく、1.2.2までは問題ないとのこと。著者の槙さんのGithubリポジトリにワークアラウンドがありました。
専用IDEがある
試してないのですべて伝聞形式。Spring Tool Suiteというeclipseベースの専用IDEがあるようです。プラグインとしても提供されているみたいですね。カタログスペックだけ見てるとアプリケーションの構成を可視化してくれたり、configファイルなども含めたリファクタリングツールを提供したり、クラスの依存関係をクラス図で可視化したりしてくれるらしいです。ううむ、なかなかの高機能。
ただ、今回は味見する程度だったので、慣れたIDEを使ってました。より深く触ることがあれば、考えてみたいと思います。
Spring Loaded
サーバを実行状態にしたまま、Hot Reloadingできるようになるプラグインです。何かSeasar2思い出しますね。IDEAではコンパイル時のクラスの出力先が若干違うようで、うまく変更を拾ってくれませんでした。深入りしていないので、何とも言えませんが以下が参考になるかも知れません。
テンプレートエンジン「Thymeleaf」
素のHTMLに属性をつけることで動的にHTMLを生成するタイプのテンプレートエンジンですね。これもSpringBootで選択することができます。
ちなみに、閉じタグのないものでもスラッシュちゃんとつけないとパースエラーになります。IntelliJで自動生成したHTMLファイルとかmetaタグに閉じ記号なかったりするので注意しましょう。
それと、私の環境ではテキストの通り実装しているとAppConfigの文字コードフィルタリングする前が日本語は文字化けしませんでした。テキストの通りAppConfigの文字コードフィルタリングを実装すると逆に文字化けします。どこに問題があるのか、までは追えませんでした。すみません。
後はBootstrapがwebjarsから取得できなかったり、色々ありましたがBootCampまでに時間が取れそうにないので、勉強会のときにちょっと質問してみたいと思います。
gradle使う場合のプロジェクト立ち上げ
pom.xmlの記述って冗長ですよね?XMLってちょっと面倒というかなんというか。というわけでビルドツールをgradleにしてしまいたいと思います。おもむろにgradle init --type basic
叩きます。
以下を参考にbuild.gradleを変更します。
リポジトリにmavenLocal()
やmavenCentral()
の指定が明示的に必要だというところに軽くハマりつつ、プロジェクトの生成は上手く行きました。また、公式だとQuickStartにgradleプラグインのインストールが書かれてないので、上記の方が参考になりそうです。mavenのプラグインと同様、開発に伴う各種タスクが追加されるのでプラグインは入れておいた方が良いと思います。
最初のサンプルを実装して実行してみます。実行はgradle bootRun
です。
で、少し調べてみた所、mavenで作ってgradle initで乗り換えも可能、ということもわかったり。
groovyでgradle?grails 3.0を使えば良いんじゃないですかね。。。
みんなでSpringBootCampいこうぜ
というわけで、長々とお試ししてみました。実際に手を動かしてみないとわかんないですか?そんなあなたにうってつけのイベントがあります。是非、参加しませう。