Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
業務アプリケーションでリアクティブ化するところ、しないところ
Search
Nealle
May 30, 2026
Technology
110
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
業務アプリケーションでリアクティブ化するところ、しないところ
2026/5/30
https://ccc2026spring.java-users.jp/
JJUG CCC 2026 Spring
Nealle
May 30, 2026
More Decks by Nealle
See All by Nealle
Claude Codeによるデータ分析の民主化とそれを支えるデータ基盤
nealle
1
80
Product Engineering Conference 2026の ご案内
nealle
0
170
AllCompanyDeck_old.pdf
nealle
0
47
職種の境界を染み出しあう品質保証 - PdEがテストへ、QAが上流へ、AIとともに
nealle
0
210
どうして今サーバーサイドKotlinを選択したのか
nealle
0
250
電話を武器に変える Amazon Connect 活用の全貌
nealle
0
3.7k
Nealle Company Deck
nealle
0
180
TypeScriptとAngular Signal で実現する保守性の高いアプリケーション設計 - 3層アーキテクチャによる責務分離の実践(たつかわ) https://2026.tskaigi.org/talks/10
nealle
1
460
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
350
Other Decks in Technology
See All in Technology
タクシーアプリ『GO』の実践的データ活用〜位置情報データの収集とStreamlitでの可視化〜
mot_techtalk
2
190
QAタスクをスキル化したいときに考えること
aomoriringo
0
160
20260801_スクフェス大阪
kgnkhkr
1
1.1k
NYC Summit 2026 におけるAmazon Bedrock AgentCore のアップデート
ren8k
3
320
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
420
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
750
AIQAのナレッジ構築について
qatonchan
1
150
システム監視を 「システムを監視するだけ」で 終わらせないために
seiud
0
170
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
590
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
170
reFACToring
moznion
1
1.1k
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
120
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Documentation Writing (for coders)
carmenintech
77
5.4k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Between Models and Reality
mayunak
4
380
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
My Coaching Mixtape
mlcsv
0
190
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Why Our Code Smells
bkeepers
PRO
340
58k
Fireside Chat
paigeccino
42
4k
GraphQLとの向き合い方2022年版
quramy
50
15k
Building AI with AI
inesmontani
PRO
1
1.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
Transcript
業務アプリケーションで リアクティブ化するところ、しないところ 2026/5/30 Lambig
自己紹介 Lambig ランビグ (株式会社ニーリー テックリード) https://github.com/lambig We’re hiring! この辺の領域やってます 釧路移住民です
質問1 • リアクティブなサーバーサイドアプリケーションを ◦ 開発・運用していますか? ◦ 検討していますか?
質問2 • リアクティブ業務アプリ検討・開発で ◦ Clean系実装を想定・実装していますか? ▪ リアクティブ・ブロッキングの境界線を引いていますか? • リアクティブ実装 •
ブロッキング実装
業務アプリケーションで リアクティブ化するところ、しないところ
はじめに • 実例、実際のお悩みベースです ◦ 正解をお出しできているかは不明です ◦ これからお話しする方法で今はイケています ◦ イベント駆動化はしていません ▪
する可能性は想定している、位です • 今回しないお話 ◦ リアクティブアプリケーションそのもののお話 ◦ Clean系そのもののお話
リアクティブ業務アプリのサクっと答えが出てこない話 • どこをリアクティブに書く? ◦ 全部? ◦ 特定レイヤ(インフラとか)?
リアクティブ業務アプリのサクっと答えが出てこない話 • 全部リアクティブ ◦ Pros ▪ 発想はシンプル ▪ I/O境界からユースケースまで流れが一貫する ▪
ブロッキング混入を発見しやすい
リアクティブ業務アプリのサクっと答えが出てこない話 • 全部リアクティブ ◦ Pros ▪ 発想はシンプル ▪ I/O境界からユースケースまで流れが一貫する ▪
ブロッキング混入を発見しやすい ◦ Cons ▪ 記述量がやたら増える • 業務知識の読み取りが大変 ▪ メンバー全員がリアクティブ読み書き必須に
リアクティブ業務アプリのサクっと答えが出てこない話 • 一部リアクティブ ◦ Pros ▪ うまく行けば技術と業務をある程度分離できるかも • 新規参画メンバーに少し優しい作り •
LLM(とレビュアー)フレンドリー
リアクティブ業務アプリのサクっと答えが出てこない話 • 一部リアクティブ ◦ Pros ▪ うまく行けば技術と業務をある程度分離できるかも • 新規参画メンバーに少し優しい作り •
LLM(とレビュアー)フレンドリー ◦ Cons ▪ 線引きどうしましょう ▪ 判断するならミスもあるかも
リアクティブ業務アプリのサクっと答えが出てこない話 • 一部リアクティブでやってみることにしました ◦ とりあえず業務判断を字面で解りやすくしたい ◦ 分割基準の提案: ▪ 業務"判断"とそれ以外を分ける
業務処理のうち、業務判断を切り出してみる • 業務処理 ◦ 受け取った情報、あるいは処理開始時のコンテキストに対して ▪ 足りない情報を外部から補足する ▪ 既にある情報から何らかの値や結論を導き出す ▪
業務を遂行する • 何かを記録する • 外部に値や結論を発信・返答する
業務処理のうち、業務判断を切り出してみる • 業務処理 ◦ 受け取った情報、あるいは処理開始時のコンテキストに対して ▪ 足りない情報を外部から補足する ▪ 既にある情報から何らかの値や結論を導き出す ▪
業務を遂行する • 何かを記録する • 外部に値や結論を発信・返答する
業務処理のうち、業務判断を切り出してみる • 業務処理 ◦ 受け取った情報、あるいは処理開始時のコンテキストに対して ▪ 足りない情報を外部から補足する ▪ 既にある情報から何らかの値や結論を導き出す •
業務知識が一番乗ってくるのがココと仮説 ◦ ここが同期で書かれていれば読みやすそう ▪ 業務を遂行する • 何かを記録する • 外部に値や結論を発信・返答する
業務判断をブロッキング化する • 業務判断ではブロッキング ◦ 業務モデルのメソッド • 業務処理一般はリアクティブ ◦ アプリケーションサービス ◦
リポジトリのメソッド
業務判断をブロッキング化する • ドメインサービスは?
業務判断をブロッキング化する • ドメインサービスは? ◦ 松: 判断か一連の処理かでブロッキング・リアクティブの2種類 ▪ 筋としては正当 ◦ 竹:
妥協して全部非同期 ▪ 設計上の考慮点を減らす
業務判断をブロッキング化する • ドメインサービスは? ◦ 松: 判断か一連の処理かでブロッキング・リアクティブの2種類 ▪ 筋としては正当 ◦ 竹:
妥協して全部非同期 ▪ 設計上の考慮点を減らす 採用したのはこちら
業務判断をブロッキング化する • ドメインサービスは? ◦ 松: 判断か一連の処理かでブロッキング・リアクティブの2種類 ▪ 筋としては正当 ▪ モデルを跨いだ処理は後から外部依存が発生しがち
• I/Fが変わると変更時がちょっと大変かもと思った ◦ 竹: 妥協して全部非同期 ▪ 設計上の考慮点を減らす • LLMベース実装を考慮に入れると無視できない
業務判断をブロッキング化する • ドメインサービスは? Hindsight ◦ 判断・処理で分けた方が良かったかも ▪ 構造やオブジェクトの役割が明確化する ▪ LLMベース実装の対応は実装ルールで縛れる気がする
ところで: 正常系以外のハンドリング • リアクティブフレームワークの基本機能 ◦ 失敗系 ▪ エラー検出・通知 ▪ リトライ
▪ リカバリ ◦ 例外を失敗系に流してくれる機能 ◦ いわゆる業務エラー(準正常系)をこれに乗せる?
ところで: 正常系以外のハンドリング • リアクティブフレームワークの基本機能 ◦ 失敗系 ▪ エラー検出・通知 ▪ リトライ
▪ リカバリ ◦ 例外を失敗系に流してくれる機能 ◦ いわゆる業務エラー(準正常系)をこれに乗せる? ▪ 乗せませんでした
ところで: 正常系以外のハンドリング • 準正常系の扱い ◦ 処理中断ではなく正当な結果の一部として扱いたい ◦ 実例が基盤寄りシステムなので準正常系は結構ありそう ▪ fillInStackTraceあんまり呼びたくないなぁの想い
ところで: 正常系以外のハンドリング • 準正常系の扱い ◦ 処理中断ではなく正当な結果の一部として扱いたい ◦ 実例が基盤寄りシステムなので準正常系は結構ありそう ▪ fillInStackTraceあんまり呼びたくないなぁの想い
• その上あまり役に立たないし ▪ こちらはそこまで気にしなくてよいかも ◦ Result型定義して対応しました ▪ 処理の戻りはUni<Result<E>>とかSingle<Result<E>>
ところで: 正常系以外のハンドリング • 準正常系 ◦ Result.Failureで扱う • 異常系 ◦ 失敗系パイプライン(例外)で扱う
ところで: 正常系以外のハンドリング • 準正常系 ◦ Result.Failureで扱う • 異常系 ◦ 失敗系パイプライン(例外)で扱う
体感楽かなとは思います
閑話休題
ざっくり実装例 • イメージを掴んでもらえれば
ざっくり実装例 • 処理側 ◦ 会員を退会させてみる ▪ 退会可能(有効)? ▪ 未払い? •
Quarkus(Mutiny) 実プロダクトでは 状態遷移のインスタンスメソッド実装は禁止 (遷移先クラスのstatic factoryに定義する)なんですが 今回は例なので……
ざっくり実装例 • 処理側 ◦ 会員を退会させてみる ▪ 退会可能(有効)? ▪ 未払い? •
Vert.x(RxJava)
ざっくり実装例 • 処理側 ◦ 会員を退会させてみる ▪ 退会可能(有効)? ▪ 未払い? •
Spring WebFlux(Project Reactor)
というわけで • どのF/Wも似たような感じで実現可能 ◦ リアクティブ実装の処理から判断を呼ぶ流れ ◦ 判断はブロッキング処理で実装
ちなみに実際のプロダクトはこんな感じでした • 2026/04 リリース ◦ 安定稼働中✌ • Kotlin 2.3.10 (Java25)
• Quarkus(Mutiny) • 全エントリポイントリアクティブ ◦ 要請というより判断削減 • プロダクト内のメンバーへの実装依頼 ◦ レビューがめちゃくちゃ楽でした • 現在チーム外への実装依頼中 ◦ ここもうまく乗っかってもらえると期待
余談 • ゼロ・オーガニックコード • detektルール実装(現在27) ◦ 判断ミスを減らす • 観点別LLM並列レビュー ◦
先にレビュー観点を作る ◦ 型化したところからdetektに逃がした
まとめ • リアクティブCleanは実現可能(少なくとも今はできている) • 非同期処理をスコープ管理しましょう ◦ 今回の例では業務判断は同期、それ以外は非同期 ◦ そうでなくても最初に線を引きましょう
ありがとうございました