This Year in Spring – 2023

原文はこちら。
The original article was written by Josh Long (Spring Developer Advocate, Broadcom).
https://spring.io/blog/2023/12/26/this-year-in-spring-2023/

This Week in Springにようこそ!今日は2023年12月26日、まもなく新しい年を迎えます。つまりお分かりですね?毎年恒例、ワイルドで素晴らしいSpringdomの世界の最新情報をお届けします。これがThis Year in Springです。それでは、2023年における最大のテーマをいくつか紹介した上で、恒例のラウンドアップをどうぞ。

Artificial Intelligence (AI)

人工知能の分野で信じられないような飛躍的な進歩がなされていることは、間違いなく耳にしたことがあるでしょう。それこそどこででも。ChatGPTが登場する以前から、GitHub CopilotやCodotaは、AIが開発者のコードの生産性向上ことを、世界中の開発者に示してきました。そして今、世界中がその可能性に気づいています。AIは素晴らしいですし、そのほとんどは低レベルのコードとPythonで実装されていますが、ほとんどのデータベースがどの言語で実装されているか気にしないのと同じように、私たちのほとんどは気にする必要はありません。たいていの人は、自分でSQLデータベースを作ったりしませんよね。つまり、本当に重要なのは、AIを統合したアプリケーションを書く際の人間工学なのです。そしてここで、Spring AIは特に魅力的だと思うのです。すべてのLLMはAPIを提供していますし、通常はHTTPベースです。簡単です。他には何があるでしょうか?AIはトークンという単位で取引します。トークンとは、基本的にはLLMへのリクエストが(リクエストとレスポンスの両方において)どれだけのデータを含むかを示す指標です。トークンの数が少なければ少ないほど、LLMに送ることができるレスポンスのデータ量は少なくなります。図書館の本に関する質問に答えたり、銀行口座に関する質問に答えたりするボットを作ろうとしているとしましょう。そのデータにアクセスする方法を与え、そのデータを与えられたLLMのコンテキスト・ウィンドウに適合させる方法を見つける必要があります。インジェストから要約、ベクターストアを使った検索まで、このパイプライン全体には、JavaとSpringが得意とするエレガントさと人間工学が必要です。このend to endのパイプライン全体がRAG (retrieval augmented generation) と呼ばれることもあります。

GraalVM

昨年11月、Spring Boot 3.0でGraalVM Native Imageサポートを一般提供し、Production Readyな機能として導入しました。GraalVMの核となる考え方は、コードを積極的に取り込み、OSやアーキテクチャに特化したネイティブコードに変えることを可能にする、AOTコンパイラです。その結果は驚くべきものです。起動時間が格段に速くなり、RAMフットプリントが格段に小さくなりました。しかし、いくつかのコストや譲歩もあります。Reflection、Serialization、JDK Proxyなどのような、動的なことをいつどこで行うかをコンパイラが理解できるよう、設定ファイルを用意する必要があります。Spring Boot 3.0以降には、コンパイル時にSpring Bootアプリケーションを分析し、関連する設定を出力するAOTエンジンが同梱されています。結果として、ほとんどの場合、一般的なケースでは、アプリケーションをGraalVM Native Imageに変換して、こうした素晴らしい利点を享受できます。start.spring.ioでGraalVM Native Imageサポートを追加してください。私は、SpringのAOTエンジンの素晴らしい機会について、あなたが気に入るかもしれない(無料の)eBookを書きました。

Everything You Never Wanted to Know About Spring Boot 3 AOT
https://tanzu.vmware.com/content/white-papers/spring-boot-3

動画でご覧になりたい場合は、この技術に関する私の詳細なチュートリアルをご覧ください。

Virtual Threads (Project Loom)

Java 21は、間違いなくJava 1.0以来、Javaのリリースの中で最も重要なリリースだと思っています。Records、パターン・マッチ、スマートswitch式、自動推論、複数行文字列、その他多くの機能など、Java 8を使用している人々にとってアップグレード必須の機能が詰まっています。また、Java 21によって、Javaを最も生産的で、最もパフォーマンスとエネルギー効率の高いプラットフォームの1つにしています。

私のお気に入りの機能は、Project Loom(Virtual Threads)です。Virtual Threadsは、Thread.sleepInputStream#readなどのブロックアクションを検出し、実行中のスレッドからそれらを移動させ、そのスレッドを効果的に解放してシステム内の他の処理をさせる、軽量のスレッドランタイムを提供します。他のネットワークサービスへ常にリクエストを送り続けるような、IOに振り回されるシステムに関わっていませんか?そうであれば、おそらく他の何よりもデータを待つことに多くの時間を費やしていることでしょう。つまり、リクエストが大量に来た場合、他のスレッドがデータの到着を待っている間、リクエストが処理されるのを待たなければならず、前に進むことができないのです。Project Loomはこれを解決し、アイドル状態でスレッドを独占することがないようにします。そして何より、Virtual Threadsの利用は事実上One linerです。スレッドを使っているところならどこでも、Spring Boot 3.2を使っているのならアプリケーション全体のプロパティを一カ所で設定するだけです。簡単ですね。Spring Boot 3.2の紹介ビデオでVirtual Threadsについて説明しています。

Coordinated Restore at Checkpoint (Project CRaC)

GraalVM Native Imageについて話すときに「ほとんどの場合」と言ったことにお気づきでしょうか?それはいつもうまくいくとは限らないからです。十分に機能することもありますが、JREが行っていることとは異なることを行っているため、JREの約束に反してしまうこともあります。例えば、JavaエージェントはGraalVM Native Imageでは動作しません。サーバーレスのコンテキストなどで、起動時間を速くしたい場合はどうすればいいのでしょうか?

(LinuxのようなOS上で実行される)プログラムは通常、起動し、データ構造を初期化し、それらをRAMにロードし、そして実行を開始します。この初期化は、JRE上で実行されるほとんどのプログラムのように、時間がかかることがあります。CRIUはLinuxのメカニズムで、アプリケーションの実行状態のスナップショットを取得し、そのスナップショットのディスクへの書き込みが可能です。そして、そのスナップショットを別の実行中のプログラムにロードし、初期化をスキップできます。その結果、起動時間が一瞬で速くなります。ライフサイクルが多少関係します。プログラムは、いつスナップショットを取得されるかを知る必要があります。そうでなければ、機密性の高いパスワードをクリーンアップしたり、スナップショット取得の結果ディスクに書き込まれたくないephemeral socketをクローズしたりする機会がないからです。Javaプログラムでは、Project CRaC (coordinated restore at checkpoint) でこのライフサイクルに参加する簡単な方法を提供します。そしてSpring Boot 3.2もCRaCをサポートするようになりました。Spring Boot 3.2の紹介ビデオでProject CRaCについて説明しています。

Docker-Driven Development

5月にリリースしたSpring Boot 3.1では、Docker駆動開発 (Docker-driven development) を新たにサポートしました。Spring Bootは、ローカルのDocker Compose記述ファイルやTestcontainersから接続情報を取得できるようになり、データベースの接続情報を提供する必要がなくなりました。以下のビデオでは、これらのエキサイティングな新しい可能性について説明しています。

Spring Modulith

Spring Bootは、Springチームとペアプログラミングをするチャンスです。JavaとSpringベースのアプリケーションでテクノロジーを統合、利用する方法に対するこだわりのアプローチです。また、さまざまなアーキテクチャをサポートしています。すべてのアーキテクチャが同じように作られているわけではありません。分散システムを構築したいなら、Spring Cloudがあります。しかしながら、コードベースを構築し、モジュール性、チームのスケーラビリティ、クリーンで絡みのないアーキテクチャを促進するように設計された方法で構築したい場合はどうすればいいでしょうか?ここでSpring Modulithの出番です。Spring ModulithのリードであるOliver Drotbohmは、SpringOneでの講演でSpring Modulithについて紹介しています。

And now for your regularly scheduled programming…

お待ちかねのウィークリー・ラウンドアップです。

新しいSpring AIの整ったリファレンス

Spring AIプロジェクト自体でコードベースの大規模なリファクタリングが行われたばかりなので、現時点ではほとんど概念的なものであることに注意してください。例えば、AiClientChatClientに変わっていたりします。

Spring AI Reference
https://javatechonline.com/spring-ai-reference/

Liberica Runtime ContainerとSpring Bootを使ったコンテナーイメージの構築

Spring Boot Application on Liberica Runtime Container
https://www.baeldung.com/spring-docker-liberica

OpenRewriteを使ってSpring Bootアプリケーションを簡単に移行する方法

LocalStackとSpring BootでAWSサービスをテストする

Testing AWS service integrations using LocalStack
https://testcontainers.com/guides/testing-aws-service-integrations-using-localstack/

Bootiful Podcast

Cloud Native Whitney Leeに話を聞きました。

A Bootiful Podcast: Cloud Native Whitney Lee
https://spring.io/blog/2023/12/22/a-bootiful-podcast-cloud-native-whitney-lee/

Spring Modulith 1.0.4と1.1.1がリリースされました

Spring Modulith 1.0.4 and 1.1.1 released
https://spring.io/blog/2023/12/21/spring-modulith-1-0-4-and-1-1-1-released/

Spring Boot 3.2.1とSpring Boot 3.1.7がリリースされました

Spring Boot 3.2.1 available now
https://spring.io/blog/2023/12/21/spring-boot-3-2-1-available-now/
Spring Boot 3.1.7 available now
https://spring.io/blog/2023/12/21/spring-boot-3-1-7-available-now/

Spring Cloud Jubilee 2021.0.9がリリースされました

Spring Cloud 2021.0.9 (aka Jubilee) Is Now Available
https://spring.io/blog/2023/12/20/spring-cloud-2021-0-9-aka-jubilee-is-now-available/

これが2023年最後のラウンドアップです。今年が良い年であり、来年がさらに良い年であることを願っています。年明けの2024年、新しい年、そしてもちろんThis Week in Springの13周年にお会いできることを楽しみにしています。うわぁ。書いているだけで頭が真っ白になるぅ。

Happy new year, everybody!

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください