SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

エンタープライズシステムのためのマイクロサービスアーキテクチャの実現

ESB/EAIを利用し、データ連携とコンポーネントで成長するシステムを構築する

エンタープライズシステムのためのマイクロサービスアーキテクチャの実現 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

マイクロサービスの機能を再整理する

 エンジン型を採用していると、独自に実装を行っている部分もEAIエンジンでの連携コンポーネントにしてさらなる再利用性を高めるとよりメリットが多くなります。その理由として、1つのマイクロサービスが提供しているサービスの全体構成自体の再整理が可能になるためです。

再構成の例

 第1回では、今でも業務システムはマイクロサービスよりも統合型システムの方が管理しやすいということを紹介しました。その理由が各機能毎が密結合できず、状態を把握しにくいからという点を説明しました。

 しかし、このEAIエンジンを内包し、かつ、それぞれの機能をコンポーネント化することで、より機能自体が再配置しやすくなり、マイクロサービス化も、統合型システム化もしやすくなります。

 例えば、図11のように、当初「顧客管理」と「注文管理」をするマイクロサービスが2つあり、そこから顧客属性と注文履歴に応じてレコメンデーション機能を追加することになったとします。

図11:マイクロサービスの再構成の例
図11:マイクロサービスの再構成の例

 つまり、新たな機能は「顧客管理」と「注文管理」の一部分の機能を共に必要としてしまいます。このとき、例えば、図11の(1)のように「注文管理」をするマイクロサービスの拡張としてレコメンデーション機能を追加したとします。

 ここで、各独自機能がコンポーネント化できていれば顧客情報の参照機能も同様に簡単にコピーが可能です。そして、新たにレコメンド機能だけを追加すればよくなります。

 そして、さらに事業が成長し、今度は、まだ顧客になっていない人にもこれまでの顧客属性を参考にレコメンデーションを出したいという要望が出てきたとします。そのときには、再度、必要なコンポーネントだけを取り出し、(2)のように新たにマイクロサービス化が可能になります。

 もちろん、これらをすべて1つの場所に置けば統合型システムということになります。このように規模やセキュリティ要件、運用上の特徴により機能自体が再配置できるようになるため、同じような機能を要望する事業を横展開する必要性が生じた時にもすばやく立ち上げることが可能になります。

汎用コンポーネントの設計ヒント

 このように機能をコンポーネント化し、それをEAIエンジンに自由に配置できるようになると、より汎用的な機能をコンポーネント化して、再配置可能な部品として作成できると便利です。

 しかし、実際に汎用的なコンポーネントを作成しようとしても、なかなかどうすればよいかわかりません。また、そのような経験談も聞くことはあまりないかと思います。

 そこで今回は弊社が提供しているPDFソリューションであるQuick2PDF内部で動いているPDFコンポーネントが出来るまでの経験を踏まえ一例としてして紹介したいと思います。

入力の順番と取得方法を再考する

 プログラムで自動的にPDF帳票を作ろうとすると一般的には図12のように、(1)PDFの作成開始、そして、(2)レイアウトに構造の作成、(3)実データの設定、(4)PDFへの書き出しのような流れで作成していきます。

図12:PDF作成の流れ
図12:PDF作成の流れ

 この(1)〜(4)までの手順は一連の流れであり分割できない処理になってしまっています。従って、この構造のままPDF化をコンポーネント化しようとしてレイアウトが固定されたコンポーネント化になってしまいます。

 一方、一般的にWordやエクセルなどを使ってPDFを作成する場合では、図13のように作成者がもっとも扱いやすいフォーマット上で作成したあとに、その後、フォーマットをPDFとしてエクスポートします。

図13:中間フォーマットを使ってPDFエクスポートする例
図13:中間フォーマットを使ってPDFエクスポートする例

 このようにフォーマット変換という形であれば、PDF化のコンポーネントを作ってもさまざまな用途に使えそうです。また、帳票のレイアウトや実データの設定という部分での固有実装は残りますが、WebシステムにおいてはHTMLを作るということは他の機能に比べて非常に効率化できるはずです。

 そして、最終的にできあがったPDFコンポーネントの構造が図14のようになっています。

図14: PDFコンポーネントの最終構造
図14: PDFコンポーネントの最終構造

 つまり、これで当初の「月次レポート」の全体の処理が図15のようにEAIエンジンの中ですべて動かせるようになったということです。

図15:月次レポートのEAIプロセス化
図15:月次レポートのEAIプロセス化

 ただし、その弊害としては「月次レポート」のためのデータ収集やレイアウト作成が一連の流れから完全に疎結合になってしまうことです。疎結合になるということは技術的には好ましいことではありますが、一方で運用を把握する上ではわかりにくくなる原因の1つでもあります。

 特にWebシステムだけを見た時に誰からアクセスされているのかわからない「月次レポート」という画面が存在することになってしまいますので、その部分はドキュメントなどで関係を管理する必要性が生じます。

次のページ
ESB/EAIを代替する手段

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
エンタープライズシステムのためのマイクロサービスアーキテクチャの実現連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19263 2024/03/29 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング