Upgrade to Pro — share decks privately, control downloads, hide ads and more …

業務アプリケーションでリアクティブ化するところ、しないところ

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 業務アプリケーションでリアクティブ化するところ、しないところ

2026/5/30
https://ccc2026spring.java-users.jp/
JJUG CCC 2026 Spring

Avatar for Nealle

Nealle

May 30, 2026

More Decks by Nealle

Other Decks in Technology

Transcript

  1. はじめに • 実例、実際のお悩みベースです ◦ 正解をお出しできているかは不明です ◦ これからお話しする方法で今はイケています ◦ イベント駆動化はしていません ▪

    する可能性は想定している、位です • 今回しないお話 ◦ リアクティブアプリケーションそのもののお話 ◦ Clean系そのもののお話
  2. リアクティブ業務アプリのサクっと答えが出てこない話 • 全部リアクティブ ◦ Pros ▪ 発想はシンプル ▪ I/O境界からユースケースまで流れが一貫する ▪

    ブロッキング混入を発見しやすい ◦ Cons ▪ 記述量がやたら増える • 業務知識の読み取りが大変 ▪ メンバー全員がリアクティブ読み書き必須に
  3. 業務処理のうち、業務判断を切り出してみる • 業務処理 ◦ 受け取った情報、あるいは処理開始時のコンテキストに対して ▪ 足りない情報を外部から補足する ▪ 既にある情報から何らかの値や結論を導き出す •

    業務知識が一番乗ってくるのがココと仮説 ◦ ここが同期で書かれていれば読みやすそう ▪ 業務を遂行する • 何かを記録する • 外部に値や結論を発信・返答する
  4. 業務判断をブロッキング化する • ドメインサービスは? ◦ 松: 判断か一連の処理かでブロッキング・リアクティブの2種類 ▪ 筋としては正当 ▪ モデルを跨いだ処理は後から外部依存が発生しがち

    • I/Fが変わると変更時がちょっと大変かもと思った ◦ 竹: 妥協して全部非同期 ▪ 設計上の考慮点を減らす • LLMベース実装を考慮に入れると無視できない
  5. ところで: 正常系以外のハンドリング • リアクティブフレームワークの基本機能 ◦ 失敗系 ▪ エラー検出・通知 ▪ リトライ

    ▪ リカバリ ◦ 例外を失敗系に流してくれる機能 ◦ いわゆる業務エラー(準正常系)をこれに乗せる?
  6. ところで: 正常系以外のハンドリング • リアクティブフレームワークの基本機能 ◦ 失敗系 ▪ エラー検出・通知 ▪ リトライ

    ▪ リカバリ ◦ 例外を失敗系に流してくれる機能 ◦ いわゆる業務エラー(準正常系)をこれに乗せる? ▪ 乗せませんでした
  7. ところで: 正常系以外のハンドリング • 準正常系の扱い ◦ 処理中断ではなく正当な結果の一部として扱いたい ◦ 実例が基盤寄りシステムなので準正常系は結構ありそう ▪ fillInStackTraceあんまり呼びたくないなぁの想い

    • その上あまり役に立たないし ▪ こちらはそこまで気にしなくてよいかも ◦ Result型定義して対応しました ▪ 処理の戻りはUni<Result<E>>とかSingle<Result<E>>
  8. ざっくり実装例 • 処理側 ◦ 会員を退会させてみる ▪ 退会可能(有効)? ▪ 未払い? •

    Quarkus(Mutiny) 実プロダクトでは 状態遷移のインスタンスメソッド実装は禁止 (遷移先クラスのstatic factoryに定義する)なんですが 今回は例なので……
  9. ちなみに実際のプロダクトはこんな感じでした • 2026/04 リリース ◦ 安定稼働中✌ • Kotlin 2.3.10 (Java25)

    • Quarkus(Mutiny) • 全エントリポイントリアクティブ ◦ 要請というより判断削減 • プロダクト内のメンバーへの実装依頼 ◦ レビューがめちゃくちゃ楽でした • 現在チーム外への実装依頼中 ◦ ここもうまく乗っかってもらえると期待