JJUG CCC 2024 Fallにいってきました
昨日(10/27)にベルサール新宿グランドで新宿行われたJJUG CCC 2024 Fallにいってきました。筆者はかなりの出不精なのでオフラインイベントはあまり参加しないのですが、今回はどうしても聞きたいセッションがあったので朝一から参加しました。今回のその中から興味深かったセッションをいくつか紹介したいと思います。
なお、内容はレポートというよりホボ筆者の感想文です。その点はあらかじめご承知のほどを。現時点で登壇資料が見つけられたものはそのリンクもつけておきます。感想ではなく中身が知りたい方はそちらを参照いただければと思います。
Java x Spring Boot製アプリケーションのコールドスタートに立ち向かう!〜暖機運転のアプローチいろいろやってみた〜
#まず最初に聞きたかったのはこの暖気セッションです。朝10時開始のセッションでしたが、開始10分前には到着し、やる気満々で先頭近くの真ん中の席を確保しました。話しを聞く前は朝が早かったのでテンション低めで懐かしの大学の朝1限目な感じでしたが、スピーカーの方の話しがとても上手く、目はすぐに覚めました。
本題の中身ですが、筆者はJavaの開発を20年以上やっていますが、暖気の話しは結構でたりします。しかし、スピーカーの方も「開発現場では話題にはなるけど、暖気をどうしているかという情報ってないですよね」といっていましたが、ほんとにそのとおりだと思います。(なので人様の暖気を聞きたかったのです!)
内容的には暖気といっても、いろいろあるよね。その中でもE2Eや打鍵ツールなどを使ってユーザへのサービス開始前に実際に動作せるのが一般的だと思うけど、それって参照系はそれほど難しくないけど、更新系でやるのって難しいですよねという話があり。
筆者も過去暖気をやったプロジェクトがありますが、確かにやったのは参照系だけで、更新系はやっていませんでした。というより更新系も暖気するという発想がなったのですが、なるほど、更新系も暖気したりするんですね。そういえば確かに1発目の注文処理はすごく遅かったので、起動直後に注文してくれた人には「ゴメンよ、でもあなたのその1発がその後の多くの人を救うから許してネ!」と訳のわからないことを思っていた過去を思い出しました。
本題に戻り更新系をやる場合、実際にデータが登録されてしまうので、これをどうするか?という手法が色々紹介され、なるほどと思いながら聞かせていただきました。
ちなみに筆者の直近のプロジェクトでも暖気は話題になりました。結論としては、アプリケーションサーバーを起動する段階でアプリケーションで利用する大多数のクラス(要はStringやMapやらのJava標準ライブラリ)はアプリケーションサーバー自身の起動でロードされることからその必要性はないだろうとの判断のもと暖気は行っていませんし、実際に起動直後のアプリケーション動きがそれほど遅いとは感じないため、その必要性はないと思っています。
ただ、これは筆者のプロジェクトのアプリケーションの特性による部分もあると思われるため、どのようなアプリでも常に暖気は不要とは思ってはいません。むしろ、JSPを使っているアプリでは現在においても暖気は行っておく方がベターだと思います。ということで、暖気が必要になった際は今回のセッションを参照にさせていただきたいと思います。
社内での開発コミュニティ活動 ~バッチ処理方式設計とSpringBootでのバッチ開発~
#今回のイベントで一番聞きたかったセッションはコレです。このためだけに貴重な日曜日にワザワザ西新宿までやってきました。といっても過言ではありません。
というのも、ちょうど今、お仕事でクラウド上のバッチアーキテクチャはどのようにすべきか?の検討をしているのですが、色々思い悩むことも多く、天下のNRI様がSpring Bootを使ったバッチ処理方式をご教授してくれるというので是非聞きたいと思い参加しました。
内容としてはNRIさんのプロダクトやサービス紹介の側面があるものの、それを含めても個人的にすごく得るものがありました。その中でも印象に残っているものを2つここでは挙げさせていただきます。
1. Spring Batchは使わない
#まず1点は『Spring Batchは使いません!』ということです。これはある意味衝撃的でした。
使わない理由は『Spring Batchを使ってバッチを作る場合、そのアーキテクチャであるReader, Processor, Writerのモデルに従ってアプリを作る必要があるが、これを意識して設計するのはハードルが高い、じゃ、自由にやれるTaskletを使えばいいでは?という話もあるが、それだったらSpring Batchを使う必要はないよねという考えからSpring Batchは使っていません(キリッ) 』ということでした。これを聞いて筆者も「ですよねー、ですよねー、全くその通りですよねー。もー、120%同意しちゃいます」と思わずにいられませんでした。
ホントにそうなのですよね。Spring Batchって一見よさげにみえますが、考えると「つらみ」の方が多い気がしてなりませんでした。なのですが、これは自分の精進が足りないだけだと思い、これまで大きな声でいうことはできませんでしたが、これからは胸をはっていいたいと思います「NRIさんも使わないっていってるよ」と、まさに寄らば大樹。
2. 用語の統一は重要
#スピーカーの方が所属されている部署では、バッチアプリではどのようなことを考慮すべきか?などを実装に依らずバッチアプリで普遍的に考えなければならないことをまとめた「設計ガイド」と、SpringBatchを使わずSpring Bootを使ってどうやってバッチアプリを実装するかをまとめた「開発ガイド」の2つを整備されているとの話しがあり、「設計ガイド」の紹介の中でバッチを設計する上では用語をきちんと定義してすり合わせることが重要との話しがありました。
例えば「バッチ」という用語1つとっても、辞書的には「まとめて処理する」意味になるが、「ある時点で単発で行う処理」はバッチ処理とはいわないのかというとそうではなく、実務上は「オンライン」「バッチ」「非同期」の処理形態の観点で処理を分類していますよね。なので、バッチといっても人によっては違うものになることもあります。
といった話や、並列処理と多重処理、ジョブとジョブネット、タスクとグループといったように、組織や文化が違えば同じものを異なる用語でいっていたりするので、用語の認識を合わせることは非常に重要というお話がありました。
この話しも「そうなんだよなー」と思いながら聞いていました。筆者はJP1に毒されているのでJP1用語でものをいったりするのですが、JP1を知っている相手であればホボ1ミリのズレもなく意味を理解いてもらえることも、JP1を使ってない人にはどう説明すればいいのか悩むこともしばしばあったりします。なので、こんな素敵な用語集があったら是非使わせていただきたいと思いました。
また、最後の質問コーナーでは、おくびもなく自分の悩みごとの「クラウドとオンプレではバッチの作りも変わってくると思いますが、その辺はガイドでどのように扱われているのですか?」ということを質問させていただき、とても丁寧にお答えいただきました。
スピーカーの方の部署では公開に向けて、ガイドの整備やSpring Bootをつかったバッチフレームワーク的なものの開発を進められているとのことでした。公開された際には是非参考にさせていただきたいと思います。
Hitting the “Refresh” Button on Your Spring Web Application
#こちらは資料も発表もすべて英語で行われたセッションでした。筆者は英語がかなり不得手ですが、ブロードコム(VMware)の中の人がSpringのナウくて便利な機能を紹介してくれるということで、どうしようかなぁと悩んだ末、コードは万国共通なので少しはわかるでしょう!と思い参加したセッションでした。
が、確かに内容は何となくわかるにはわかったのですが、とってもヒヤ汗ものでした。
というのも、コードを表示するけど後ろの方では見づらいかもしれないので前の方に来てください、とスタッフの方が日本語でいってくれたので、メガネを忘れたのもあり、最前列のド真ん中に移動したのですが、これがある意味失敗でした・・
セッションではよくスピーカーが聞いている人の反応を確認したりしますが、それが私に一点集中ではないですか。正直話しの1割も何を言っているかわかりませんでしたが、わかった風にしていないと「大丈夫?どこわからない?」とでも聞かれそうな雰囲気のため、空気を察して「ウンウン」うなずくばかりでした。
さらに会場にいるひとに何やら「該当する人は手を上げて」みたいな問いかけを何度かするのですが、正直なにを聞いているのかわからないのですが、下手に手を上げて自分ひとりだったやばいし、逆にみんな手を上げてるのに自分だけ上げてなかったら・・うーーん、どっちかわからないけど手を上げちゃおう。あっ、みんな手を上げてる、こっちが正解だったんだセフセフといった一人YES/NOクイズを勝手に繰り広げてました。
といった感じで、すべては自分の理由で勝手に落ち着かないセッションでしたが、内容としては、Spring Boot3 以降のおすすめの機能として次の4点が紹介されていました。
- Java 21から導入されたVirtual Threadsへの対応(結構時間を掛けて説明されていました)
- リアクティブな新たなRestClient(一瞬でサラッとくらいにしか説明されてませんでした)
- Dockerやdocker-composeを便利にしてくれるService Connections(スピーカーの推し機能のような感じでした)
- CDSによる起動の高速化とSpringの便利機能(これも推し機能のようでした)
最後にスピーカーがデモで使っていたGitHubのリポジトリの紹介があったので、こちらに載せておきます。これを見るだけでも結構勉強になりそうなので、このURLを手にいれることができただけでも収穫でした。ヒア汗をかきながらも参加した甲斐がありました。
最近のSpring Bootの便利機能を復習!
#Spring界隈では非常に有名なブロードコムの中の人のmakingさんのセッションに参加しました。内容は資料が公開されているので、そちらをみていだければと思いますが、先ほどのステファンさんのセッションとmakingさんのセッションから@ServiceConnectionとCDSによる高速化は是非使うべき機能ということはわかりました。
以上、イベントに参加にした感想でした。