Moduliths
Oliver Drotbohmさんのセッション「Building Better Monoliths: Implementing Modulithic Applications with Spring」では、昨今のMSA偏重な風潮に疑問を投げかけ、より良いモノリシックアプリケーションの開発を支援するModulithsというライブラリを紹介していました。
モノリシックなアプリケーションは開発当初の設計思想が時間の経過とともに失われ、徐々に複雑な依存関係を形成することで変更が難しくなってしまう短所があると言われています。一方で、MSAにはサービスを跨いだリファクタリングがし難いこと、結合テストが難しいことなどが挙げられます。Modulithsはこれらの短所を補う仕組みを提供しています。
Modulithの提供する規約と機能(Spring by Pivotalの「Building Better Monoliths: Implementing Modulithic Applications with Spring」より引用)
Modulithsを利用する前提として、従来のドメイン層、サービス層、リポジトリ層といった役割別にパッケージを構成するのではなく、機能ごとにパッケージ分割を行います。その上で他のモジュールに公開するAPIと非公開のAPIを分けて配置するという規約を適用し、依存関係を管理しやすくしています。
Modulithの規約に従って公開APIと非公開APIを配置する必要がある(Spring by Pivotalの「Building Better Monoliths: Implementing Modulithic Applications with Spring」より引用)
これはあくまで規約であり、コンパイラによる違反の検出はできません。そのため、Modulithsでは規約のテスト用のアノテーションとして@ModuleTestを提供しています。Spring Bootはテスト用のアノテーションとして@WebMvcTestや@DataJpaTestなど、ドメイン層、リポジトリ層など“水平レイヤ”に対するテストをするためのアノテーションを提供していますが、@ModuleTestを利用することでモジュール分割された“垂直レイヤ”に対するテストが可能となります。
セッションの中のデモでは実際に@ModuleTestを使用したテストを実施し、依存関係の分析結果の表示や、モジュール間の依存関係における規約違反の検出が可能なことを示していました。
現状、Modulithsは実験的なプロジェクトで、ドイツのDresden大学と共同で研究中とのことです。なお、“Moduliths”という言葉については、Oliver Drotbohmさんは「他に良い名前を付けることができず、“Moduliths”と呼んでいる」とも述べていました。
セッションの中で、Oliver DrotbohmさんはModulithsがSpringの公式プロジェクトとなる可能性があることにも言及していました。Modulithsは、MSAに代わるモダンなアプリケーションの構築手法の一つとして、これからの動向が楽しみです。
DX事例
SpringOneでは技術者によるセッションのみならず、ユーザー企業による最新技術の適用事例も数多く紹介されています。適用事例の一つの大きなテーマはデジタルトランスフォーメーション(以下、DX)です。こうした事例には、企業の取組として総括的にDX事例を紹介しているものや、テスト等の特定の技術テーマに絞って紹介しているもの等のさまざまなセッションがあり、必要となる技術トピックやマインドセットを紹介してくれました。総括的なDX事例では、主にビジネスにおけるアジリティを高めることを目的として、マイクロサービスアーキテクチャ、クラウドネイティブ、CI/CD、リーン開発などをどうのように企業に浸透させたか、また適用した効果を説明したものが多数ありました。
ここでは、ディスカバー・フィナンシャル・サービシズ社(以下、DFS社)の事例を紹介します。DFS社では元々ビジネスセクションごとに分かれていた開発チームを1つにまとめた結果、当初こそ生産性向上効果が生まれたものの、プラットフォームやプロセスが旧態のままであったためにこうした効果はすぐに頭打ちになってしまったそうです。そこで、Pivotal Labsの力を借りて目指すアーキテクチャのビジョンを定義し、ストラングラーパターンによって徐々にモダナイゼーションを計画しました。さらに、開発メンバーのスキル向上やCI/CDパイプラインの整備といった改善も実施したそうです。
こうした一連のモダナイゼーションの結果として、「プロダクトの企画からリリースまでの期間が16-52週間から4-16週間になった」「顧客との意識祖語による問題の発生率が4.7%から2.0%になった」といった効果が表れ、特に顧客との意識祖語の減少が生産性向上の観点で非常に重要であったと語ってくれました。また、定性的な効果としてはエンジニアが夜勤で環境構築することがなくなった点にふれて、これが生産性にもよい効果をもたらしていると説明してくれました。
国内の事例としては、SBペイメントサービスのPivotal Application Service(PAS)を用いた決済システム構築に関する講演を紹介します。
開発サイクルの高速化、継続的な改善、そして監視が容易かつ高い耐障害性を持つシステムを実現するために、当初外注していたシステム開発を内製化するに至るまでの道のりを説明されていました。システム基盤としてはPASを活用しており、講演内では開発/ステージング/商用環境の使い分け方法、監視システムにおける運用負荷低減のためのさまざまな工夫や徹底的なテストによる品質向上について解説がされていました。システムの状態を常に監視することで障害の予兆を検知できるようにしており、実際にサービスの応答速度が遅くなっていることから原因が他システムのDBMSであることを突き止めて修正依頼をした、という事例も紹介されていました。聴講者の関心も非常に高く、リアルタイム処理/バッチ処理のどちらで実現しているのか、セキュリティをどう担保しているのかといった技術的な質問から、このシステムは外販可能かというビジネス的な質問まで活発な質疑応答が行われていました。
おわりに
以上、SpringOne Platform 2019のハイライトをレポートしてきました。セッションはキーノートを含めてすべてYouTubeで動画が公開されているので、本稿で興味を持ったセッションはこちらでチェックしてみてください。来年のSpringOneは9月21日からシアトルで開催される予定です。カンファレンスへの参加もぜひ検討してみてください。
2020年はシアトルで開催されることがアナウンスされた
