Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
業務アプリケーションでリアクティブ化するところ、しないところ
Search
Nealle
May 30, 2026
Technology
130
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
ASTを使って影響範囲を特定する
nealle
0
220
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
1
320
Claude Codeによるデータ分析の民主化とそれを支えるデータ基盤
nealle
1
190
Product Engineering Conference 2026の ご案内
nealle
0
410
AllCompanyDeck_old.pdf
nealle
0
150
職種の境界を染み出しあう品質保証 - PdEがテストへ、QAが上流へ、AIとともに
nealle
0
280
どうして今サーバーサイドKotlinを選択したのか
nealle
0
350
電話を武器に変える Amazon Connect 活用の全貌
nealle
0
7.1k
Nealle Company Deck
nealle
0
360
Other Decks in Technology
See All in Technology
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
320
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
210
調査タスクをAIと乗り切る 〜過去の調査をナレッジ化し 調査手順をスキルにする〜
mot_techtalk
1
120
自主式軟體工廠
philipz
0
220
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
310
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
1
130
The seven pitfalls of AI (revised version)
ufried
0
260
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
150
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
280
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
160
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
530
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
550
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Ruling the World: When Life Gets Gamed
codingconduct
0
380
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
550
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Embracing the Ebb and Flow
colly
88
5.2k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
860
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
350
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
Scaling GitHub
holman
464
140k
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は実現可能(少なくとも今はできている) • 非同期処理をスコープ管理しましょう ◦ 今回の例では業務判断は同期、それ以外は非同期 ◦ そうでなくても最初に線を引きましょう
ありがとうございました