2004年02月14日
川俣晶の縁側ソフトウェアMagSite1開発日誌 total 2336 count

管理のための通常見えない世界の開発

Written By: 川俣 晶連絡先

 MagSite1の開発、休止している訳ではありません。

 現在取り組んでいるのは、MagSiteMan(仮称)という管理ツールです。これが無いと、どうもイーストさんがサービスベースのテストを開始してくれないようなので。

 内容は、サーバ上に、MagSite1のサイトを構築、管理するものです。つまり、1つのサーバ上に、このオータムマガジンのようなものが複数あって、それを追加する手順を自動化するものです。1つのMagSite1サイトを複数の人が使うのは通常は誤った用法です。実際に、様々なblogサービスを見ても、一人の利用者に対して、1つの独立したblogシステムを提供するのが基本で、1つのblogシステムを複数の利用者でシェアするような形はあまり見られないと思います。

 この場合に問題になるのは、MagSite1のサイトを増やす手順ではなく、バージョンアップ時に、サーバ上の全てのMagSite1のサイトを正しくアップデートする手順であったりします。

 そこで、まさにそれを行う管理ツールが必要とされ、それを開発しなければならないわけです。

 このツールそのものは、おそらく、ベータ版の一部として公開されると思います。ベータユーザーの方々も使用できると思います。

ADSIはつらいよ §

 これを実現する予備調査として最初に取りかかったのが、IISの仮想ディレクトリや仮想サイトをプログラムから作成する手順です。MagSite1はいくつかのディレクトリやファイルが正しく同期した内容で生成されないと上手く動作しません。そのため、サイトの作成手順を自動化することは必須であると思います。これまでは、1サーバに1つのMagSite1サイトしか構築しない事例が多かった関係上、デフォルトの設定のまま動かして問題ありませんでした。しかし、1サーバ上に複数のMagSite1サイトしか構築する場合、それぞれのデータを異なるディレクトリに格納するように正しく設定する必要が生じ、自動化が必要となります。

 ところが、これまでIISの設定はGUIベースで済むような単純な作業しか必要とされておらず、プログラムから設定を変えるのは初めてです。

 最初は、WMIを通してやるのかと思っていろいろ調べていました。しかし、WMIはIIS 6.0以降でのみ使えるようで、IIS 5.0から使えるのはADSIであることが分かりました。ADSIといえば、ディレクトリサービスにアクセスするAPIです。それがIISと関係があるとは思ってもいませんでした。おかげで時間を無駄に使ってしまいました。しかし、ADSIとは、LDAPなどの一種のデータベースにアクセスするAPIであると考えれば、IISの設定を含むメタベースにアクセスために使えるというのは、理解できることです。

 このあたりの構造は、かなり分かるまで難儀した感じがあります。それに関して思ったこともありますが、それはMagSite1開発日誌とはちょっと違うので機会があればいずれ。

ZIPはつらいよ §

 最大の難関かと思ったADSIをクリアしたあとで、もう1つうっかり見落としていた問題に遭遇しました。

 MagSite1の自動バージョンアップというものを実現する場合、必要なファイルを自動的に取得する必要があります。それ自体は、さほど難しい話ではありません。

 問題は、ファイルをどのような形式にして送るかです。つまり、ファイルを生のまま送るのか、アーカイブして送るのか、ということです。アーカイブして送る場合はそのフォーマットも問題になります。現在は配布ファイルをLZH形式にしていますが、Windows XPなどのOSがネイティブに開けるZIP形式の方が便利であることは分かっています。しかし、このどちらも.NET Frameworkの標準ライブラリでは対応していません。

 そこで、いろいろ調べたのですが、GPLのライブラリを使うのも、今ひとつライセンス的にすっきりしませんし、責任の所在も不明確です。そこで更に調べると、MSDNのある記事が目に入りました。それは、Visual J#のライブラリを呼び出すという方法です。Visual J#は、Javaの文法で.NET Framework上のプログラムを作成するツールです。当然、Visual J#のライブラリとは.NET Framework上にあってC#やVisual Basic.NETから呼び出せるものです。そして、このライブラリの中に、Java Archive (JAR)というアーカイブファイルを扱う機能が含まれます。これは、大層な名前が付いていますが、要するにZIPファイルのことです。これを呼び出してしまえば、簡単にZIPファイルを読み書きできるよ、という話です。

 この方法を使う場合、問題になるのは、Visual J#のラインタイムもインストールしなければならないことです。しかし、その程度なら、それほど大した手間にはならないので、この方法で行ってみようかと思います。

 そのため、もしかしたら、MagSite1のサーバ側には、Visual J#のラインタイムのインストールをお願いすることになるかもしれません。よろしくお願い致します。