ブルドーザー #3 (ワークフローソフトウェア): XMLやSOAPのようなワークフローソフトウェアは、異なるコンピューターシステム間の「対話」をどのように実現するのですか?例を挙げて説明してください。
了解しました。以下の通り、日本語に翻訳します(Markdown形式を維持しています)。
想像してみてください。コンピューターにも「標準語」と「宅配便サービス」が必要なんです
あなたが「ブルドーザー」という表現をおっしゃったのは、非常に的を射ていると思います。これらの技術が担う役割は、まさに異なるコンピューターシステム間のコミュニケーションにおける「大きな山」をならし、それらがスムーズに「対話」できるようにすることです。
まず、根本的な問題をはっきりさせましょう:なぜコンピューターにはコミュニケーションの壁があるのでしょうか?
これは、まるで異なる国の人のようなものです。一人は中国語しか話せず、もう一人は英語しか話せなければ、二人が直接話し合ってもきっとお互いさっぱりわからないでしょう。コンピューターシステムも同じです。A社の在庫システムはJava言語でLinuxサーバー上で動いているかもしれません。一方、B社のECサイトはPHP言語でWindowsサーバー上で動いているかもしれません。それらの内部でのデータ形式や処理ロジックはまったく異なり、まさに「蛙の面に水」状態なのです。
この問題を解決するには、以下の二つの重要なものが必要です:「皆が理解できる共通の言語」 と 「標準化された配送方法」。
ステップ1: 「標準語」で手紙を書く - これが XML
XML (eXtensible Markup Language) が「標準語」の役割を果たします。
XML自体はプログラミング言語ではなく、マークアップ言語、つまりデータ形式を定義するルールです。XMLのすごいところは、プレーンテキストでタグを使ってデータを記述するため、人間にも機械にも理解しやすいことです。
例えば、注文を送る場合を考えてみましょう。それぞれのシステム独自の内部言語を使うと、以下のようになるかもしれません:
- システムA(理解可能かもしれない):
ORDER: {customer: "張三", item: "スマートフォン", quantity: 1}
- システムB(理解可能かもしれない):
PlaceOrder("スマートフォン", 1, "張三")
これらはお互いに理解できません。しかし、XMLという「標準語」を使って書くと、以下のように変わります:
<注文>
<顧客名>張三</顧客名>
<購入商品>スマートフォン</購入商品>
<数量>1</数量>
</注文>
この形式はとても明確ではありませんか? <顧客名>
と </顧客名>
のタグのペアが「張三」を囲っており、「顧客名」というタグを事前に認識するよう取り決めておけば、どんなシステムでもこれが顧客の名前だとわかります。そのシステムがJavaで書かれていようとPHPで書かれていようと、この「手紙」の内容を読み取れるのです。
つまり、XMLは「手紙の内容をどのように書けば双方が理解できるか」という問題を解決します。
ステップ2: 「国際宅配便」で手紙を送る - これが SOAP
さて、これでXMLを使って分かりやすい手紙を書き上げました。次に、この手紙をAシステムからBシステムへ安全かつ確実に届けるにはどうすれば良いでしょうか?
ネットに適当に放り投げるわけにはいきませんよね?もし途中で紛失したり、間違った場所へ届いたり、誰かに開封されて読まれたりしたら困ります。
ここでSOAP (Simple Object Access Protocol) の出番です。SOAPは**「国際標準宅配便サービス」** の役割を担います。
SOAPは、「梱包」と「発送」のための完全で標準化された一連のルールを定めています。SOAPは以下のことを行います:
- 梱包(封筒の作成):先ほど書いたXMLの「手紙」を、標準のSOAP「封筒」の中に入れます。
- 住所と指示の明記:この封筒には、受取人の住所(Bシステムのネットワークアドレス)、差出人情報、さらには「操作手順」(例えば、Bシステムに対して「この手紙を受け取ったら、『注文』という操作を実行してください」と指示)をはっきりと書きます。
- 配送サービス業者の選択:SOAPは通常、Webアクセスで使われるHTTPプロトコル(ウェブサイトにアクセスするときにURLの先頭にあるもの)を「輸送手段」として使います。これは世界で最も普及している「配送網」を利用するようなもので、ほぼどんな場所にも届けることができます。
したがって、SOAPの封筒の中身は(簡略化版で)次のようになります:
<!-- これはSOAP Envelope (封筒) です -->
<SOAP-ENV:Envelope>
<!-- これは封筒の指示書 (Header)。追加情報を置けます -->
<SOAP-ENV:Header/>
<!-- これは封筒の中の手紙本文 (Body) です -->
<SOAP-ENV:Body>
<!-- ここに上記のXMLで書かれた注文の手紙を置きます -->
<注文>
<顧客名>張三</顧客名>
<購入商品>スマートフォン</購入商品>
<数量>1</数量>
</注文>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
つまり、SOAPは「この手紙をどのような形式の封筒で、どのように梱包し、どの経路を通して送れば、相手に確実に届けられ、理解してもらえるか」という問題を解決します。
具体例:オンラインショッピングの裏側
全体の流れを繋げて、あなたがオンラインで買い物をする際、この仕組みがどのように動くのか見てみましょう。
-
あなたがAサイトで注文:とあるECサイト(ここではAシステムと呼びます)で、スマートフォンを気に入り、「購入」ボタンをクリックします。
-
Aシステムが「手紙」を作成:Aシステムがあなたのリクエストを受け取りますが、直接倉庫のコンピューターを操作するわけではありません。代わりに、この注文を記述したXML形式の手紙を内部で生成します。さきほどの例のような形です。
-
Aシステムが梱包し発送:続いて、AシステムはSOAP機能を呼び出して、そのXML手紙を標準のSOAP封筒に入れ、倉庫管理システム(ここではBシステムと呼びます)の住所を明記し、インターネット経由(HTTPプロトコル)でこの「小包」を送り出します。
-
Bシステムが受信し開封:倉庫のBシステムは常に待機状態で、このようなSOAP小包の着信を待っています。小包が届くと、SOAPのルールに従ってまず「封を開け」、中にあるXML手紙を取り出します。
-
Bシステムが読み取り実行:BシステムはXML手紙を読み始めます。
<購入商品>
タグを見て、在庫から「スマートフォン」を探しに行くべきだと理解します。<数量>
タグを見て、在庫数を1つ減らすべきだと理解します。<顧客名>
を見て、この注文者は「張三」さんだと理解します。そして、倉庫作業員に梱包して発送するよう指示を出します。 -
Bシステムが返信(任意):処理が終わると、Bシステムは同じくXMLとSOAPを使って、Aシステムに返信することもあります:「注文処理完了、在庫引当済み、配送伝票番号はSF123456です」。これによって、あなたは注文ページで「発送済み」のステータスと配送伝票番号を確認できるようになります。
ほら、このプロセス全体を通じて、AシステムとBシステムは、相手がどこのメーカーのコンピューターか、どんなOSを使っているか、コードがどう書かれているかなど、一切知る必要がないんです。両者がXML(標準語) と SOAP(国際宅配便) という二つの共通ルールさえ守れば、完璧に連携して仕事ができるのです。
これがまさに、このような「ワークフローソフトウェア」や技術が「ブルドーザー」のようにシステム間のコミュニケーション障壁を平らにならし、情報が平坦なデジタル世界を自由に流れることを可能にする仕組みです。