Hatena::ブログ(Diary)

矢野勉のはてな日記 このページをアンテナに追加 RSSフィード Twitter

2006 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 |

2008-01-14

ウェブ・アプリケーションの革命がここにある - Apache Wicketユーザーグループを始めます


このブログをいままで読んでいる方なら、私がApache Wicketの大ファンだということはご存知でしょう。

ついに1.3としてApacheプロジェクト入りしてから最初のリリースを果たしたWicketフレームワークは、日本ではまだそれほど普及していませんが、今年は米国で「Wicket in Action」が出版される予定があるなど、かなり注目されているフレームワークです。


私はそんな控えめな表現では表せない魅力をWicketに感じています。Wicketは、Javaのいままでのフレームワーク開発の積み重ねがもたらした「ウェブアプリケーションの革命」です。Echo2のようにHTMLを廃してJavaだけでプログラムを組むのでなく、JSFのように新しいテンプレートを作るのでもない。HTMLJavaを結合して、HTMLJavaで、Javaらしいコードで制御するという方向で開発されてきました。


その発想の根底にあるのは、デザインとプログラムのほぼ完全な分離と、「JavaプログラマJavaで書くのが一番楽なんだ」という考え方です。WicketHTMLHTMLのまま、HTMLエディタで編集できる形式のままテンプレートとして使用します。Wicketは各種設定をすべてJavaソース内で行います。Wicketウェブ・ページをステートフルにし、デスクトップアプリケーションを作るときのように、普通にインスタンス変数を使えるようにします*1Ajaxによる画面のコンポーネント更新を、JavaScriptではなくJavaソースから行うことが出来ます。


いまものすごく流行しているRuby on Railsを考えてみてください。Railsはすばらしいフレームワークです。私たちがいままでStrutsで苦労して来たことを、Rubyらしい発想で簡単にできるようにしてくれます。「設定より規約」という発想はJavaフレームワークにも多いに影響を与えました。

でも、Railsは「Strutsを使いこなせるくらいのプログラマが『めんどくさい』と思ってきたことを、ものすごく簡単にできるようにした」フレームワークなんです。CGIから発展してきてStrtusで広まったやりかたをものすごく簡単にしたものです。Strutsの延長線上にあるものです。


WicketはStrtusの延長にあるフレームワークではありません。Wicketの最大の目標は、Javaウェブ開発にオブジェクト指向を取り戻すことです。StrutsのActionにはオブジェクトとして重要な「ステート」を保持する機能がありません。デスクトップアプリケーションを作るときにはほとんど無意識にやる、オブジェクトにステートを閉じ込めるというやり方ができません。Wicketは「いままでのやり方ではだめだ」という考えから、いままでのやり方を覆そうとして作られているのです。

Javaをちゃんと使えるプログラマWicketを使い始めると、「そうそう!これだ!」という感じを抱くはずです。そこにはServletの仕様に押し込められた世界ではなく、Javaプログラマが愛してやまない世界が広がっています。急に自分が自由になったような、そんな気持ちになります。


WicketStrutsの作ったモデルを飛び越えようとして作られたフレームワークです。Strutsの延長線上にはいないのです。だから私はWicketJavaがもたらした「ウェブアプリケーションの革命」だと思っています。


JavaC++オブジェクト指向の本命と思われていた時代に、Smalltalkが実現できなかった実マシンに捕らわれない仮想マシン上でのオブジェクト指向開発を実現しつつ、パフォーマンスと開発効率の両方を同時に実現しようした(左記部分修正しました。コメント欄参照)Smalltalkで培われた技術をベースに高速化を行い*2仮想マシンでのオブジェクト指向の広い普及を実現した非常に野心的なプロジェクトです。革新的としてとりざたされました。私はその今も続いているチャレンジ精神が大好きです。


Javaが一つの挑戦であったように、Wicketウェブフレームワーク上で、いままでの考え方を超えそこに実用的なJavaらしいオブジェクト指向開発環境を構築しようと挑戦しています。私はそのチャレンジ精神が大好きです。なにかを変えようとするその動きに、すこしでも協力してみたいと思います。


過去にちらっとTwitterで「WicketのUGをつくりたいねー」と発言したことがあったのですが、やはりいろいろ考えてしまって躊躇していました。ところが新年になってjava-jaの飲み会でいろんな方から強力なプッシュをいただいて、ついに作ることになりました。「Apache Wicket User Group Japan - Wicket-JA」です。うしろを押していただけなければ作ることはなかったかもしれません。本当に感謝します。

https://sourceforge.jp/projects/wicket-ja

まずは上記sourceforge.jpにプロジェクトサイトをおさえ、メーリングリストを開設しました。あと、サイト構築ドメインとして「wicket-ja.org」を確保しました。サイトの方はまだできていませんが、サイト自体をWicketでつくって、そのソースも公開する予定ですので、サイト自体がWicketのサンプルコードになるでしょうね。これはおもしろいんじゃないかな。


メーリングリストの方は、とりあえず以下の三つを用意しています。

wicket-ja-manage
Wicket-JA運営のための議論など
wicket-ja-translation
Wicketの日本語記事がたくさんあったほうがいいよねーという飲み会での話があって、そのために設置されました。書籍・ブログ・サイト記事など翻訳してみたい。他にも、Apache Wicket側に連絡をとる際のメール文面を考えたりなど、使えるかと思います。
wicket-ja-user
たぶん一番使われるだろうところです。Wicket使ったことないけど興味ある、という人などが質問をばんばん投げて答えたり、これバグじゃない?という情報をとりあえず投げてみたら他の人がApacheに報告したり、なんて使い方をしていくことになるんじゃないかと思います。

Wicket-JAは立ち上がったばかりでなにも決まってません。しかしJava最高のフレームワークの一つであるApache Wicketを日本でも使ってもらえるよう、熱いJavaプログラマが集まってできました。初めて使うと疑問もたくさん湧いてくるでしょう。いままではその質問をぶつける場所もなかった。これからはWicket-JAのメンバが質問に答えてくれるでしょう。いままではおかしいところを見つけても英語が出来なければApacheに報告することなんて出来なかった。そもそもバグの要因をソースを追って確かめることも難しかった。Wicket-JAなら、Wicketのソースまで追って原因を確かめられる人もいるでしょう。英語でApacheバグ登録もできるでしょう。


Wicket-JAの目的は、もちろんApache Wicketを日本のJavaプログラマに使ってもらうことです。でもそれはユーザーグループとして当然の仕事です。Wicket-JAを作ろうと決めた集まりでみんなが同調したのはそこではなく、日本からApacheへ、ソースコードの形で貢献することです。バグをテストコードと修正コード付きで報告することです。英語の壁を乗り越えて、日本のプログラマの書いたコードをApacheに反映させることです。


日本のユーザーグループは、いつも「つかうだけ」でプロジェクトへの貢献度が低いと言われてきました。日本ではユーザーグループは「普及」を目的に作られることが多く、本プロジェクトへの貢献を目的としていることはあまりないように思います。Wicket-JAはWicketの普及のためのサポートはしつつ、最大の目標を日本からApacheへのソースコードレベルでの貢献をサポートすることに置きたいと思います。そのための支援の場として、みなさんに協力頂ければと思います。

もちろんWicketを初めて使うひとたちもばんばん使ってほしいです。そのために「wicket-ja-user」というメーリングリストがあるのですから。Wicket-JAはJavaコミュニティの中ではもっとも軽いと思われるJava-jaの飲み会での会話から生まれました。だから肩肘張らずに参加できる雰囲気があります。


まずはWicketを使ってみて、質問してみてください。


ネット上の活動だけじゃなくて、できればWicket勉強会みたいなリアルな会合も開けたらいいな、と思います。こちらはまったくなにも決まってないので、とりあえずは願望だけですけども。


運営に協力したい!という豪儀な方は、wicket-ja-manageメーリングリストに加入しましょう。Wicket-JAの運営についてはここを中心に話を進めて行くことになると思います。


Wicket-JAはまだサイトもできていない、できたてほやほやです! サイトを作る所からいまから始めるのです。Wicketを使ってるよ!という方、Wicketはきいたことあるけど質問する所がないので躊躇してた方、Wicket-JAに参加しましょう! 


よろしくお願いします。

*1Struts ActionやServletを思い出してください。Servletは複数のスレッドから共有されるため、インスタンス変数を使用することは御法度になっています。

*2JavaVMの高速化には、Strongtalkという静的型チェックができるSmalltalk実装のVM技術が利用されています。この技術をSunが会社ごと手に入れ、Java VMの高速化に活用しました(参考)。現在はオープンソース化されています。

ObjectWorksObjectWorks 2008/01/15 09:50 「Smalltalkが実現できなかった実マシンに捕らわれない仮想マシン上でのオブジェクト指向開発を実現しつつ」とありますが、Javaが出てくる遙か前からSmalltalkはマルチプラットフォームで動作する商用の開発環境が出ていましたよ。ObjectWorks Smalltalkというもので、Unix,Windows,Mac,NeXT,OS/2などをサポートしていました。現在はVisualWorksという名前になっています。

sumimsumim 2008/01/15 11:37 いや、たぶん t_yano さんは、その後の「…しつつ、パフォーマンスと開発効率の両方を同時に実現」のほうに重きを置いていらっしゃるのでしょう。>ObjectWorksさん  ただ、Java の高速化には、たぶんに Smalltalk から派生した言語処理系の技術(SELF や Strongtalk の…)が活用されていることは頭の片隅においておいていただきたいな(つまり一方的に DIS るだけではなく、ちょっと持ち上げても罰はあたらんのでは?)とは個人的には思いました。(でもこれは宣伝のエントリーなので、他を DIS ってナンボってところもありですよね(^_^;))

t_yanot_yano 2008/01/15 16:56 どうも矢野です。
そうですね、「Smalltalkが実現できなかった実マシンに捕らわれない仮想マシン上でのオブジェクト指向開発を実現」と書いてしまうとまるでSmalltalkの商用実装が存在しなかったかのように見えますね。私自身もJavaを始める前にMacでSmalltalk/Vとか使ってオブジェクト指向を勉強してましたので、実装が存在しただけでなく、普通に買えたことも知っているわけで、あきらかに誤った記述ですね。ご指摘ありがとうございます。

書こうとしたのは「仮想マシン上でのオブジェクト指向開発の広い普及を実現した」しかも「開発効率と実行効率の両立を目指した」ことだったのですが、そもそもここでSmalltalkを持ち出すこと自体がWicketの話とは関係がないので、そもそも書くべきではなかったですね。

私自身は書いた段階で「DISる」気持ちはなかったのですが、DISってますね。すみません。

該当箇所を削除するのがいいのかもしれませんが、するとこのコメント欄でのやりとりの意味がわからなくなるので、文面変更でいこうと思います。元の文は訂正線をひいて残す形で。

・本文記述を「Smalltalkで培われた技術をベースに高速化を行い、仮想マシンでのオブジェクト指向の広い普及を実現した」といった感じに変更。
・注釈欄でStrongtalkの仮想マシン技術がSunに移り、Javaの高速化に使用されていることを記述。

といった修正をしようと思います。

YouchanYouchan 2008/01/15 17:56 「そこにはServletの仕様に押し込められた世界ではなく、Javaプログラマが愛してやまない世界が広がっています。」
むしろステートフルはServletだからこそ実現できることなのだと思います。
ServletがひとつのJVMで実行され(分散されることもあるけど、仮想的にひとつと捉えてよいでしょう)セッションで共有する情報をメモリ上に蓄積できるからこそ実現できるわけです。
こうしたServletの特有の利点をきちんと生かしているというのは、まさにJavaらしい、正常な進化だと思います。
LL流りの昨今ですが、軒並みServletのようなアプリケーションサーバーを持たない現状においてはまさにJavaの独壇場だと思います。(ASPのことは忘れて><)
wicketにはとても興味が惹かれますね。

sumimsumim 2008/01/15 18:19 正直なところ、Smalltalk ファンの一人として、スルーされるよりは多少ネガティブでも言及はあったほうが良いと思っています。その点、修正案は Java の現在の優位性が確立されるにあたっての Smalltalk 貢献がふまえられていて、すばらしいと思います。

t_yanot_yano 2008/01/15 20:50 前述の方針で記事の修正を行いました。ObjectWorksさん、sumimさん、ご指摘ありがとうございます。

Youchanさん、そうですね、たしかにJavaのウェブアプリケーションはほぼ確実に「サーブレット・エンジン」で動いてそこでセッションを管理できるからこそ、セッションを使ってのステート維持をフレームワークのベースにできるんですね。このあたり私は普段あまり意識してませんが、ふとほかの環境をつかっててこの違いに気づくことがあります。

戯 2008/01/27 13:04 こんにちわ。Ruby大好きですがRailsには疑問感じてました。その核心を「Strutsの延長」という言葉で突いてもらえて強烈に納得しました。

Struts系(アクション系?)とコンポーネント系の違いは、状態保持モデルの「厚さ」の違いな気がします。Strutsは薄っぺらさを感じてます。VB的なコンポーネントモデルに親しんだ身としては、入力系(ActionForm)と出力系(TagLib)とが完全に分かれてて連携は自力管理しないとならないモデルなんて、理解すら出来ませんorz。

私にはStruts系は「作って地獄」に思えてなりません。つまりGUIが数十年前に通過したターニングポイントをまだ通っていないんです。Webアプリもそろそろ次の時代に行くべき。

LLのServletについては、RubyでいえばWEBrickがモロにServletを自称してますし、定番サーバApacheにmod_rubyというブリッジをかませばServlet的なモノになります。つまりCGIじゃなく常駐型に。ただAPI体系のスタンダードが無いだけで。mod_xxxxは他の言語用もそれぞれ有るらしいので、常駐型のメリットから目を背けてるLLばかりではないはず。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証