Spring Tools Live - All The Great New Things
本セッションでは、Spring Tools を利用して生産性を向上させる方法、特にVSCode上でGitHub Copilotを活用する方法について、デモを中心に紹介されました。
セッションの序盤では、Spring ToolsにてSpring Frameworkに関するほぼすべての機能がサポートされており、必要となるVSCode用の拡張機能も提供されていることに触れられました。また、近年はマイクロソフトとも協業しセキュリティの強化とAIに取り組んでいることを強調されました。
VSCodeではJavaの開発向けにデバッガーやテストランナー、MavenやGradleのサポートなど多種多様な機能を提供しており、少ないタイピングでより多くのコーディングも可能となるVisual Studio IntelliCodeにも対応していると説明されました。また、これらのサポート機能についてはPull Requestにて改善要望をすることもできると補足されました。
続いて、VSCode上で可視化されるもの一例として、実行中のアプリケーションや生成されているBeanとそのプロパティ、アプリケーションに組み込まれているエンドポイント、および、メモリの使用状況が確認できるビューを紹介されるとともに、Spring Petclinicを例にしたデモをしながら該当のビューの表示方法や表示内容について説明されました。
その後、本セッションの本題でもあるAIを活用したアプリケーションの開発について説明するに先立ち、Spring Bootの効率的なバージョンアップにはOpenRewriteが活用できること、および、Spring Modulithを用い柔軟なバージョンアップを実現するモジュラーアーキテクチャを構築しておくことが重要であると説明されました。
AIを活用したアプリケーションの開発のデモの中では、GitHub Copilotにて実現できる内容を紹介しながらプロンプトエンジニアリングの進め方について説明されました。これらの機能は、VSCodeだけではなくIntelliJ向けの拡張機能としても提供されている一方、EclipseやNetBeans向けには提供できていない点を補足されました。
-
スコープの指定(一例)
- ワークスペース内にある資材(@workspace)
- 実際に動作しているアプリケーション(@context)
- ターミナルに表示されている内容(@terminal)
-
コーディングに関する質問(提示された修正案は開発者側での適用有無の判断が可能)
- プロジェクトのコンテキストや規則に順じたコード補完
- 修正・改善方法に関する質問
- 単体テストコードの生成
- 業界標準としてはどのようなものがあり、どうすれば準拠できるかの確認
- OpenRewriteを利用したバージョンアップ方法に関する質問
-
資材に関する質問
- 利用している資材のバージョンや設定内容の確認
- 特定の機能の利用有無や、利用している場合の実装・設定箇所の確認
-
その他
- 発生しているエラーの原因、対処方法の確認
- (Kubernatesに安全に)デプロイするための方法の確認
- ボイスチャットでのやり取り
- コメントやReadmeなどのドキュメントの生成
- VSCodeの各種ビューの表示
また、GitHub Copilotでは、別の公開コードをそのまま使用することは許可されていないという特定のルールがあり、ChatGPTが一つの単語から次の単語を確率で推測して出力するのと同様に、コードとクラス名から、そのクラスがどのようなものであるかを確率で推測し、そのコードの補完に必要なものを生成するため、同じプロンプトでも必ずしも同じ結果が得られるとは限らず、かつ、稀に動作しないコードを生成する可能性がある点に触れられていました。
最後に、開発者をAIに置き換えられるか? といった議論について、明言できないものの「新人の開発者」の一部を置き換えられる可能性があると述べつつも、必要な情報を得るための正しい質問することができる「経験のある開発者」にとっては、自身が実装したコードを改善しつつ生産性をあげることができる非常に優れたツールである言える、と締めくくられました。
Micrometer Mastery: Unleash Advanced Observability In Your JVM Apps
このセッションではBroadcom社のSpringチームの開発者であるJonatan Ivanov氏からMicrometerを使ってSpringアプリケーションの可観測性(Observability)を引き出す方法が紹介されました。
可観測性は近年継続的に取り上げられているテーマの一つです。可観測性が重要である理由について、Jonatan Ivanov氏は、昨今のシステムは非常に大規模かつ複雑になっているためトラブルシューティングが容易ではなく、可観測性がなければ復旧に時間がかかりユーザーの満足度を低下させることにつながると指摘しています。
Spring Bootでは可観測性に必要なデータとしてログ、メトリクス、トレースの3つの情報を以下のライブラリで収集可能です。
- ログ:SLF4J + Logback
- メトリクス:Micrometer(Spring Boot Actuator)
-
トレース
- Spring Boot 2.x:Spring Cloud Sleuth
- Spring Boot 3.x:Micrometer Tracing(Spring Boot Actuator)
デモでは上述の3つのデータをGrafana上で表示し、トレース情報からエラー情報を追跡してどのサービスで根本的なエラーが発生しているかを特定し、ログから抽出されたスタックトレース情報を参照することで原因の分析まで可能なことを実演されました。ログ・トレース間の参照に加え、メトリクス・トレース間の参照も可能であるため、3つのデータは独立したデータではなく関連するデータとして取り扱うことができます。
次に、Micrometerが持つObservation API(Java API)の以下の機能についてサンプルコードとともに紹介されました。
- ObservationHandler:メトリクスとトレースの観測内容に独自の定義を追加
- Observation.Context:ハンドラー間で観測結果などのデータ共有
- ObservationPredicate:観測の有効/無効設定
- ObservationFilter:観測データへの共通処理
- ObservationConvention:観測データのKey-Value規則の定義
これらのMicrometerを使った可観測性の実装を自動でドキュメント化する方法としてmicrometer-docs-generatorが紹介されました。ドキュメントにはコードで定義した規則やインターフェース、メトリクスやトレースの定義が出力されます。また、実運用されているObservation APIの実装例を知りたい場合は、Spring MVCの以下クラスが参考になると紹介されました。
- ServerHttpObservationFilter
- DefaultServerRequestObservationConvention
- DefaultServerRequestObservationConvention
- RestTemplate
その他の最新情報として、Micrometerではメトリクスに動的なタグを付与するためのMeterProvidorやPrometheus Java 1.xクライアントの提供など、Spring Boot 3.3ではActuatorにSBOM情報を提供するエンドポイントが追加されたことが紹介されました。
最後に直近のマイルストーンとして次の機能を紹介されました。
- ExponentialHistogram(OTLP)サポート
- テスト用の可観測設定TestObservationRegistryの実装
- プロセス情報を提供するProcessInfoContributorの実装
- SSL証明書情報を提供するSslInfoContributorの実装
- SSL証明書の期限をチェックするSslHealthIndicatorの実装
- Spring AIの可観測性対応
本セッションで扱われたデモコードはJonatan Ivanov氏のGitHubリポジトリから参照可能です。
Spring Bootアプリケーションの可観測性に興味がある方は本セッション内容を通じてSpring Boot ActuatorおよびMicrometerに触れてみてはいかがでしょうか。