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
98
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
_AllCompanyDeck.pdf
nealle
0
12
product engineering with qa
nealle
0
140
どうして今サーバーサイドKotlinを選択したのか
nealle
0
190
電話を武器に変える Amazon Connect 活用の全貌
nealle
0
17
Nealle Company Deck
nealle
0
110
TypeScriptとAngular Signal で実現する保守性の高いアプリケーション設計 - 3層アーキテクチャによる責務分離の実践(たつかわ) https://2026.tskaigi.org/talks/10
nealle
1
430
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
340
3つのボトルネックを解消し、リリースエンジニアリングを再定義した話
nealle
0
1.4k
JDDUG#15 DataDogで行うバッチ改善
nealle
0
130
Other Decks in Technology
See All in Technology
依頼文化をやめる日 EM視点で語るPlatform EngineeringとInclusive SRE / Discussing Platform Engineering and Inclusive SRE from an EM's Perspective
shin1988
1
240
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
170
トークン最適化のためのユーザーストーリー分析 / User Story Analysis for Token Optimization
oomatomo
0
160
AI駆動開発におけるQAエンジニアの役割事例 〜AI駆動開発の現場から〜
kobayashiyorimitsu
0
290
AIエージェントとPhysical AIが拓く製造業の変革(ハノーバーメッセリキャップ)
iotcomjpadmin
0
210
Agentic AI 時代のテスト手法: Kiro とはじめるプロパティベーステスト (AWS Summit Japan 2026 | DEV212)
ymhiroki
0
200
5分でわかるDuckDB Quack
chanyou0311
4
310
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
150
組織における AI-DLC 実践
askul
0
300
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
420
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
490
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
190
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
270
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Agile that works and the tools we love
rasmusluckow
331
22k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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は実現可能(少なくとも今はできている) • 非同期処理をスコープ管理しましょう ◦ 今回の例では業務判断は同期、それ以外は非同期 ◦ そうでなくても最初に線を引きましょう
ありがとうございました