
どのようにしてSOA化をすすめるの?
最後にSOAの進め方に簡単にご説明いただけますでしょうか。何と言っても、システム全体の構造を変更するわけですから、派手な変更が必要になるんですかね?
そこはいくつかやり方があってね。最初からSOAで作り直しても良いというのであれば、SOAとしてきれいに設計しちゃうっていう手がありますね。これは、システム全体ではなく、サブシステムであっても構わない。お金や手間は掛かるけれど、すっきりするよね。それから、既存システムをサービスとして再構成するって考え方もある。
それは具体的にどういう形になるんでしょうか?
単純に言えばラッパーだよね。例えば、既存のシステムは在庫の引当処理や出荷処理といった機能を担っていると思うんだけど、そういった目的に沿って処理をまとめてサービスにする。例えば、顧客情報を取得するためのサービスだったら、それに必要な処理をまとめてしまって、サービスコンシューマとやりとりするためのインタフェースを決めてやればいい。

そのラッパーに頼むと、ムダはあるにせよ、既存システムのあちこちと掛け合って必要なデータを揃えたり、登録したりしてくれるイメージでしょうか。
そうそう。結局、サービスにやってほしいことって、まさにそれじゃないですか。スパゲティ状態になっているシステムから、意味のある汎用的な処理のまとまりとして、うまく区切ってやるわけだよね。
これはある程度、機能分割ができている場合ですよね。ラッパーが必要な処理だけ引っこ抜けないようなスパゲティ状態になっていたらお手上げですよね。
そうだね。だから、初めから終わりまで全部ひとつになっちゃっている場合は、そのまま扱うしかありません。例えば、レガシーの場合はほとんどがそうですね。じゃあ、どうするか。大抵の場合、レガシーは対話式のメニュー画面で選択肢を選んでいって、最終的に行き着いたところで処理を走らせるという作りになっていますね。

サービスは、メニューを最後まで掘り進むために必要なパラメータを全部受け取って、対話式メニューのボタン押下を代行するような動きをすることになります。返す値の形式も、渡した引数によって全く異なる。サービスとして美しいかどうかは別として、それでもレガシーをSOAの世界に参加させることはできるわけです。 (次ページへ続く)