SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

アプリケーション開発の最新トレンド(AD)

Spring Boot 2.7と3.0のOSSサポート切れ間近! 開発が便利に楽しくなる最新バージョンへ移行しよう

  • このエントリーをはてなブックマークに追加

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のサポートがある。

Spring Boot 3.0の概要
Spring Boot 3.0の概要

 今回は厳選した重要なJava 17新機能を2つ紹介する。1点目は「Sealed Classes」、継承先を明示的に宣言・制御することが可能になるものだ。

 従来、継承先を制限する方法にはprivateやprotectedがあった。しかし「データ構造的には分けたいが、privateなのでまとめてしまうか」「あまり継承してないけど制限したいからprotected」など、少し不便なところがあった。新しいSealedクラスなら「より柔軟かつ可読性の高い、データの目的に沿ったカプセル化が可能になります」と佐藤氏。

 使い方としてはクラスまたはインスタンスに「sealed」修飾子を付与し、permitsにより継承を許可するクラスを定義する。複数あるならカンマ区切りで列挙する。なお許可されるサブクラスはsealedで宣言されたスーパークラスの同じモジュール内やそのパッケージなど「近く」に存在している必要がある。もしpermitsを省略するなら、スーパークラスを直接継承するクラスが自動で許可対象となる。

 継承したサブクラスには、それ以降の継承制限を示す修飾子をつける。修飾子には「final(以降の継承を不許可)」「sealed(サブクラスを制限)」「non-sealed(サブクラスを制限しない)」の3種類がある。これを使うことでprivateやprotectedでは表現できなかった、柔軟かつ明示的な条件の指定が可能となる。佐藤氏は「親クラスを見れば継承されている子クラスが分かるので、可読性がかなり上ります」と言う。

Sealed Classesのサンプルコード
Sealed Classesのサンプルコード

 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指定も可能となる。佐藤氏は「ぱっと見た時に何をしているか分かりやすく、もちろん最適化もできています。かなり可読性が高くなっているのではないでしょうか」と力を込める。

Pattern Matching for switchのサンプルコード
Pattern Matching for switchのサンプルコード

次のページ
Springバージョンアップのメリット・デメリット

関連リンク

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
アプリケーション開発の最新トレンド連載記事一覧

もっと読む

この記事の著者

加山 恵美(カヤマ エミ)

フリーランスライター。茨城大学理学部卒。金融機関のシステム子会社でシステムエンジニアを経験した後にIT系のライターとして独立。エンジニア視点で記事を提供していきたい。EnterpriseZine/DB Onlineの取材・記事や、EnterpriseZine/Security Onlineキュレーターも担当しています。Webサイト:http://emiekayama.net

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

提供:SB C&S株式会社

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18471 2023/10/26 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング