副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー by Koya Masuda

BuriKaigi 2026
採択
2026/01/09 14:20〜
Room 202
レギュラー

副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー

koxya Koya Masuda koxya
2

【テーマ】
アプリケーション設計において、「この処理はどこに置くべきか?」という問いは常につきまといます。
特にオブジェクト指向言語では、クラスやオブジェクトが自由に設計できる反面、責務と状態の境界が曖昧になりやすく、気づけば副作用があちこちに散らばります。
一度拡散した副作用は、バグやテストの不安定さを呼び、まるで割れ窓理論のように保守性の低下を加速させます。

本テーマでは、オブジェクト指向設計の原則(単一責務・不変条件・副作用の分離)に立ち返り、
「コールバック・イベント・非同期処理といった選択肢の中で、どのように責務と状態の境界を見極めるか」を体系的に整理します。
具体的な設計判断の基準と、現場で使える“判断ツリー”を共有することで、日々の開発における「処理をどこに置くか問題」に自信を持って向き合えるようになることを目指します。

【想定する参加者層】

  • オブジェクト指向プログラミングの基礎(クラス・責務・状態)を理解している方
  • 何らかのオブジェクト指向言語(Ruby / Java / PHP / Python / TypeScriptなど)で業務アプリケーションを開発している方
  • ミドル〜シニア層のエンジニア(コード設計やレビューを担う人)

※発表者はRailsエンジニアであり、サンプルコードはRubyで示しますが、設計原則は言語・フレームワークを問わず応用可能です。

【トーク概要】
「コールバックに書くべき?」「イベントに切るべき?」「非同期に逃がすべき?」
日々の開発で誰もが悩む“副作用をどこに置くか問題”に悩むかと思います。この判断をセンスや慣習に頼らず、オブジェクト指向設計の原則に基づいて整理するのが本トークの目的です。
副作用を

  1. エンティティ内部の不変条件を守る処理(DB内で完結)
  2. 状態確定後の通知(他の関心へ伝える)
  3. 外部I/Oや重い処理(非同期・再試行を前提とする)

という3層に分類し、それぞれをコールバック/ドメインイベント/非同期ジョブに対応づけた「設計判断ツリー」を提示します。
また、現場で陥りがちなアンチパターンとして

  • コールバックが連鎖して依存が見えなくなる
  • 順序依存で動作が壊れる
  • ロールバック後に外部I/Oが発火してしまう

といった問題を、責務と状態の境界設計の観点から分解します。実際のコード例(Rubyで示します)を通じて、「副作用をどこに置くべきか」を説明できるようになることを目指します。