豊田 孝

 現在,世界中で動作している多くのコンピュータはインターネットに接続し,相互に情報を交換しています。また,インターネットに接続した個々のコンピュータ内部では,プログラム(より正確には,プロセス)が動作し,ポート番号を通して,不特定多数のインターネット・ユーザーに各種サービスを提供しています。

 これらの事は,インターネットが社会基盤の一部としてすでに定着していることを示しています。そして今,“Webサービス”という用語が多くの人の関心を引き付けています。

 さて皆さんは,Webサービスとはいったいどのようなものか,ご存知でしょうか?この種の質問を5人の専門家に投げかけると,5種類の答えが返ってくるとさえ言われています。そこで,本連載ではまず,Webサービスを次のように定義しておきます。

“インターネットに接続している個々のコンピュータ内部では,プログラムが動いている。Webサービスは,その動いているプログラムを構成するクラスをインターネットに公開し,他のユーザーが再利用できるようにするための技術体系,あるいは,公開するクラスそのものである”

 一部の方は,“プログラムを構成するクラスとはいったい何か?”という疑問を持つかもしれません。この疑問への回答はこちらを参照してください。

 先の定義は,どちらかといえばソフトウエア開発者の視点に立っています。一部の方はご存知だと思いますが,次のような,より抽象度の高い視点からの定義文も多くの専門図書で紹介されています。

“Webサービスは,SOAPやXMLをはじめとする業界標準プロトコルをベースとするオープンな技術である”

 これら2つの定義文を読んだ方の中には,次のような疑問を持つ方もいるのではないかと思います。

  • クラスを公開するとは,具体的にはどういうことなのか?
  • 公開されたクラスを再利用するとは,具体的にはどういうことなのか?
  • SOAPをはじめとする標準プロトコルは,具体的にはどのように使用されるのか?

 本連載では,単純なWebサービスのサンプル・プログラムと,Webサービス・クライアントのサンプル・プログラムを作成しながら,これらの疑問への回答を解説します。紹介するサンプル・プログラムの開発・実行環境は,マイクロソフトの.NETフレームワークを使います。.NETフレームワークと言われてもピンと来ない方もいらっしゃると思いますので,本日はまず.NETフレームワークについて簡単に説明します。

.NETフレームワークとは何か?

 .NETフレームワークの“フレームワーク”とは何でしょう?英単語の“framework”を辞書で調べてみると,建物を支える枠や基本的な構造体,という意味があります。また,.NETは正式には,Microsoft .NETのことですから,.NETフレームワークは,最終的には,Microsoft .NETを支える基本枠である,と解釈できます。しかし,この解釈を本当に理解できるのは,Microsoft .NETの実体を理解している人に制限されてしまいます。そこでここでは,“Microsoft .NETは,Microsoftのソフトウエア戦略の総称であるとともに,同社が今後出荷するソフトウエア製品の総称でもある”と考えることにします。以上から,本連載では,.NETフレームワークを次のように定義することにします。

“.NETフレームワークは,ソフトウエアの開発と実行用の土台である。この土台の上に誕生したのがVisual Studio .NET開発環境製品である。Visual Studio .NETで開発した.NET対応ソフトウエアは,CLR(Common Language Runtime)という専用の仮想マシン内で実行される”

 この定義文の中には,開発環境製品であるVisual Studio .NETと,実行環境であるCLR仮想マシンという表現が含まれていますから,先に進む前に,この2者の関係を補足説明しておきたいと思います。

 Visual Studio .NETは,一般には統合開発環境(IDE:Integrated Development Environemt)と呼ばれ,グラフィカルな操作を通して,.NET対応ソフトウエアを効率的に開発するためのソフトウエア製品です。ただし,.NET対応ソフトウエアを開発するにはVisual Studio .NETが必須ではありません。マイクロソフトは,仮想マシン,コマンドライン・コンパイラ,簡易版GUIデバッガ,テクニカル・ドキュメント,各種サンプル・コード一式を.NETフレームワークに含め,インターネットから無料でダウンロードできるようにしています。

 CLR仮想マシンは,正式には,共通言語ランタイム(Common Language Runtime)エンジンと言います。C#をはじめとする.NET対応プログラミング言語を使って記述したソース・コードをコンパイルすると,MSIL(Microsoft中間言語:Microsoft Intermediate Language)と言うバイナリ・コードが生成されます。CLRは,このバイナリ・コードを実行します。

 なおMSILは,共通中間言語(CIL:Common Intermediate Language)としてECMA(European Computer Manufacturer's Association)標準の一部になっています。また,.NETフレームワーク自体の一部もCLI(Commn Language Infrastructure)として標準化されています(詳細はこちらを参照)。CLIは現在,次のようなOS環境で動作するといわれています。

  • Windows 2000/XP(Windows XP推奨)
  • FreeBSD(バージョン4.7推奨)
  • Mac OS Xバージョン10.2

 皆さんの中には,仮想マシンという表現からJava仮想マシンを連想する方もおられると思います。CLRの採用はプラットフォーム境界を越える点にありますから,Java仮想マシンと同じメリットがあります。この点は,2000年7月22日のMicrosoft .NET発表記者会見の質疑応答の席で,当時の開発製品開発の責任者を務めていたPaul Maritz氏も言及しています(詳細はこちらを参照)。なお,仮想マシンという用語を最初に使用したのは米IBMといわれます。

 CLRのそのほかのメリットとしては,Visual Basic .NET,Visual C++ .NET,Visual JScript .NET,新しく開発されたVisual C# .NETなどをはじめとする複数のプログラミング言語の使用を可能としていることがあります。これは,言語間の相違がMSIL(中間言語)レベルで吸収されているということを意味します。つまり,各言語用に用意された.NET対応コンパイラは,CLRが理解できる共通のコード(MSIL)を生成する決まりになっているわけです。

 以上で,Microsoft .NETと.NETフレームワークの関係,並びに,その背景概要が分かりましたから,次に,本連載の焦点であるWebサービスの位置付けを考えてみることにします。

Webサービスの位置付け

図1●.NETフレームワークの階層図
 まずは,図1[拡大表示]を見ていただきましょう。

 ご覧のように,Microsoft .NETと.NETフレームワークの関係をディレクトリ階層で図解したものです。私たちは,このディレクトリ階層から,.NETフレームワークがMicrosoft .NET戦略の一部であることをはっきり理解することができます。

 また,“Temporary ASP .NET Files”という名称のディレクトリがこの階層内に含まれていることも確認できます。これは,ASP .NETもMicrosoft .NETの一部を構成していることを示しています。結論を先に述べると,本連載で取り上げるWebサービスは,.NETフレームワーク,ASP .NET,そして,MicrosoftのWebサーバーあるIIS(Internet Information Server,Internet Information Services)の3つの技術に支えられる応用技術といえます。.NETフレームワーク,ASP .NET,およびIISは,私たちのPC内のクラスをWebサービスとしてインターネットに公開するための統合基盤,といってもよいでしょう。

 一部の方は,CLRがこのディレクトリ階層内の,どこに置かれているのか気になることでしょう。CLRは,この階層内に含まれていません。筆者のWindows XPシステム環境では,C:\WINNT\system32ディレクトリ内にMSCOREE.DLLとして格納されています。格納先ディレクトリ名称から分かるように,CLRは.NETフレームの一部というよりは,どちらかといえば,Win32システムの拡張という意味合いが強いといえます。このため,CLRが他のOS環境に移植される場合には,異なる名称のディレクトリに格納されることになるでしょう。なお,ASP .NETは,以降の連載で触れるように,CLRの動作を補佐するもう一つの実行エンジンという役割も果たしています。

 図中のFrameworkディレクトリやTemporary ASP .NET Filesディレクトリなどの中味に興味をもたれている方もおられるでしょうが,本日はこれ以上深入りせず,以降の各連載内で必要に応じて触れることにします。現時点では,CLRが実行時に参照する情報(クラスやロードするファイル情報など)がこれらのディレクトリ内に格納されていると考えておいてください。

 次回は,Visual Studio .NETのWebサービス関連ウィザードを起動し,自動的に生成されるコードの意味を吟味します。Visual C# .NETとVisual Basic .NETの両方のコードを紹介しますから,言語間の相違なども分かると思います。Webサービスを開発したり,利用するには,いったいどのような知識が要求されるのでしょうか。楽しみなところです。

それでは次回またお会いいたしましょう。ごきげんよう!