Javaフレームワークで圧倒的な人気を誇るSpring
Javaフレームワークで最も人気があるのはSpringと言っていいだろう。ソフトウェア開発企業のJetBrainsが年次で実施している開発者向け調査によると、Javaを使用している開発者に使用しているJavaフレームワークを聞くと、「Spring Boot」が67%、次いで「Spring MVC」が41%、ほかはごくわずかずつで、「なし」が23%(複数回答)。Javaフレームワークを使っているなら、ほとんどがSpringというような状況だ。
Springは継続的に進化を続けているのも特徴だ。Spring Bootだと半年に1回のペースでバージョンアップがリリースされている。2022年にリリースされた2.7と3.0のOSSサポートは2023年11月下旬に終了する。商用サポートは、2.7は2025年8月まで(延長)、3.0は2025年2月までとなっている。
別のVMwareの調査によると、多くのユーザーが最新版を使用していることが分かる。調査を実施した2022年時点では最新版は2.7となり、その2.7を6割が本番環境で使用していると回答していた。ただしサポートが終了したものを使用しているユーザーも一部いる。理由としては「現在の環境が問題なく機能している」や「優先的に取り組む理由がない」などが半数近くを占めた。
また「アップグレードは技術的に難しい」「サポート終了を知らなかった」との回答もある。これに対してはVMware 渡辺隆氏は「パートナー企業様と連携してアップグレード支援を計画しています」と話している。
それはさておき、11月下旬にはSpring Boot 2.7と3.0はOSSサポートが終了する。これらまたは2.6以前のバージョンを商用サポートなしで使用しているのであれば選択肢は3つ。
選択肢その1。VMwareが最も推奨するのは、最新版となる3.1へ移行すること。渡辺氏は「脆弱性の問題などを考えると、多少の労力や時間がかかりますが3.1への移行をおすすめします」と話す。もう少しすると3.2がリリースされるので、タイミングによっては3.2も視野に入れたい。
選択肢その2。商用サポートを導入し、商用サポート期間内に最新版3.1(または3.2)へ移行する。上述したように商用サポートなら2.7や3.0でもサポート期間は1年半から2年近く続くので、サポートを得られるようにする。そして期間内に最新版へ移行する。
選択肢その3。そのまま現状バージョンを使い続ける。この選択肢は不可能ではないものの、サポート切れのバージョンでは脆弱性や何か問題が起きたときに困ることになりかねない。新機能の恩恵も逃すことになる。メリットとデメリットを熟考した上で決めるといいだろう。
VMwareが提供するSpringの商用サポートとなるのが「VMware Spring Runtime」だ。1年単位の契約となる。OSS期間中のビジネスサポートに加えて、OSSサポート終了後の延長サポートが提供される。特に重要なのが重要なバグフィックスやセキュリティ問題のパッチが提供される。なおサポート対象はSpring BootやSpring FrameworkをはじめとするSpringプロジェクト、それからOpenJDK、Apache Tomcatも含む。
Spring Boot 3の注目機能を使えばより柔軟に、より可読性が高く
どのようなソフトウェアでも同様に、新しいバージョンには新しい機能が備わっている。「現状の機能さえあれば問題ない。でもサポートが切れるなら仕方がない」と消極的ではもったいない。最新機能を使いこなせば、これまでにない恩恵を享受できる。
SB C&Sの佐藤梨花氏は「Spring Boot 3.0以上にアップグレードすると、Javaの最新バージョン(17以降)など最新の便利な機能が増えます。すると開発がもっと便利に、楽しくなります!」と元気よく言う。佐藤氏は現在新興商材プリセールスエンジニアでDevOpsや生成AIなどを担当しているが、実は前職が基幹系Webアプリケーション開発を行うエンジニアで長らくJavaを使っていた。そのためJavaプログラミングに詳しい。
Spring Boot 3.0は2022年11月にリリースされた。2.0のリリースから5年ぶりのメジャーバージョンアップとなる。佐藤氏が推す追加機能にはJava 17ベースラインとJava 19のサポートのほかにも、サードパーティーのライブラリのアップデート、GraalVMネイティブイメージのサポート、Prometheusのサポートがある。
今回は厳選した重要なJava 17新機能を2つ紹介する。1点目は「Sealed Classes」、継承先を明示的に宣言・制御することが可能になるものだ。
従来、継承先を制限する方法にはprivateやprotectedがあった。しかし「データ構造的には分けたいが、privateなのでまとめてしまうか」「あまり継承してないけど制限したいからprotected」など、少し不便なところがあった。新しいSealedクラスなら「より柔軟かつ可読性の高い、データの目的に沿ったカプセル化が可能になります」と佐藤氏。
使い方としてはクラスまたはインスタンスに「sealed」修飾子を付与し、permitsにより継承を許可するクラスを定義する。複数あるならカンマ区切りで列挙する。なお許可されるサブクラスはsealedで宣言されたスーパークラスの同じモジュール内やそのパッケージなど「近く」に存在している必要がある。もしpermitsを省略するなら、スーパークラスを直接継承するクラスが自動で許可対象となる。
継承したサブクラスには、それ以降の継承制限を示す修飾子をつける。修飾子には「final(以降の継承を不許可)」「sealed(サブクラスを制限)」「non-sealed(サブクラスを制限しない)」の3種類がある。これを使うことでprivateやprotectedでは表現できなかった、柔軟かつ明示的な条件の指定が可能となる。佐藤氏は「親クラスを見れば継承されている子クラスが分かるので、可読性がかなり上ります」と言う。
2点目は「Pattern Matching for switch」。switch式でステートメントのパターンマッチングが利用可能となる。Java 17ではプレビューで、Java 21で正式採用となる。佐藤氏は「caseでパターンマッチングを可能とすることで、switch式とステートメントの表現力と適用範囲を拡張します」と説明する。
caseでnullやdefault、レコードクラスの指定許可、またswitch式でsealedクラスを指定可能、ガードパターン(caseにwhenで条件)を追加可能となった。switch対象の条件が緩和され、これまでif文で作成していたものもswitchで対応可能となった。
これまでのようにif文の条件分岐ではあらかじめ値を代入しておかないと、条件によってはnullが返ってしまいバグに繋がるリスクがある。またすべての分岐を通ると実行時間が長くなってしまうこともある(最も可能性が高い条件を一番上に書く必要がある)。
新しいswitch式であれば、null条件もcase文の中に入れることができ、double型も比較可能となり、default指定も可能となる。佐藤氏は「ぱっと見た時に何をしているか分かりやすく、もちろん最適化もできています。かなり可読性が高くなっているのではないでしょうか」と力を込める。
Springバージョンアップのメリット・デメリット
Springをバージョンアップすれば、サポート期間が延長になり、関連するOSSの最新バージョンへの対応も増える。また次のバージョンアップもしやすくなる。一方デメリットもある。ソースコードや設定の変更が必要になる。大きいものだとJava EEからJakarta EEへの変更、プロパティファイルのマイグレーション、非推奨コード対策、またSpring Frameworkアップグレードに伴う制約強化対策も必要になる。
コードや設定の変更ではテストが不可欠だ。回帰テストなどの対策を講じておかないとテスト工数が負担になってしまう。だからこそ最新バージョンへの移行をためらう理由になるのだが、脆弱性を放置するリスクや数段飛ばしで移行する時の難易度の高さも考慮しておくべきではないだろうか。バージョンの移行には工数もかかるが、佐藤氏は「CI/CDやDevOpsの取り組みなど開発体制を見直すきっかけになれば、デメリットも前向きにとらえられるのではないでしょうか」と話す。
ここまで話してきたSpring Bootは3.0がメインだったので、より新しいバージョンの新機能も触れておこう。現行の最新安定バージョンSpring Boot 3.1だと、Testcontainers(アプリケーションが依存するサービスのコンテナを素早く開始できる)やJava 20互換がある。また現状プレビューとなっているSpring Boot 3.2だと、アーリーサポートではあるもののJDK 22サポートが盛り込まれている。
ここからは少し視点を変えて、開発者が最新技術情報を習得するのに役立つものを紹介しておこう。まずはVMwareが提供するSpring Academyだ。その名が示すようにSpringのスキルアップを図るためのオンライントレーニングコースとなる。有償版は年間約300ドルですべてのコンテンツにアクセスできる。無料版もある。無料版では、登録さえすれば一部のコンテンツにアクセスできる。まずはサインアップしてどんなコンテンツがあるか見てみるといいのではないだろうか。
他にもVMwareのディストリビューターとなるSB C&Sでは、DevOpsやアジャイルの実現に必要なツールなどを提供している。例えば「DevOps-ABC」はピープル、プロセス、テクノロジーに着目し、ITの変化への組織対応力を高めるアジャイル短期体験パッケージとなっている。「ピープル」では組織やマインドセットの変革や関係者の相互理解、「プロセス」ではビジネスとITの相互理解、アジャイルな文化やプロセス、「テクノロジー」ではVMware Tanzuを利用した開発と運用の相互理解が盛り込まれ、これらを5日間で疑似体験できるのが特徴だ。
またSB C&SのパートナーであるカサレアルからはSpring 2.7から3への移行トレーニングも提供されている。例えば「<速習>Spring Boot 3へのマイグレーション」は1日間のコースとなっている。こちらはSB C&Sでも取り扱っている。
さらにSB C&Sでは「DevOps Hub」を通じてSpringをはじめ、DevOpsに関する最新の製品情報や技術情報を幅広く発信している。こちらも要注目だ。
あらためてSpringのOSSサポート切れを前にして、アップデートをするかどうかについて考えてみたい。現状で満足していれば「現行バージョンのままでもいいや」と思えるかもしれない。そこにSB C&S佐藤氏は「それはあくまで現状の話です」と釘を刺し、次のようなメッセージを呼びかけた。
「数年先を見越し、アップデートについて組織全体で検討していきましょう。先の新機能紹介を通じてアップデートが楽しみと思えてきたのではないでしょうか。サポート切れをチャンスととらえ、開発をより楽しくするために前向きにアップデートに取り組んで行きましょう」
最後に、VMwareの渡辺氏は次のように呼びかけた。
「Spring Frameworkが生まれてから20年、そしてSpring Bootはもうすぐ10年になります。日本においてもコミュニティの力に支えられて、多くの企業でご活用いただいています。一方、Springは枯れた技術かというと、たとえば人工知能機能を組み込んだアプリケーションの開発を効率化することを目的とした『Spring AIプロジェクト』が立ち上がっているように、開発者の効率を高めるための取り組みを継続しています。
また、日本でも多くのお客様が利用されているSpring Boot 2.7系に関しては、商用サポート期間をさらに延長し、2025年8月までとしています。
Springをすでにご活用の方、また、まだ利用されていない方もSpringの魅力に触れていただきたいと思います」
Spring・Java最新情報の資料ダウンロード
本記事で紹介しているSpringバージョンアップのメリット・デメリットを解説した資料のほか、JavaやTanzuに関連したセミナー資料をダウンロード可能です。下記ページよりご覧ください。
Springセミナー動画を視聴する
本記事にて紹介されたセミナー「Java進化論とSpringの今後」(2023年9月15日開催)の様子を動画で視聴できます。下記ページよりお申し込みください。
Spring商用サポートについて相談する
Spring Boot/Frameworkを使用したシステムをご利用の方や、JDKのアップデートをご検討の方は、DevOps Hubお問い合わせフォームからのご連絡をお待ちしています。