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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Nealle
May 30, 2026
Technology
140
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
Running Kotlin + Quarkus with Lambda
nealle
0
8
ASTを使って影響範囲を特定する
nealle
0
220
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
2
420
Claude Codeによるデータ分析の民主化とそれを支えるデータ基盤
nealle
1
190
Product Engineering Conference 2026の ご案内
nealle
0
420
AllCompanyDeck_old.pdf
nealle
0
150
職種の境界を染み出しあう品質保証 - PdEがテストへ、QAが上流へ、AIとともに
nealle
0
280
どうして今サーバーサイドKotlinを選択したのか
nealle
0
360
電話を武器に変える Amazon Connect 活用の全貌
nealle
0
7.1k
Other Decks in Technology
See All in Technology
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
890
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
The seven pitfalls of AI (revised version)
ufried
0
310
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
360
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
350
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
220
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
370
LocalStack を使ったサーバーレスアプリケーション開発 / Serverless Development with LocalStack
kakakakakku
1
340
Codex概要
ymiya55
0
490
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
1.8k
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
110
go-sqletch
moznion
0
120
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
How to build a perfect <img>
jonoalderson
1
6.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Tell your own story through comics
letsgokoyo
1
1.1k
Making the Leap to Tech Lead
cromwellryan
135
10k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The agentic SEO stack - context over prompts
schlessera
0
970
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
470
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は実現可能(少なくとも今はできている) • 非同期処理をスコープ管理しましょう ◦ 今回の例では業務判断は同期、それ以外は非同期 ◦ そうでなくても最初に線を引きましょう
ありがとうございました