ドメイン駆動設計の次のステップは?──「アプリケーションシンプリファイ」と「アジャイルアプローチ」
ドメイン駆動設計の次のステップを見ていこう。まずはアプリケーションシンプリファイだ。かつては既存のレガシーシステムが抱える技術的負債を出発点として、ルール駆動開発を行っていた。このテーマは2020年と2021年のDevelopers Summitで発表した内容なので今回は割愛する。興味があれば資料を参照してほしい。
現在ではアプリケーションシンプリファイへと手法が昇華している。まず「Clarify」であえて既存のソースコードを見ず、現行のビジネスプロセスの中核からビジネスロジックモデルを洗い出していく。次に「(Over)Simplify」で洗い出したビジネスロジックだけをシンプルアプリケーションとして実装する。そして「Satisfy」では新旧システムの両方で処理した結果を比較して、枝を実装していく。新旧の一致率(品質)が満足いくものになるまで、比較と実装を繰り返していくという流れになる。
「Clarify」では「あえてソースコードを見ない」のが大きなポイントだ。ある程度成熟したビジネスを例として考える。典型的な顧客は75%で、その顧客をカバーするソースコードの割合は25%、それ以外の顧客を含めても使われているソースコードは全体の40%だったとする。もし利用するコードが40%しかないと最初からわかっていたら、ソースコードすべてに目を通す必要があるだろうか。まずは主要な顧客を広くカバーする25%のコードを開発して、後で足りない部分15%(とはいえ実際この15%は目に見えない)を追加していこうという考え方が重要になる。
続いて、アジャイルアプローチが必要な場合に進もう。多くの役員は「成長過程のビジネスが既存顧客や基幹システムのデータにアクセスできたらシナジーが生まれるのでは」と期待する。そこで新システムのSoEは、レガシーシステムのSoRのデータベースに直接アクセスするか、APIでアクセスしたいと要請する。大抵は交渉が難航し、折衷案としてSoRのデータを非同期でSoEに渡すことになる。これでは鮮度の悪いデータが社内に共有されてしまう。
ここでは、レガシーシステムと新システムをクラウドネイティブにつなげることが求められる。このテーマはレッドハットが提供している「マイクロサービスEssential」や「Integration Dojo(インテグレーション錬成道場)」といったワークショップで詳しく学ぶことができる。
レガシーシステムとクラウドネイティブなシステムの適切な接続や、シンプルなアプリケーションを開発が実現されると、モダナイズは最終形に近づいてくる。新旧どちらのシステムも同じデータ基盤上に乗り、疎結合に相互に連携できて、ビジネス的な効果も出せる状態だ。
アジャイルアプローチではマイクロサービスにとらわれず、システム間の接続の方法に注力した方が良い。また、マイクロサービス化を一気にやろうとすると、ウォーターフォールな手法で分割することが目的になってしまいがちだ。暮林氏は「ドメイン駆動設計を駆使して都合よく切れる場所を判断し、切っては繋ぐことを繰り返していくのがいいです」と推奨する。
またアジャイルアプローチはアジャイル開発を含むものの、アジャイルそのものではないことも気をつけておきたい。もしアジャイルのレベルを高めたいのであれば、レッドハットが提供する「Open Innovation Labs」というハイエンドなアジャイル支援サービスを検討してもいいだろう。
最後にそれぞれの手法を活用する段階を補足しておこう。「自分がどこにいるのか分からない」というモダナイズの超初期にドメイン駆動設計を使う。次に新規をどう接続するかを考える時にアジャイルアプローチを使い、これを念頭におきながらアプリケーションシンプリファイを進めていく。
暮林氏は「それぞれのアプローチは必要とされるピークの段階が違いますが、ピークを超えたらやらなくてもいいのではなく、ピーク時にやらないと手遅れになると考えてください。モダナイゼーションの段階に応じて効果的なものを実践していきましょう」と呼びかけて講演を締めた。