本文へスキップ
CoRISE
CASE / 05Architecture & Modernization · Product Engineering

レガシーAPIを
Webアプリケーション基盤へモダナイズ

Windows / COMを前提としたレガシーAPIと独自データ配信方式を、ブラウザから利用できるWebアプリケーションとして再構築しました。既存サービスそのものを置き換えるのではなく、レガシーインターフェースを抽象化し、型付きアダプター、ドメインモデル、REST APIという境界を設けることで、Reactを利用したモダンなWebアプリケーションから利用できる構成へ変換しています。

レガシーを捨てるのではなく、境界を設計して再利用可能にする。

レガシー依存は、全体へ広がるのではなく、境界の内側に閉じ込められる。

↔ 横にスクロールして図全体をご覧いただけます。

Legacy依存を閉じ込めるIntegration BoundaryWindows Runtime、COM Object、独自データコンテナ、Vendor APIの依存を境界で扱い、Vendor APIからF# Adapter、Domain Model、REST API、React Applicationへつなぎます。AdapterはWindows / COMとの接点を担い、ブラウザ側へその依存を漏らしません。概念上の責務と接続を示します。LEGACY SIDE — CONTAINEDMODERN SIDE — EXTENSIBLEINTEGRATION BOUNDARYWINDOWS RUNTIMECOM OBJECTPROPRIETARY DATA CONTAINERVENDOR-SPECIFIC APIF# ADAPTERDOMAIN MODELREST APIREACT APPLICATION
図 01 — Legacy SideはIntegration Boundaryの内側に閉じ込められ、Modern Sideを独立して拡張できる

価値のあるデータが、古いインターフェースに閉じ込められている。

対象となった外部データサービスは、長年蓄積された豊富なデータと機能を持つ一方、その利用方法はWindows上のCOMオブジェクトと独自データ形式を前提としていました。

顧客は、これらの機能をブラウザベースのアプリケーションから利用できるようにしたいと考えていました。

既存システムを書き換えず、その外側に新しい境界をつくる。

外部のレガシーシステムそのものを書き換えることはできませんでした。そこで、ベンダー固有のインターフェースと新しいアプリケーションの間に、抽象化層・腐敗防止層を導入しました。

↔ 横にスクロールして図全体をご覧いただけます。

既存システムの外側に設けた抽象化層Legacy SystemとModern Applicationsの間に、Typed Adapter、Domain Model、REST APIからなるIntegration Boundaryを設けます。INTEGRATION BOUNDARYCOM / PROPRIETARYLEGACY SYSTEMTYPED ADAPTERDOMAIN MODELREST APIMODERNAPPLICATIONS
図 02 — Legacy System → Integration Boundary(Typed Adapter → Domain Model → REST API)→ Modern Applications

モダナイゼーションは、常に既存システムの置き換えを意味するわけではない。時には、レガシーシステムへの依存を堅牢な境界の内側へ封じ込めることの方が、より良い解決策になる。

ベンダー固有APIを、型のあるドメインAPIへ。

基盤となるF#アダプターとREST化の技術は、CoRISE技術顧問による先行開発を活用しています。CoRISEはこの技術資産を用い、顧客向けWebアプリケーションの設計・開発と統合を担当しました。

このアダプターは、レガシーCOMインターフェースを包み、より構造化されたF# APIとして公開しました。目的は次の通りです。

↔ 横にスクロールして図全体をご覧いただけます。

COM APIを型付きDomain Modelへ変換するCOM APIをF# Adapterで包み、Typed Domain Modelへ変換します。COM APIF# ADAPTERTYPEDDOMAIN MODEL
図 03 — COM API → F# Adapter → Typed Domain Model

レガシーなモデルを、アプリケーション全体へ漏らさない。

↔ 横にスクロールして図全体をご覧いただけます。

境界のない直接依存Frontend / ApplicationがCOM、ベンダー固有の型、独自データへ直接依存します。DIRECT DEPENDENCYFRONTEND / APPLICATIONCOM / VENDOR TYPES /PROPRIETARY DATA
Without Boundary — Vendor APIへの直接依存

この境界は、ドメイン駆動設計における腐敗防止層という概念に基づいています。

ローカルAPIを、ネットワーク越しに利用できるサービスへ。

↔ 横にスクロールして図全体をご覧いただけます。

COMからRESTへの変換COM APIをF# AdapterとDomain Modelで変換し、REST APIをHTTP / JSONで利用できるようにします。COM APIF# ADAPTERDOMAIN MODELREST APIHTTP / JSON
図 04 — COM API → F# Adapter → Domain Model → REST API → HTTP / JSON

REST層は、単なるCOMからHTTPへの機械的なプロキシではありませんでした。次を備えた、安定したアプリケーション境界を導入しました。

目標は、レガシーの実装モデルを露出させることなく、モダンなクライアントから利用可能なシステムにすることでした。

レガシーなデータを、ブラウザから使えるプロダクトへ。

CoRISEは、モダナイズされたAPIを利用して、顧客向けのReactアプリケーションを構築しました。フロントエンドはREST APIを通常のWebクライアントとして利用するだけで、次を理解する必要はありません。

  • COM
  • Windows固有の呼び出し
  • 独自データコンテナの挙動
  • ベンダー固有のAPI構造

Reactは実装上の選択の一つであり、本質はアーキテクチャのモダナイゼーションです。

  • ブラウザベースのアクセス

  • 独立したフロントエンドの進化

  • UI / UXの柔軟性

  • 容易な統合

  • 将来の追加クライアント

  • 責務の明確な分離

レガシーシステムから境界を介し,再利用可能な機能へ。

↔ 横にスクロールして図全体をご覧いただけます。

LegacyサービスからReactと将来クライアントまでの全体構成外部Legacy Data ServiceのCOM / 独自データをLegacy Boundaryで扱い、F# Adapter、Domain Model、REST APIへ接続します。React Web AppはNetwork / API Boundaryを越えてAPIを利用します。Future Clientsは将来の拡張先であり、この事例で実装済みのクライアントを表しません。AdapterによるCOM連携にはWindows側の実行環境が引き続き必要です。COM / PROPRIETARY DATAMODERN APPLICATION BOUNDARYNETWORK / API BOUNDARYFUTURE EXTENSION POINTEXTERNAL LEGACY DATA SERVICELEGACY BOUNDARYF# ADAPTERDOMAIN MODELREST APIREACT WEB APPFUTURE CLIENTS
図 05 — External Legacy Data Service → Legacy Boundary → F# Adapter → Domain Model → REST API → React Web App / Future Clients

デスクトップ依存の統合から、再利用可能なサービスへ。

Windows-bound Integration

↔ 横にスクロールして図全体をご覧いただけます。

デスクトップ中心の密結合Client CodeがVendor API / COMへ直接依存し、ブラウザから利用する経路がありません。NO BROWSER PATHCLIENT CODEVENDOR API / COMdesktop-oriented, tightly coupled
Before — Windows-bound Integration

先行技術を、顧客価値へつなげる。

基盤となるF#ラッパーとREST化技術は、CoRISE技術顧問が独立した技術プロジェクトとして開発したものです。CoRISEはこの技術資産と専門知識を活用し、顧客向けアプリケーションを構築しました。

個人や組織に蓄積された技術的な知識を、再利用可能な技術として顧客価値へ変える。

↔ 横にスクロールして図全体をご覧いただけます。

先行技術資産を顧客プロジェクトへ再利用する技術顧問による独立した先行開発をReusable Capabilityとして活用し、CoRISEのCustomer Projectを通じてProduct Valueへつなぎます。INDEPENDENTENGINEERING ASSETREUSABLE CAPABILITYCUSTOMER PROJECTPRODUCT VALUE
図 06 — Independent Engineering Asset → Reusable Capability → Customer Project → Product Value

この事例が示すもの。

  1. 01

    Legacy API Modernization

    既存資産の価値を維持しながら、モダンなアーキテクチャへ接続する。

  2. 02

    Anti-Corruption Layer

    外部システム固有のモデルやAPIをアプリケーション全体へ漏らさない。

  3. 03

    Typed Integration

    型を利用してレガシーインターフェースを扱いやすいドメインモデルへ変換する。

  4. 04

    API Modernization

    ローカル・デスクトップ中心のインターフェースをサービスAPIへ変換する。

  5. 05

    Product Engineering

    統合だけで終わらず、最終的にユーザーが利用するWebアプリケーションへつなげる。

CoRISEが担当したこと

  • 顧客要件の整理
  • Webアプリケーション設計
  • Reactフロントエンド開発
  • API統合
  • 利用者体験の実装
  • レガシーアダプターの設計の活用
  • REST APIを介したフロントエンド / バックエンド分離
  • レガシーインターフェースとWebアプリケーションの境界設計
  • ドメインモデルとアプリケーションモデルの接続
  • レガシーCOM統合の専門知識
  • F#アダプターの専門知識
  • REST API化の知識
  • レガシーAPI刷新の設計

基盤となるアダプター技術はあらかじめ存在しており、CoRISEはその技術を顧客プロジェクトへ持ち込み、アプリケーションの提供と統合を担当しました。

Legacy API Modernization
COM / Proprietary Data Container
F#
Typed Domain Model
REST / HTTP / JSON
React / TypeScript
Anti-Corruption Layer / Adapter

レガシー技術を、制約ではなく再利用可能な資産へ。

この取り組みでは、価値のある既存データサービスを置き換えるのではなく、レガシーインターフェースをアダプターの内側へ隔離しました。その結果、既存資産を維持しながら、Web、API、将来のアプリケーションから利用できるアーキテクチャへ移行できました。

古いものを新しいものへ置き換えたのではなく、古いものと新しいものの間に、長く使える境界を設計した。

Contact

捨てられないレガシーを、次のアーキテクチャへ。

COM、独自API、Windows依存、古いデータインターフェースなど、事業上の価値は残っている一方でモダンな開発と接続しにくいシステムについて、段階的なAPI化・境界設計・Web化をご相談いただけます。

相談する

実績一覧に戻る