レガシーAPIを
Webアプリケーション基盤へモダナイズ
Windows / COMを前提としたレガシーAPIと独自データ配信方式を、ブラウザから利用できるWebアプリケーションとして再構築しました。既存サービスそのものを置き換えるのではなく、レガシーインターフェースを抽象化し、型付きアダプター、ドメインモデル、REST APIという境界を設けることで、Reactを利用したモダンなWebアプリケーションから利用できる構成へ変換しています。
レガシーを捨てるのではなく、境界を設計して再利用可能にする。
The Transformation
レガシー依存は、全体へ広がるのではなく、境界の内側に閉じ込められる。
↔ 横にスクロールして図全体をご覧いただけます。
図を文章で読む
Windows Runtime、COM Object、独自データコンテナ、Vendor APIの依存を境界で扱い、Vendor APIからF# Adapter、Domain Model、REST API、React Applicationへつなぎます。AdapterはWindows / COMとの接点を担い、ブラウザ側へその依存を漏らしません。概念上の責務と接続を示します。
Background
価値のあるデータが、古いインターフェースに閉じ込められている。
対象となった外部データサービスは、長年蓄積された豊富なデータと機能を持つ一方、その利用方法はWindows上のCOMオブジェクトと独自データ形式を前提としていました。
- 特定OSへの依存
- COM固有のインターフェース
- 独自データコンテナ
- ブラウザからのアクセスが困難
- アプリケーションコードとベンダーAPIの密結合
- モダンなWeb / API開発との相性の悪さ
- 利用者側にベンダー固有の知識を要求する
顧客は、これらの機能をブラウザベースのアプリケーションから利用できるようにしたいと考えていました。
Modernization Strategy
既存システムを書き換えず、その外側に新しい境界をつくる。
外部のレガシーシステムそのものを書き換えることはできませんでした。そこで、ベンダー固有のインターフェースと新しいアプリケーションの間に、抽象化層・腐敗防止層を導入しました。
↔ 横にスクロールして図全体をご覧いただけます。
図を文章で読む
Legacy SystemとModern Applicationsの間に、Typed Adapter、Domain Model、REST APIからなるIntegration Boundaryを設けます。
モダナイゼーションは、常に既存システムの置き換えを意味するわけではない。時には、レガシーシステムへの依存を堅牢な境界の内側へ封じ込めることの方が、より良い解決策になる。
Typed F# Adapter
ベンダー固有APIを、型のあるドメインAPIへ。
基盤となるF#アダプターとREST化の技術は、CoRISE技術顧問による先行開発を活用しています。CoRISEはこの技術資産を用い、顧客向けWebアプリケーションの設計・開発と統合を担当しました。
このアダプターは、レガシーCOMインターフェースを包み、より構造化されたF# APIとして公開しました。目的は次の通りです。
- COM固有の呼び出しを隔離する
- ベンダー固有のデータ表現を隠蔽する
- 外部データをドメイン指向の型へ変換する
- 型システムを通じて有効な状態を表現する
- アプリケーションロジックをレガシー実装の詳細から分離する
↔ 横にスクロールして図全体をご覧いただけます。
図を文章で読む
COM APIをF# Adapterで包み、Typed Domain Modelへ変換します。
Anti-Corruption Layer
レガシーなモデルを、アプリケーション全体へ漏らさない。
Without Boundary
↔ 横にスクロールして図全体をご覧いただけます。
- High coupling
- Vendor semantics spread through the application
- Difficult testing / replacement
- Difficult Web integration
図を文章で読む
Frontend / ApplicationがCOM、ベンダー固有の型、独自データへ直接依存します。
With Boundary
↔ 横にスクロールして図全体をご覧いただけます。
- Isolated dependency / clearer ownership
- Testable application layer
- Reusable API
- Easier future migration
図を文章で読む
Vendor SystemからAdapter、Domain Model、Application APIを経てFrontendへ接続します。
この境界は、ドメイン駆動設計における腐敗防止層という概念に基づいています。
REST API Modernization
ローカルAPIを、ネットワーク越しに利用できるサービスへ。
↔ 横にスクロールして図全体をご覧いただけます。
図を文章で読む
COM APIをF# AdapterとDomain Modelで変換し、REST APIをHTTP / JSONで利用できるようにします。
REST層は、単なるCOMからHTTPへの機械的なプロキシではありませんでした。次を備えた、安定したアプリケーション境界を導入しました。
- リクエストモデル
- レスポンスモデル
- ドメインへの変換
- エラー処理
- APIの境界
- フロントエンドの関心事とレガシー詳細の分離
目標は、レガシーの実装モデルを露出させることなく、モダンなクライアントから利用可能なシステムにすることでした。
Web Application
レガシーなデータを、ブラウザから使えるプロダクトへ。
CoRISEは、モダナイズされたAPIを利用して、顧客向けのReactアプリケーションを構築しました。フロントエンドはREST APIを通常のWebクライアントとして利用するだけで、次を理解する必要はありません。
- COM
- Windows固有の呼び出し
- 独自データコンテナの挙動
- ベンダー固有のAPI構造
Reactは実装上の選択の一つであり、本質はアーキテクチャのモダナイゼーションです。
ブラウザベースのアクセス
独立したフロントエンドの進化
UI / UXの柔軟性
容易な統合
将来の追加クライアント
責務の明確な分離
Architecture Diagram
レガシーシステムから境界を介し,再利用可能な機能へ。
↔ 横にスクロールして図全体をご覧いただけます。
図を文章で読む
外部Legacy Data ServiceのCOM / 独自データをLegacy Boundaryで扱い、F# Adapter、Domain Model、REST APIへ接続します。React Web AppはNetwork / API Boundaryを越えてAPIを利用します。Future Clientsは将来の拡張先であり、この事例で実装済みのクライアントを表しません。AdapterによるCOM連携にはWindows側の実行環境が引き続き必要です。
Before / After
デスクトップ依存の統合から、再利用可能なサービスへ。
Before
Windows-bound Integration
↔ 横にスクロールして図全体をご覧いただけます。
- COM dependency
- Proprietary data representation
- Desktop-oriented access
- Client code coupled to vendor API
- Difficult Web access
図を文章で読む
Client CodeがVendor API / COMへ直接依存し、ブラウザから利用する経路がありません。
After
Reusable Service Boundary
↔ 横にスクロールして図全体をご覧いただけます。
- Legacy dependency isolated
- Typed adapter / explicit domain model
- REST API boundary
- Browser-based application
- Reusable service interface / future-client extensibility
図を文章で読む
Browser ApplicationはREST API Boundary経由で、隔離されたLegacy Dependencyを利用します。
Attribution & Reuse
先行技術を、顧客価値へつなげる。
基盤となるF#ラッパーとREST化技術は、CoRISE技術顧問が独立した技術プロジェクトとして開発したものです。CoRISEはこの技術資産と専門知識を活用し、顧客向けアプリケーションを構築しました。
個人や組織に蓄積された技術的な知識を、再利用可能な技術として顧客価値へ変える。
↔ 横にスクロールして図全体をご覧いただけます。
図を文章で読む
技術顧問による独立した先行開発をReusable Capabilityとして活用し、CoRISEのCustomer Projectを通じてProduct Valueへつなぎます。
What This Case Demonstrates
この事例が示すもの。
- 01
Legacy API Modernization
既存資産の価値を維持しながら、モダンなアーキテクチャへ接続する。
- 02
Anti-Corruption Layer
外部システム固有のモデルやAPIをアプリケーション全体へ漏らさない。
- 03
Typed Integration
型を利用してレガシーインターフェースを扱いやすいドメインモデルへ変換する。
- 04
API Modernization
ローカル・デスクトップ中心のインターフェースをサービスAPIへ変換する。
- 05
Product Engineering
統合だけで終わらず、最終的にユーザーが利用するWebアプリケーションへつなげる。
CoRISE Contribution
CoRISEが担当したこと
Product Engineering
- 顧客要件の整理
- Webアプリケーション設計
- Reactフロントエンド開発
- API統合
- 利用者体験の実装
Architecture & Integration
- レガシーアダプターの設計の活用
- REST APIを介したフロントエンド / バックエンド分離
- レガシーインターフェースとWebアプリケーションの境界設計
- ドメインモデルとアプリケーションモデルの接続
Technical Advisory
- レガシーCOM統合の専門知識
- F#アダプターの専門知識
- REST API化の知識
- レガシーAPI刷新の設計
基盤となるアダプター技術はあらかじめ存在しており、CoRISEはその技術を顧客プロジェクトへ持ち込み、アプリケーションの提供と統合を担当しました。
Technologies
- Type
- Legacy API Modernization
- Legacy Interface
- COM / Proprietary Data Container
- Adapter
- F#
- Domain Layer
- Typed Domain Model
- API
- REST / HTTP / JSON
- Frontend
- React / TypeScript
- Pattern
- Anti-Corruption Layer / Adapter
Outcome
レガシー技術を、制約ではなく再利用可能な資産へ。
この取り組みでは、価値のある既存データサービスを置き換えるのではなく、レガシーインターフェースをアダプターの内側へ隔離しました。その結果、既存資産を維持しながら、Web、API、将来のアプリケーションから利用できるアーキテクチャへ移行できました。
古いものを新しいものへ置き換えたのではなく、古いものと新しいものの間に、長く使える境界を設計した。