Springを所有するPivotalがSpring Boot 1.3をリリースした。JavaクラスとSpringコンフィギュレーションのホットリロード(reload)のサポート(新しいspring-boot-devtoolsモジュールを使用),キャッシュの自動コンフィギュレーション(EhCache, Hazeicast, Infinispan, JCache, Redis, Guavaに対応),Linux/Unix用の完全に実行可能なアーカイブなどが追加項目だ。リリースには,すべての変更を詳説したリリースノートが付属している。
便利な新機能のひとつとして,banner.txtファイルにANSIカラーコードを含めることが可能になった。これによってアプリケーションの起動時に,コンソールログにアートを表示できるようになる。例えば,
また,JHipsterの最新リリースならば,
この機能を使った創造性を手にしたいのであれば,Craig Burke氏が開発したSpring Boot用のイメージ-アスキーアートコンバータもある。
InfoQはSpring BootチームのコントリビュータであるDave Syer博士,Phillip Webb氏, Stéphane Nicoll氏, Andy Wilkinson氏, Josh Long氏と,今回のリリースに関してQ&Aセッションを行った。
InfoQ: Spring Bootは人気プロジェクトだと思いますが,Javaコミュニティからの反応には満足していますか?
Spring Bootチーム: 最高ですよ! Spring Bootが人気になったのには,2つの理由があると思っています。ひとつはJava 8が,Javaの人気をミニ復活(mini-resurgence)させるのに一役買った,ということです。Java 7に比べて,Java 8でのコーディングはずっと楽しいですからね!ふたつめは,Spring Bootを構築するための素晴らしい基盤が,すでに存在していたことです。Springのエコシステムはとても規模が大きいので,多くの人たちにとっては,さまざまなプロジェクトをひとつひとつ調べている時間が取れないかも知れませんが,短時間で概要を捉えられるような仕組みを用意することで,見落としがちな機能にも注目してもらえるようになっています。この好例としてまず挙げられるのは,Spring Data + Hibernate + In Memory DBでしょう。明示的な設定の必要をなくすことで,Spring Dataリポジトリの本当の能力を簡単に示すことができています。動的言語にも匹敵する生産性と同時に,型の安全性や同時実効性,安定性,さらにJVMのパフォーマンスが手に入るのです。
InfoQ: Spring Boot 1.3で,特に注目してほしい機能は何ですか?
Spring Bootチーム: チーム内部では冗談で話しているのですが,開発ツールやキャッシュ,メトリックや自動コンフィギュレーションといった機能向上に8ヶ月以上も取り組んできたというのに,一番人気なのは ... 色付きバナーなんですね!他に例のない,おそらく最もユニークな機能のひとつは,完全に実行可能なJARでしょう。ln -s
を実行するだけでUnixサービスを作ることができるというのは,結構便利です。
InfoQ: 今回のリリースはかなり大規模に思えるのですが,2.0にしなかったのはなぜですか?
Spring Bootチーム: Spring Frameworkのバージョニングはいつもかなり保守的で,10年以上経ってもまだバージョン4なのです。私たちもこの伝統を継承して,ほとんどの人々にとって無難なアップグレードであることを,メッセージとして伝えたいと思いました。バージョン2.0はSpring 5.0のリリースに合わせて,Java 8を最小要件としてリリースする予定です。
InfoQ: Spring Bootアプリケーションに必要なメモリフットプリントを削減する計画はありますか?
Spring Bootチーム: Springアプリケーションのメモリ使用量に関する報告には,少し誤解されている部分があると思います。以前に,内部キャッシュが使用しているメモリがGCされていないことが原因で,誤った報告がされたことがあったのです。例えばSpring BootリポジトリにあるサンプルアプリケーションのFreemarkerは,Java 8で -Xmx32MB を指定しても十分に動作します(非ヒープメモリはかなり消費しますが)。最近になってSpring Frameworkのキャッシュロジックが一部改良されましたが,もう一度これを行う計画があります。読者のみなさんから,極端にメモリを使用するようなサンプルアプリケーションを提供して頂けると,この作業の支援になります。
InfoQ: Spring Bootマイクロサービスをクラウド(AWS, Cloud Foundry, Herokuなど)内で編成する上で,最もよい方法は何でしょう?
Spring Bootチーム: Spring Bootはほとんどのクラウド上で,問題なく動作します。Heroku, OpenShift, Google Cloud, Oracle Cloud, Azureなどはすべて,それぞれのプラットフォーム上でSpring Boot(と,多くの場合はSpring Cloud)アプリケーションを動作させる方法を,ブログや講演などで公開しています。私たちもSpring Bootリファレンスガイドで,メジャーなクラウドプラットフォームのためのプロセスを文書化しています。自分自身でオーケストレーションとプラットフォーム(お勧めしません!)を構築したいのであれば,DockerとSpring Bootを使用するための手引きが http://spring.io/guidesに紹介されています。
ですが正直に言うと,ほとんどの人にとって,Cloud Foundryに勝るものはないでしょう。
cf push -p foo.jar foo
とすれば,それで終わりなのですから。Netflix OSSをPivotal Cloud Foundryに統合する上でSpring Cloudチームが行った開発成果にも,目を見張るものがあります。
InfoQ: Java 9やJava EE 8の機能で,Spring Bootに有効な機能は何かありますか?
Spring Bootチーム: 最終的にどのようなものになるかによりますが,JDK 9のモジュールシステムをSpringのモジュールアプリケーションの基盤として採用するかも知れません。Spring Framework 5では,アプリケーションがJDK 9モジュールを基盤にできるために必要なことはすべて行う予定です。特にJVMのモジュールパスをベースとした一貫性のある起動方法に関しては,古き良きclasspathからの完全な決別のためにも重視しています。
Java EE 8に関しては,特にHTTP/2に関心を持っています。HTTP/2自体は現在のSpring Bootでも利用可能(すでにJettyとUndertowの両方でサポートされています)ですが,Servlet 4.0で公式にサポートされることは大いに歓迎したいと思います。その他の機能については,必要に応じてサポートしていく予定ですが,JMS 2.1の需要が多いのではないかと予想しています。興味深いことに,Spring BootはすでにJCache 1.0サポートを提供していますし,Spring FrameworkはHibernate 5.0をすでにサポートしています。Hibernate 5.0を完全にサポートするためには,まだいくつかの作業が必要ですが,1.4では完成させたいと思っています。
InfoQ: Spring Bootをこれから始めようという初心者向けに,役に立ちそうなビデオ資料を紹介してください。
Spring Bootチーム: Brian Clozel氏とStéphane Nicoll氏の先日のDevoxxでの講演がオンラインで公開されています。通常の講演に比べてかなり長い録画ですので,詳細な説明を聞くことができるでしょう。Phil Webb氏がJosh Long氏と2014年に,Spring Bootの機能に関する一般的な考え方について,面白い講演を行っています。Josh自身もマイクロサービスをテーマとした素晴らしい講演をvimeoで公開しています。
InfoQ: Spring Bootの上級ユーザに勧められるビデオ資料はありますか?
Spring Bootチーム: Nicholas Frankel氏の“Spring Boot for DevOps”には,有意義な情報が数多くあります。より高度なユーザが興味をもつであろう,いくつかの拡張ポイントを取り上げています。それ以外では,Sping Cloudの講演をお勧めしたいですね。Dave Syer氏とJosh Long氏が分かりやすく紹介しています。Jon Schneider氏とTaylor Wicksell氏のSpring CloudとNetflixについての講演も必見です(今年のSpringOne2GXカンファレンスでは,最も投票の多かった講演のひとつでした)。
InfoQ: start.spring.ioには,ユーザが選択したスターターパッケージに関する情報が集められているのでしょうか?もしそうであれば,その紹介をお願いします。
Spring Bootチーム: はい,統計情報を集めて,その中のいくつかについては先日のブログ記事で紹介しています。Mavenをベースとしたプロジェクトの統計では,Java 8とjarパッケージの利用に明らかな優位性が見られます。平均で毎月50,000件のプロジェクトがstart.spring.ioで生成されています。今後はより詳しい統計情報を定期的に提供したいと考えています。
InfoQ: カラーのbanner.txtはSpring Boot 1.3の興味深い,楽しい機能ですが,ログレベルに応じて異なる色でレンダリングするような,ログのカラーリングを提供する予定はありますか?
Spring Bootチーム: ログレベルに対応して色を変える機能は,すでに1.3でサポートされています。既定のコンソールログ設定でも,レベル毎にカラーコードを使用しています。INFOが緑,WARNが黄色,ERRORが赤です。次の例のように%clr変換ワードを使用すれば,行全体の色を変更することもできます。
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx})既定値をこのようにしていないのは,いくつかのターミナルテーマで,ログが非常に読み難くなることがあるためです。
InfoQは,AngularJS Spring Bootプロジェクトの開発で使用されたJHisperの創設者であるJulien Dubois氏にもインタビューした。Spring Bootの古くからのユーザである氏は,我々が期待した通り,パワーユーザとしてユニークな視点を持っていた。
InfoQ: Spring Bootを使い始めたのはいつですか?
Julien Dubois: JHisperはSpring Bootが世に出る数ヶ月前に始まったのですが,当時の目標は,Spring Bootが現在提供しているものに非常に近いものでした。
2013年の11月,私は,休暇でパリに来ていた友人のJosh Longと昼食を共にしていました。Starbucksでコーヒーを飲んでいる時,彼が私にSpring Bootを紹介してくれたのです。私はすぐ,それがJHisperにとって非常に有効だと気付きました。独自のSpringコードをSpring Bootに置き換えれば,プロジェクトが大幅に前進すると思ったのです。数年たった今,それが正しい判断だったと言えるのは本当に幸せですね!
InfoQ: Spring Bootのバージョン間のアップグレードに関しては,どのような経験をお持ちですか?
Dubois: 私たちのプロダクトはSpring Bootに強く結び付いているので,バージョンアップにはいつも結構な手間が掛かります。Spring Bootの提供するMaven BOM(Boll Of Materials)を使っているので,そのアップグレードが期待通りに動くことを確認しなければなりません。普通は問題ないのですが,サードパーティへの依存性からトラブルが発生して,特定のバージョン番号を指定しなくてはならない場合もあります。新バージョンのSpring Bootには新機能も含まれています。新しい状態チェックや自動コンフィギュレーションなどがその例ですが,それらについては,その機能を組み込んだ上で,同じことを行う既存コードを取り除くか,場合によってはその上にグラフィカルなインターフェースを追加するのがおもな作業になります。
その一番よい例が,Spring Boot 1.3で導入されたCassandraのサポートです。これはJHisperにあった私のコードがSpring Bootに移行されたものなので,当然のことながら,Spring Bootのコードを使用するためにJHisperのコードをすべて削除しなくてはなりませんでした!これは私たちにとってよいことでした。この種のテクニカルなコードがJHisperの対応範囲でないのは明らかでした。他に適当な解決策がなかったので,単にプロジェクトに追加していただけなのです。
InfoQ: Spring Boot 1.3で気に入っている機能は何ですか?
Dubois: 最高に気に入っている機能がひとつあります。新しいdevtoolsです!JHisperでは,ホットリロードを実現しようとして大変な苦労をしました。すでに廃棄されていますが,JHisper Loadedプロジェクトを一度,https://github.com/jhipster/jhipster-loadedで見て頂ければ分かると思います。これには本当に多くの作業が必要で,何週間も費やしたのですが,結果はかなりバギーなものでした。Spring Boot devtoolsはこの問題を非常にうまく,しかもたくさんのバグなしで解決しています!私たちエンドユーザにとっては,BrowserSyncによるフロントエンドの更新とSpring Boot devtoolsによるバックエンドの更新を合わせた,全体としてのエクスペリエンスも素晴らしいものです。すべてがいつでも自動的にアップデートされるという信じられない操作感が提供されることで,作業環境としても素晴らしいですし,古いJava開発環境から移行してきた人たちには驚くべきものがあります。
InfoQ: Spring Bootに対して,これは追加してほしい,と思う機能は何かありますか?
Dubois: 私にとっては以前からの問題なのですが,起動時間を改良してほしいと思っています。開発時に関してはdevtoolsがこの問題を解決してくれていますが,多くのクラウドプロバイダにとって起動時間の問題は非常に重要です。例えば,Spring beanの中には非同期で起動できるものがあります。私たちがハンドコードしたLiquibaseサポート用のものは実際にそうなっていて,起動時間全体をおよそ40%削減することができました。当然ですが,使用可能なCPUコアを最善の方法で使用するような,もっとよい方法があると思います。