2004年7月21日号

復刻第22弾! IoCの話題ってかなり遠い過去だけど、今も続いてますね。

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

「続々 システムはオブジェクト指向 Ruby & Flash」(#002)   
                                                        福井修@Fsys.NET

【○】本日のお題 「 リッチクライアント と簡潔・軽量化 」       ━━━━

夏休みシーズンですね。 Fsys福井シ ステムリサーチの福井です。 こんにちは。

今回も、Ruby のプログラミングの話は置いておいて、動向の話です。

   良いものを、おいしく頂く

のは、生きてゆく本能なので、このポリシーは、貫きたいので

   良くないものは、避けて通る

ように、いろいろWatchし続けます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Eclipse3.0へのうねり リッチクライアントへの流れ 続き
────────────────────────────────────
前回 「 リッチクライアントはどうなる?! 」注1)にてEclipseJavaの統合
開発環境からEclipse3.0 でリッチクライアントの動作環境 RCP(Rich Client 
Platform)としてさらに普及しようとしていることをチェックしました。

Eclipse3.0への流れは、なかなかのうねりのようです。

JavaWorld 2004/8月「徹底解説! Eclipse3.0」、 WEB+DB PRESS Vol.21の 「
Eclipse3.0がやってきた!」特集は、前回触れましたが、SoftwareDesign 2004/8
も「Eclipse3.0&JSFでネットワークアプリ工作」夏休み大特集ですし、C マガジ
ン2004/8 でも「Eclipse3.0」は最新開発環境レポートされています。

特に、SoftwareDesign 2004/8の特集では、Eclispeと JSFJavaServer Faces)
を使ってRSSリーダを作る記事もあって、たいへん興味深いです。

Javaは、JSFへ進もうとしているようですが、疑問もあります。
HTMLでの画面では、表現・操作が貧しいので、リッチクライアントへと志向する
流れなのに、JSFがHTML画面処理作成の改善にすぎないのであれば、リッチクラ
イアントへの直接な利便ではなく、ちと中途半端でしょうからもう一段進化が、
待望されますね。

以前  Web-DBアプリケーションのグルーピング 注2)を提示しました。
<引用>
 ・ 第一グループ
   PerlCGIやServletのみ で サーバサイドで、単一プログラム内でHTMLタグの
   編集もDBの処理も混在する形態。

 ・ 第二グループ
   IIS ASPPHPJSPを利用し、HTML文書をベースに、プログラムを埋め込み
   このなかでDBの処理も混在する形態。

 ・ 第三グループ
   HTML文書とDBの処理を分離して、実装する形態。
   見栄え(≒View)はJSP、受付処理は、Servlet、DB処理まわりはBeansなど。
   eRubyとRubyの組み合わせなどもこの範疇。

 ・ 第四グループ
   第三グループを発展させた形態。
   HTML文書は、できるだけデザイン要素に重点がおける様に(デザイナとの分業
   がし易いように)プログラムとは、分離するように工夫。
   
   JSP2.0でのタグライブラリ拡張などを活用しようとする方式です。
   また J2EEEJB導入やStruts,Turbineフレームワークもこの範疇に。
   JSFJavaServer Faces)の動向もありますし、ASP.NETの動向もあります。
   WebObjectsのようにDB処理まわりもフレームワークに取り込んだ先進形態も
   ありです。

 ・ 第五グループ
   リッチクライアントの必要性を認識し、パラダイムシフトした形態。
   見栄え(≒View)はFlashやPDF(Format)など。Microsoft Office Systmもここ
   に位置づけても良いかもしれません。

 
ここで言う第五グループに Eclipse RCPは、位置づけられるのに、JSFは、第四
グループの土俵での改善なので、新たにJSFを使いこなしてもその次元に引き止
められる訳で、なんだかなあ と思うのです。

この連載では、とっとと第五グループを RubyFlashで、オブジェクト指向での
DB連携モデル化とリッチユーザインターフェースを実装しましょうと進めていま
す。ここ2回は道草してますが^^;

このユーザインターフェースのプラットフォームにブラウザ+Flashプラグインと
いう組み合わせだけでなく、Eclipse RCP もありかな ということなのです。

例を挙げます。 Windowsローカルでエクスプローラの左側ツリー表示で、右側で
内容表示というのは、階層構造のデータを検索表示するのに、便利な構成だと思
いますが、ブラウザで実現しようとするといろいろかなり面倒です。
Eclipse だとツリー表示する部品が利用できますから、それこそリッチクライア
ントの土台にそれなりに使えそうです。
    
RCPのドキュメントやサンプルは、注3) チュートリアルは 注4)参照。
こちらは、まだまだ進化中なので、注意深く見守りたいところです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Javaの 簡潔さ を追求する動向 
────────────────────────────────────
リッチクライアントへの動きとともに、Javaには、簡潔さを志向する動きがあり
ます。今までに話題にしたものを含め列挙しておきます。

その1『JDK5.0(Tiger)』のコンセプト'Ease of Development'(簡単開発)注5)
 Tigerが登場し「1995年のJava言語登場いらいの言語仕様の変更」が加わる 注6)
 ようです。

 JDK5.0(開発コードTiger)の新機能では、拡張for文で Iteratorのループ
 ができるようで、 Ruby が既に美しく実現している機能を、実装ですね。

 確かに、 従来の
 for( int i=0;i
 初期のユーザインターフェースは、アプリケーションプログラムで制御されて
 いた。「名前の入力」「住所の入力」みたいな一連のコマンドを取り扱いたい
 となれば、プログラムでプロンプトの表示と、それぞれの入力を制御する。

 これがグラフィカルなUI(コンソールベースでもいいけど)になると、UIフレー
 ムワークにはメインループがあり、フレームワークからスクリーンの様ざまな
 フィールドの代わりとしてイベントハンドラが提供されている。プログラムで
 はこのイベントハンドラを取り扱う。ここではプログラムの中心となる制御が
 反転されている。制御は個々のプログラムからフレームワークへと移されてい
 るのだ。

とInversion of Control(IoC:制御の反転)を説明されている。ふむふむ。また
Dependency Injection(DI:依存性注入)については、次のように説明されてい
る
<引用 注13)>
 「設定を利用から分離する」原則こそが重要なのだ。
  :
 新種のコンテナにおいて反転されているのは、プラグイン実装のルックアップ
 方法である。..新種のコンテナが採用しているアプローチには、プラグインを
 利用するにあたって必ず従わなければならない取り決めが存在する。この規約
 があることで、コンテナはMovieFinder 実装を MovieLister オブジェクトにイ
 ンジェクト(inject: 注入)することが可能になる。  

 結論をいえば、このパターンにはもっと明確な名前が必要なように思う。
 「制御の反転」という用語では包括的すぎる。これでは混乱する人が出てくる
 のも無理はない。様ざまな IoC 支持者と多くの議論を重ねた末、その名前は
 Dependency Injection (依存性注入)に落ち着いた。 
<引用 注13)>

飛躍しますが、Injection (注入)というと、私は、以前書いた注14) Rubyの 
Mix-in方式の実践的な便利さ(クラスを多重利用)を想起せざるを得ません。

また ActionScriptの難しさは、Flashというコンテナでコンポーネント(=シン
ボル=オブジェクト)を扱う時のこの「制御の反転」や 「依存性注入」の説明
不足があるのではないかと思えます。この概念の理解があればなるほどと納得で
きそうです。感謝> マーチン・ファウラーさま

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ まとめ
────────────────────────────────────
  今回は、Javaまわりで「簡潔さ」や「軽量さ」を求めている動向をまとめてみ
ました。その中で、コンポーネントとサービスの組み立て方での新しい動きにわ
くわくさせられます。

Javaが「簡潔さ」や「軽量さ」を求めて頑張ってくれると Javaのオブジェクト
指向と実践で磨かれたスクリプトPerlの良いとこどりの Ruby の優れたところが
際立ってゆくので、うれしいところです。

まだ Ruby に触れていない方も多くいらっしゃるでしょうが、何度も言いますが
こんなに良い言語を知らないで、苦労するのは、社会的に大いなる浪費だと思う
ので、機会があればRubyを勧めています。

やっと Ruby でのblogの実装のひとつ tDiaryWikiの実装のひとつ Hikiを
導入しましたので、そちらの解説もしてゆきたいと思っています。
http://ns2.fsys.net/tdiary/
http://ns2.fsys.net/hiki/

軽量といえば 2004年8月7日(土)〜8日(日) 日本電子専門学校(東京)で 『軽量プ
ログラミング言語に関する総合カンファレンス Lightweight Language Weekend』
があります。 http://ll.jus.or.jp/llw2004/

この催しで PerlPHPRubyな方々の盛り上がりがありますし、関西では、今年
も 『関西オープンソース 2004』 2004年10月22日(金)23日(土)大阪産業創造館
があり楽しみです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※ 注釈、資料、参考情報
────────────────────────────────────
 注1) 続々 システムはオブジェクト指向 Ruby & Flash (#001)   
    「 リッチクライアントはどうなる?!」
 http://www.melma.com/mag/02/m00020302/a00000773.html

 注2) 「システムはオブジェクト指向 Ruby & Flash」(#005)   
    「 MVCモデル を Ruby&ActionScript で実装する」 
 http://www.melma.com/mag/02/m00020302/a00000631.html
 
 注3) Eclipse Rich Client Platform
 http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-ui-home/rcp/index.html

 注4) Rich Client Tutorial Part 1
 http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/org.eclipse.ui.tutorials.rcp.part1/html/tutorial1.html

 注5) 続システムはオブジェクト指向 Ruby & Flash」(#001)   
    「人にやさしいプログラミング言語http://www.melma.com/mag/02/m00020302/a00000690.html

 注6) 次期J2SETigerリリース」の正式版はこの夏登場
 http://itpro.nikkeibp.co.jp/free/JAV/NEWS/20040629/146507/

 注7)“誰もが書けるEJB”を実現する「EJB 3.0http://www.atmarkit.co.jp/fjava/kaisetsu/j2eewatch02/j2eewatch02.html
 
 注8) Java開発者の手で作られた新スクリプト言語「Groovy」に高い関心
 http://itpro.nikkeibp.co.jp/free/NBY/NEWS/20040630/1/

 注9)『 Processing 』 お手軽 Javaベースプログラム開発環境
 http://processing.org/

 注10) PCとWebカメラで遊べる、イライラ棒ならぬイライラボール
 http://sappari.org/iraira.html

 注11) Processing アート作品
 http://processing.org/exhibition/index.cgi

 注12) 日本発「世界最先端」オープンソース軽量コンテナ『 Seasar2http://itpro.nikkeibp.co.jp/free/JAV/J2EE/20040412/1/

 注13) Inversion of Control コンテナと Dependency Injection パターン
 http://www.kakutani.com/trans/fowler/injection.html

 注14) 続 システムはオブジェクト指向 Ruby & Flash (#008)   
    「クラスの生成と部品の利用」
 http://www.melma.com/mag/02/m00020302/a00000749.html

【プロフィール&近況】
福井 修 ( FUKUI Osamu ) o-fukui@po.iijnet.or.jp
福井システムリサーチ http://fsys.net/  主幹。システム構築歴28年。
システム構築エキスパート
日本Linux協会、神戸商工会議所情報処理学会、関西IT共同体 会員
関西ソーホ・デジタルコンテンツ事業協同組合 監事