2003年7月31号

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■【 はじめに 】
────────────────────────────────────
こんにちは、福井システムリサーチの福井です。
今般「システムはオブジェクト指向 Ruby & Flash」を執筆させて頂きます。
どうぞよろしくお願い致します。

私は、システム構築に従事してはや28年目になります。いろいろな経験につい
ては『SOHOのツボ』でも語りたいと思っておりますのでそちらもご覧ください。

私のテーマ「システムはオブジェクト指向 Ruby & Flash」では、いかに安くて
良いシステムを構築できるかという視点でのWebのツボを執筆してまいります。
2001.5.9〜2002.4.10 「 ツボによく利くJAVA & DB 」注1)
2002.6.5〜2003.7.21 「 システムは、オブジェクト指向 そしてRubyで 」注2)
の続編となります。

以下が予定しているテーマです。

1.【 はじめに 】なぜオブジェクト指向なのか そして Ruby&Flash なのか
2.【 基本編 】オブジェクト指向とは
3.【 基本編 】Ruby がなぜすごいのか
4.【 基本編 】Flash ActionScriptオブジェクト指向から見ると
5.【 実践編 】MVCモデル を Ruby&ActionScript で実装する
6.【 実践編 】サーバサイドで Ruby&PostgreSQL 連携
7.【 実践編 】LoadVars連携での ログイン認証
8.【 実践編 】LoadVars連携での DB検索
9.【 応用編 】Ruby&Flash&PostgreSQL での 郵便番号検索
10. 【 応用編 】Ruby&Flash&PostgreSQL での 応用例

管理者権限をもってDB連携のシステムを構築してゆくケース、とくに企業内の
システムをWeb-DBで数百万〜数千万程度の規模での構築を想定しています。

百万以下では、DBシステム構築はなかなか難しいでしょうし、オブジェクト指
向以前に出来合いパッケージの流用のケースが多いでしょうし、また億以上では
Javaの出番でしょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ まず なぜ Webの話なのにシステム構築のテーマなのか
────────────────────────────────────
 『 Webのツボ 』になぜ『 システム構築 』の話になるのか?という点にまず触
れておきます。

 そもそもWeb は 『蜘蛛の巣』なので World Wide Webは 『世界的な蜘蛛の巣』
ですね。
商業ベースのインターネット接続は、1990年代はじめからなので、まあ本格
的利用は Windows95 以降からということになりまだ10年経っていません。注3)

それに対し、計算機システムとしてのオンラインネットワークは、銀行のオンラ
インシステムや鉄道の予約システムなどは、1970年代からですから、こちら
の方が古くから存在します。インターネットとは、関係しない計算機システムは
現在でも沢山存在します。身近なところでは、オフコンの給与計算システムなど
は、直接的には、インターネットとは関係なく独立して存在します。

そして 今このインターネットの世界と旧来の計算機システムの世界が融合しよ
うとしています。

ポイントはネットワークプロトコルの「 TCP/IP 」の威力です。

PCネットワークの歴史のはじめには、MS-Network,NOVELNetwork,OS2Network....
Appletalk..などいろいろ存在しました。電話回線でモデムでダイアルアップし
無手順(という手順の^^)でのパソコン通信も昔ありました(遠い目)。そして 
淘汰の結果 TCP/IP が生き残りました。

LAN(Local Area Network)も,WAN(Wide Area Network)もこの TCP/IP に収束する
状況になり、ネットワークのシステムは、インターネットもイントラネットもシ
ームレスの便利さを享受することができるようになりました。

道がつながったので、適切に鍵をかけないとあぶない状況が生まれましたが、こ
れはもう戻れないでしょう。便利さを知ってしまったあとわざわざ不便にとどま
ることは難しいですから。
携帯電話のネットワークは、『巨大なLAN』なのですが、インターネットのTCP/
IP網との道がつながって、迷惑メールのデメリットもありますが、繋がることの
メリットの方がやはりはるかに大きいでしょう。

組織内ネットワークシステムも TCP/IP の成果を利用したシステムに動いていま
す。 すなわち Webを使ったシステム(Webサーバとブラウザを使うシステム)に
大きく置き換わろうとしています。なぜなら その方が、安上がりで、早く、便
利なシステムが出来上がるからです。
旧来からのシステムがハードウェア保守の期限でリプレースとなるタイミングが
Web化の機会になります。

企業システムの進化の方向として、Web-DB連携システムに動いているという見方
を示しましたが、今度は、Webサイトから見た進化の方向にも着目しましょう。
Webサイトは、きれいなデザインで、見栄えが良いことも大事で、かつその上に、
いかに優れたコンテンツを持つかの勝負となります。このコンテンツがある量を
越えるとその取り扱いにはDBの出番となり、バックエンドの基幹システムとの
連携がテーマに上がります。

ホテルの予約システムなどは、最たる例でしょう。また注文を受け付ける場合は
販売管理のシステムに当然連携することになりますし、進んでいれば在庫管理の
システム、流通管理のシステムや顧客管理のシステムとの連携も発生します。
まだそこまでは、到達していない場合も今後ますます進化してゆくはずです。
先進の自動車メーカのWebでは、生産管理システムにまで連携です。

また EIP(Enterprize Information Portal)注4)では、Webが、会社の情報伝達経
路の中核となります。情報・知恵の結集も、Webを使ったシステムで実現します。

 『 Webが システムそのもの 組織そのもの になる日も近い 』

と指摘しておきましょう。

 システムの進化の方向として Web化は、コストセーブのポイントですし、
 Webの進化の方向としても システム化=システム構築 は、必然なのです。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ なぜオブジェクト指向なのか 
────────────────────────────────────
オブジェクト指向については、次回にテーマを設けますので、今回は、簡単に。

なぜ オブジェクト指向なのか?に対する答えは、次のとおり

1.従来の 「手続き型」の方式に対して、共通部品化(カプセル化)において
    優れている。
2.共通枠の「クラス」と個別実体「インスタンス」という概念を導入すること
    で、モデル化および実装において整理が進んだ。
3.「継承」という方式が、持ち込まれて、親クラスを継承した子クラスでは、
    差分のみの実装ですむようになった。
4.同じ名前で、文脈によって内部で少し違う処理を実行できる(ポルモーフィ
    ズム)ので、便利。もちろん違う処理は、違う名前で が基本。
5.便利さを実感できるまで敷居は、低くはないが、一旦味をしめるともう手放
    せなくなる。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ なぜ Rubyなのか
────────────────────────────────────
 システムを実装する際には,何れかのプログラム言語を選択しなければなりませ
ん。
システムを実装する際の候補には、次の言語などが挙がります。
(アプリ内スクリプトも含む)
1.アセンブラ
2.C
3.C++
4.COBOL
5.VisualBasic
6.Pascal
7.Java
8.Perl
9.PHP
10.VBscript(Accessマクロ、Excelマクロ..)
11.Ruby
12.Python
13.C#
14.VisualBasic.NET

オブジェクト指向を推進するのは、言語レベルで、オブジェクト指向をサポート
しているものが有利です。していないC言語での実装も可能ですが、楽はできま
せん。VB6,VBScriptもドットシンタックスは、オブジェクト指向的なのですが、
継承をサポートしていませんし、.NETの登場で賞味期限が過ぎてしまいました。

また オブジェクト指向の機能があっても弱い(後付で複雑すぎる場合とかも)
場合は、それも苦労します。無理にオブジェクト指向せず、従来の「手続き型」
として使用するのが、賢明です。このグループには、PerlPHP が該当します。

オブジェクト指向に向いていない(弱い)もの、私が知らない^^ものなどを除いて
まな板に乗せてみます。
┌─┬───┬────┬───┬────────┬──────────┐
│No│言語  │どこでも│難易度│規模適性など注5)│  実行              │
├─┼───┼────┼───┼────────┼──────────┤
│ 1│C++   │   ○   │  難  │小から大まで    │コンパイル後 速     │
├─┼───┼────┼───┼────────┼──────────┤
│ 2│Java  │   ○   │やや難│小には向かない  │VMインタプリタ依存  │
├─┼───┼────┼───┼────────┼──────────┤
│ 3│Ruby  │   ○   │  易  │小から大まで    │スクリプト          │
├─┼───┼────┼───┼────────┼──────────┤
│ 4│Python│   ○   │  難  │小から大まで    │スクリプト          │
├─┼───┼────┼───┼────────┼──────────┤
│ 5│C#    │   ×   │やや難│Javaと同じ      │コンパイルCLR依存 │
├─┼───┼────┼───┼────────┼──────────┤
│ 6│VB.NET│   ×   │やや易│C#と同じ?      │コンパイルCLR依存 │
└─┴───┴────┴───┴────────┴──────────┘

Javaは、覚えることが沢山あるので、たとえば、「総額100万円で、掲示板を作
る」というプロジェクトに、VBは知っているが Java はやったことが無いという
エンジニアがJavaに立ち向かうと、勉強途中で予算切れとなることが、予想され
ます。総額1億越えのプロジェクトだと吸収できるでしょうが、総額数百万の
プロジェクトでもいろいろしんどいでしょう。

C#でもほぼ同様な状況でしょう。Rubyは、サンプルにちょこちょこ手を入れて収
まると思います。まあプログラミングは、個人の能力差が大きいですから、Java
のエキスパートが、やればそれはそれですいすいでしょうが、Javaのエキスパー
トになるには、またその仕事には、相応のコストが当然必要です。

Ruby は素性の良い真オブジェクト指向言語でありながら、お手軽かつ奥深い、
そして日本発という優れものです。じわじわ利用者は増えています。注6)

システム構築は、人件費そのものですから、いかに省力できるかの勝負です。
ライブラリ=部品が充実していて、お手軽=作りやすい=良いものが安くできる
そして 情報がオープンで広く流布されていることが大事です。また英語が原典
でなく日本語で手に入るというのも、Rubyのメリットです。

     RubyJava + Perl の良いとこ取り

 と私は、前から注7) 宣伝していますが、今月(2003/9)の 日経ソフトウェアの 
P.70で吉田和弘氏が、同じことを書いておられるので、うれしい限りです。

私は、FORTRAN系が長くその後 C,C++(挫折),AWK,VB,VBScript,Perl,PHP,Javaを
やって Ruby に出会い 今は、ぞっこんです。注8)

こんなに良い言語を知らないで、苦労するのは、社会的に大いなる浪費だと思う
ので,機会があればRubyを勧めています。反面教師は必要なので、いろいろな言
語があって良いでしょう。
競い合って負けたり、賞味期限が過ぎたものは、切り捨てられてゆく訳です。

argol,PL1,ada..N88BASIC..VB.... 昔は、そんな言語があったなぁ(遠い目

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ なぜ Flash なのか
────────────────────────────────────
 Flashは、アニメーションツールとしてが原点で、その側面では、サーバサイド
連携のクライアント側ソフトには、なじまないところです。私とも接点は無かっ
たでしょう。

ところが Flash5そして FlashMX でActionScriptを搭載し、ネットワーク連携機
能を実装して、大きくポジションを変えつつあります。

キーワードは、「 LoadVarsオブジェクト 」です。

それにしても Flashの表現力の高さは、どんどん評価されていますね。リッチク
ライアントのツールとして、存在価値をどんどん高めていますし、携帯Flashも
今後が楽しみです。

詳しくは、次回以降に続けます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※ 注釈、資料、参考情報
────────────────────────────────────
注1) http://ns3.fsys.net/webtubolist.html に一覧
注2) http://ns3.fsys.net/webtubo2.html    に一覧
注3) ホッブズのインターネット年表(日本語訳)
     http://www.dendrocacalia.org/~common/rfc/rfc2235-jp.txt 
注4) http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20001002/1/ など
注5) 規模は、総額100万以下は小、1億以上が大。その間が中 と分類。
     発注側の時間コストと受注額の人月相当で5人*1年半越えで大。
注6) http://www.ruby-lang.org/ja/
注7) http://ns3.fsys.net/lms/docs/lms20020526.txt
注8) 関西オープンソース+フリーウェア2002では、作者のまつもと氏と
     直接話合うこともできました。
     http://of.good-day.net/event.html
     日経オープンシステム 2002/2月で 構築実例が記事になっています。
http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=Media+Watch%3A%3A2002

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