第2回 2002/06/05

復刻第32弾!4年前って大昔なところとつい昨日のようなところと混在だな

━━━━━━━━━━━━━━━━━━━━━━ 2002.07.08 Vol.529 ━━━━━━
 □■□
 ■□■□■□■□■ 日刊「WEBのツボ!!」
 □■□                      http://www.soho-union.com/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                          配信部数 2791部

【○】本日のお題 「システムはオブジェクト指向、そしてRubyで」(#002) ━━━━
                              福井修@Fsys

  皆さんこんにちは、福井修@Fsysです。オブジェクト指向Ruby の時間です。

Web屋さんには、ちょっととっつきにくい話かも知れません。しかし先日(7月3日
のKANデジ京都イベントで、Webビジネス最前線を走っておられるキノトロープの生田
昌弘氏のお話を拝聴させて頂きました。その中で、コンテンツマネジメントの話や顧
客DBの話は、印象的でした。もう静的コンテンツだけでは、商業サイトでは限界が
ありそうですね。そうすると『いかにお安く、お気軽に動的コンテンツを扱えるサイ
トを構築するか』というテーマに直面することになる訳です。

■ アプリケーションサーバ 
すこしアプリケーションサーバについて考えてみます。

動的コンテンツサイト構築のベクトルもありますが、それに加えて基幹業務を Webで
やろうとする大きなうねりもあります。そこで何らかのしかけ・道具立てがないと不
便であるというニーズに応えて、それを支援する「アプリケーションサーバ」という
範疇や製品が育ってきています。

   ユーザ    インターネット                サイト

   ブラウザ  〜〜〜〜〜〜〜 WebServer ─→ AppServer ─→ DBServer
                                      ←─           ←─
                             Apache        業務処理       PostgreSQL
                             IIS                          Oracle
                              :                            :

この説明図で示すように アプリケーションサーバとは、WebサーバとDBの間で、業
務処理を行うプログラムが稼働するための基盤ソフトの『場(環境・土台)』です。

http://itpro.nikkeibp.co.jp/free/ITPro/USNEWS/20020523/11/によると
商用大規模では、BEAとIBM がメジャーです。他の大手も力を入れつつあります。
 富士通   Interstage ApplicationServer
 NEC系    ActiveGlobe WebOTX,VOBSEnhydra
 日立     Cosminexus
 オラクル Oracle9i AS

ただし金額ベースのシェアというのは、市場の一面ですね。例えばブラウザの金額ベ
ースのシェアでは、Opeaがトップになるのでしょうか。IEは無償なので金額ベースの
シェアは、基本的には 0 なのでしょうから。

HPがJ2EEベースのアプリケーションサーバを無償提供。
http://www.jpn.hp.com/companyinfo/pressrelease/fy2002/bco012freeHPAS.htm

SUNも 「Sun ONE Application Server 7, Platform Edition」を無償提供。
http://www.idg.co.jp/sw/back/200206/20020620_01_report.html

熾烈な戦いの戦国時代ですね。J2EEを適用することに迷いのない規模の世界では、そ
れはそれでいろいろ選択枝があります。(J2EE: Java2 Platform Enterprize Edition)

マイクロソフトも 『Webサービス』を掲げて .NET でこのビジネスに参入する訳です
からこの戦いがどうなってゆくか見物(みもの)です。
(J2EEの土俵も 「.NET vs. J2EE」の土俵も)

しかしながら商用大規模だけがマーケットではありません。小規模サイトでどうなっ
ていくのかこそ興味深いですね。ここは統計などにはあらわれにくいがとても裾野の
広い世界です。

いわゆる中小企業で、何千万もなかなか予算をかけられない場合に、どうなるかです。
選択枝は、いろいろあります。

1) 大規模と同じJ2EE(JSP/Servlet/EJB)に走る。無償のオープンソースであるTomcatStrutsもどんどんメジャーになりつつあります。Strutsも最近いろいろ特集が
   多いです。又アップルは、WebObjectsというなかなかの製品をもっていたりします。
   広大なJ2EEを使いこなすには、相応の開発費がかかります。相当予算が確保されて
   いないと、助走だけで終わってしまうかもしれません :-)

2) PHP で頑張る。PHPは、言語というより大きなひとつのWebアプリケーションで、
   内部にスクリプト言語を抱えており、DBアクセスやいろいろ環境が整備されていま
   す。PHPも広義のアプリケーションサーバと言えるでしょう。
   xoops(PHPNuke 系のポータルサイト構築ツール)屋さんも元気です。
   http://jp.xoops.org/modules/news/
   ただし 「PHPの次期版はJavaに近付く」
   http://itpro.nikkeibp.co.jp/free/NOS/NEWS/20020411/1/
   とかでPHPでは、大きな変更がありますのでマルチバイト対応の問題とか、まだまだ
   いろいろあると思います。

3) 新進気鋭
   Zope(Pythonで書かれたオープンソースのWebアプリケーションサーバ)も最近台頭
   してきました。
   Warlus(Rubyで書かれたオープンソースのWebアプリケーションサーバ)もLinuxな雑
   誌で特集が組まれたりしました。他にもいろいろ動きはあります。

従来の動的サイト構築環境は、こうでした。
1) VBScript+IIS ASP方式(WindowsDNAって呼び方もありました)。しかし何とマイク
   ロソフト自身によって はしごをはずされましたね。
   (ASP.NETではVBScriptは、サポート外)
2) Perl/CGI (まあいろいろ資産は形成されたのでしょうが)

それはそれでまだしばらく残るでしょうけど、ひとつ言えることは、もう『オブジェ
クト指向』抜きでは、アプリケーションサーバも、システム構築も語れなくなってき
ているということです。

     『 サイト構築は、オブジェクト指向で 』がトレンド


オブジェクト指向が大勢だから Javaが選択されている訳ですし、マイクロソフトオブジェクト指向に遅れないように 旧VB は切り捨てて VB.NETC# に移行を促す訳
です。PHPも 互換性を犠牲にしてまで PHP4 から PHP5 に移行するのです。Perlは、
オブジェクト指向の拡張は、済ませています。

では、なぜ『オブジェクト指向』なのでしょう?

■ オブジェクト指向のメリット

前回も少し言及しましたが、ここは大事な点なので、繰り返しましょう。

・ オブジェクト指向の有利さのひとつは『部品化』しやすい点です。

全部を毎回作るのでは、大変です。小さな部品から、大きなユニットまで、いちいち
作らなくても、既製品を使い回ししたいというニーズは、もっともなことです。

しかしながら、「 使い回せる部品を作る 」というのは、言うのは簡単ですが、実現
するのはなかなか困難です。オブジェクト指向でなくても部品は作れますし、オブジ
ェクト指向をしたからといってそれだけで良い部品が作れるとも限りません。

もともと「オブジェクト指向(の方式)」というのは、従来の方法の問題点を分析し、
それに「手続き型(の方式)」という名前をつけて、それに対する、改善された新し
い方式として名付けられて登場したのです。

「手続き方式」の問題点として挙げられるのは、次の点です。
 1) ある規模以上のまとまりでは、機能中心に作られるので、データの受け渡しは
    変数を介して行われます。この変数を、機能の部品化を意識して必ずしも局所
    化しているわけではありません。
    建築の例にあてはめてみると、木造軸組工法では、柱は、全体の構造を支えて
    います。この柱の存在があるため、ある部屋だけを部品として取り出すことは
    とは難しい訳です。
 2) 同様な構成でも、その都度、そこの状況にあわせて作り込む必要があります。
    例えばソースをコピーしてきても、そこに合わせて、細かくいろいろ修正しな
    ければなりません。
    (元のはそのままで差分だけを作るという方式ではありません)
 3) 同様な機能でも、少しでも違っていれば、別の名前を付けなければなりません。
    同じ名前で、複数の別の処理をこなすことはできません。

まあとにかく『部品化』『再利用』しにくいところがあったわけです。

それを改善するために「オブジェクト指向の方式」では次の特長が挙げられています。
 1) カプセル化 (encapsulation)
    これは、クラスという単位で、手続き(メソッド)と属性データ(フィールド)
    をまとめて管理します。
    建築の例にあてはめてみると、ユニット工法(プレファブリック工法)で、あ
    る規格にそって工場で、例えば部屋なら部屋のユニットを作っておいて現場に
    は、そのユニットを持ち込んで、設置だけで済むようになります。
 2) 継承 (inheritance)
    これは、ひとつ原型を作ったら、それをもとにバリエーションをつくる際に、便
    利になります。
    原型を『親クラス』とし『子クラス』は、「親を継承」することで、親で定義さ
    れた操作(メソッド)や属性(フィールド)を子クラスでは1行も記述しなくて
    も使えるようになります。
    そうすると原型に対してバリエーションがある場合には、その差分だけを記述す
    れば良いのです。(差分プログラミング)
 3) 多態性 (polymorphism)
    これは、すぐにはわけのわからないやつですね。名前が同じでも状況に応じて異
    なるメソッドを呼び出すしかけです。同じ名前でも様々に振る舞ってくれると便
    利なことがあります。そうです。少し処理が違うからといっていちいち名前を変
    えなくても良いのです。同じ名前でもこの場合はこう。別の場合はこう。と定義
    さえしておけば、呼び出す側は、同じ名前で呼びだしてさえいれば良いのです。
    これは「部品化」の際には、結構便利な機能なのです。
    多態性を実現するには、コンパイル時に紐付けが確定してしまうのではなく実行
    時に紐付けを決定するしかけが必要で、言語仕様にてサポートされている必要が
    あります。コンパイル言語C++より コンパイルはするものの中間ファイルを実行
    時にインタープリットする Javaが有利で、さらに実行時に翻訳するスクリプト
    言語 Rubyなど の方が本質的にもっと有利になります。
     
 
続きは、次回をお楽しみに。

 最後に 「オブジェクト指向は難しい! なんて難しいんだ!」という文字列は
 次の Ruby スクリプト で

   txt = "オブジェクト指向は難しい! なんて難しいんだ!"
   p txt.gsub(/難しい!/,"簡単だ!").gsub(/難しい/,"簡単な")

  「オブジェクト指向は簡単だ! なんて簡単なんだ!」という文字列に簡単に
   変わります。(^^ゞ

【Rubyおすすめ入門書】
・「たのしいRuby高橋征義,後藤裕蔵著(ソフトバンク)
ISBN4-7973-1408-7 \2600
http://books.softbank.co.jp/bm_detail.asp?sku=4797314087

JavaVBでならどうなるか やってみられるとよいでしょう。
オブジェクト指向スクリプト言語 Ruby の エレガントさ が実感できると思います。

文字列操作の簡便さは、今後の B2B すなわち XML編集 の際にも大きなポイントです。

【プロフィール】
福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp
福井システムリサーチ http://fsys.net/  主幹。システム構築歴25年。
日本リヌクス協会、神戸商工会議所情報処理学会 会員
関西ソーホ・デジタルコンテンツ事業協同組合流通科学大学 委託SE http://www.umds.ac.jp/
デジタルハリウッド三宮校 Java講師