今回のゲストは、株式会社四次元データの西岡 悠平さんと染田 貴志さんです。おふたりは、Webブラウザ上の操作だけでデータベース連動型 Web アプリケーションを簡単に作成できるツール WebUDA Tuigwaa *1 の開発者です。おふたりに、Tuigwaa の開発経緯や、学生時代の思い出などを語っていただきました。
*1 情報処理推進機構(IPA) 2005年度上期 未踏ソフトウェア創造事業に採択され開発されたアプリケーションで、開発代表者である西岡さんは「天才プログラマー/スーパークリエータ」に認定されています(千葉 滋PM)。現在は 特定非営利活動法人 Seasar ファウンデーションからオープンソースソフトウェアとして提供されています。
西岡さん(写真左) | 染田さん(写真右) | ||
---|---|---|---|
尊敬する人 |
「両親」 父のように誠実で、母のようにやさしくありたいと思っています。結婚したてですので。 |
「特になし」 身近な人で「この人はすごいな」という意味での尊敬はありますが、歴史上の人物に無条件な尊敬を感じることは少ないですね。 |
|
好きな言葉 |
「自動化」 自分のやりたいことに時間を使えるようにしたいんで、コンピュータが得意なことはコンピュータに任せたら良いということです。 |
「自分の血で音楽を作る」 スガシカオさんの言葉です。いろいろなものを学びながら、自分なりのエッセンスみたいなものを出していけるようになりたいなという気持ちからこの言葉を選びました。 |
|
愛用のツール |
「Eclipse (keybind は Emacs)」 ・「ツールには惑わされないように」とかいろいろありますけど、やっぱり便利なんで、Eclipse です。(西岡さん) ・細かいクラスパスオプションとか、Java のコードを書くときは、 Eclipse がないと無理な気がしますね。(染田さん) |
-- まず、おふたりの経歴を簡単にご紹介いただけますか?
[西岡さん]
京都大学の大学院情報学研究科を卒業後、約2年半シスコシステムズ株式会社に勤務しました。IPA の 未踏ソフトウェア創造事業に採択されたのを機に退社し、現在は大学の先輩が経営する株式会社四次元データの方で働かせてもらっています。
[染田さん]
京都大学の大学院情報学研究科を卒業後、サン・マイクロシステムズ株式会社に就職しました。その後は西岡と同じです。未踏ソフトウェア創造事業の期間が終わって、オープンソースとなった Tuigwaa をどうやって続けていくかということで迷っていた時期に、四次元データから、「業務として Tuigwaa の開発を継続しても良い」という旨のお話を頂き、今に至っています。
-- 現在のお仕事について教えていただけますか?
[西岡さん]
私たちが所属しているのは Web 技術研究部という部署で、そこで Tuigwaa の開発を継続しています。Tuigwaa がフレームワークとして導入されている SI 案件が既に数件ありまして、開発効率の向上のためにブラッシュアップを行っています。
[染田さん]
開発プラットフォームとしての強化を目指すとともに、ユーザーインタフェースをよりやさしくするといった方向の強化も行っています。仕事としてはどちらかというと、後者のほうに重きを置いて進んでいますね。
-- Tuigwaa についてお尋ねします。まず、Tuigwaa を作ることになったきっかけを教えていただけますか?
[西岡さん]
現場で考えていたアイデアと、趣味で Web アプリケーションまわりの技術を追いかけているうちに出てきたアイデアが偶然重なって、面白いことができそうだと気づいたことが開発のきっかけです。プログラマでない人でも簡単に使えて、定型のデータと非定型のデータをシームレスに扱えるアプリケーションを作りたいと現場では感じていて、それが、バイトコードエンジニアリング*2を使って POJO*3を作れば、実現できそうだと思ったんですね。
現場で仕事をしていて、情報共有のやり方などで「ちょっと困るな」と思うことが多かったんですね。経営判断に使われるデータを瞬時に収集できるような「上の方」のアプリケーションに比べて、現場レベルで使われているアプリケーションは、いろいろな面で遅れていると感じていました。そういう不満を感じていたときは、よく現場と大学院の研究室との環境の違いを意識したんですね。研究室には、システムが気にいらなかったらみんなで変更を加えていって、自分たちでより良くしていこうという雰囲気がありました。在籍していたメンバーのほとんどがプログラマだったからこその環境だったと思います。職場でもそういう環境にしていきたいと思っていましたが、たとえ優秀なエンジニアであっても、みんながプログラマというわけではないので、難しいなと思っていました。そういう意味で、現場で何かできないかなという思いがありました。
[染田さん]
Tuigwaa の開発を始める前は、僕らはふたりともハードウェアまわりの仕事が中心で、仕事でコードを書くことはほとんどなかったんですが、Web アプリケーションまわりの潮流を追い続けてはいたんですね。ふたりで一緒にコードを書いたりする機会もよくあって、たまたま Hibernate とか Struts でいろいろと遊んでるうちに、バイトコードエンジニアリングで面白いことができるんじゃないかという発想が、西岡の方から「ぽろっと」出てきたんですよ。そして、その1ヶ月後くらいにはプロトタイプができていました。
-- そういった発想はどこから得たんでしょうか? ヒントとなったものがあったりしたんでしょうか?
[西岡さん]
いろいろな製品を使ってみて、情報を集めたということが大きいですね。例えば、 PukiWiki は、誰でも簡単に HTML を編集することができるのですごく便利に感じていたんですね。ですが、メンバーを管理するためのデータをこれで扱うのは面倒だなとも感じていました。その手の定型データの共有を簡単にできる製品もたくさんありますが、それらを使ってみると、今度は Wiki で自由に記述できたような非定型のデータを扱うのが面倒に感じるんですよ。
[染田さん]
いろいろな製品の「おいしいところ取り」みたいな感じです。多くの方に Tuigwaa を評価していただいてますが、Wiki にサイボウズのデヂエのような機能が搭載されたものだとおっしゃる方や、 Ruby on Rails と比較される方など、いろいろな面白い視点でご意見をいただきます。その辺りに、Tuigwaa のあり方が表現されているような気がします。
[西岡さん]
POJO を使うという発想は、Tuigwaa の開発を始めた当時、EJB3 仕様の策定段階でして、「POJO を作りさえすれば何でもうまくいくんだ」という雰囲気があったことに影響を受けています。POJO なら、プログラマがソースコードを書いてからコンパイル、という手順を踏まなくても、一般のユーザーが Web のフォームで作ることができるんじゃないかと思ったんですね。
初めは、本当にバイトコードエンジニアリングでそんなことが可能かどうか疑問でしたが、学生の頃アルバイトで、Java のバイトコードを圧縮するソフトを作ってうまくいった経験があったので、今回もなんとかなるだろうと楽観的に考えていました。実際にうまくいってしまって、現在に至っています(笑)。
*2バイトコード変換ライブラリを用いて、バイナリ形式のクラスファイル(.class拡張子のファイル)の解析、生成、操作を行うこと。
*3 Plain Old Java Object または Plain Ordinary Java Object の略で、本文では、Java Beans 仕様の Bean と同じ意味で使われている。
-- バイトコードエンジニアリングとありましたが、Web から入力されたデータは、どのように処理されるんでしょうか?
[西岡さん]
Web フォームからの情報をもとに、スキーマ定義を行って、Java のクラスを作ります。
-- ソースコードが生成されるということでしょうか?
[西岡さん]
そうではなくて、いきなりクラスを作ってしまって、JVM にロードさせてしまうんですよ。プログラマが Java のソースコードを書いて、コンパイルしたクラスと同じように、POJO、つまり get と set が書かれたクラスが動的に作られる形になっています。これは、千葉先生の Javassist *4 を利用してやっています。
データベースも、スキーマ定義に従って動的に作られています。この部分は、Hibernate のライブラリを利用して、クラスに対応するテーブルを作っていまして、データはそのままこのテーブルに入る仕組みです。面白いことに、Hibernate もそれをちゃんとクラスだと認識してくれますし、Struts から見ても、本当にクラスとして振るまってくれるんですね。
-- Struts や Hibernate を使う場合は、XML の定義ファイルを書く必要がありますよね。それらも読み込んだデータから動的に作っているんでしょうか?
[染田さん]
そうです。結局、XML で記述されたファイルも、JVM の中ではオブジェクトなんですね。Hibernate のデータの表現としての POJO、DTO*5 もそうですし、それらにひもづくようなコンフィグもそうです。それらをまとめて、Web のフォームでボタンを「ポチっ」と押したタイミングで、一斉に作ってしまいます。Tuigwaa における、データを扱う肝の部分だと言えます。イメージとしては、アノテーション*6を付加してでき上がるクラスに近いと思います。
-- 入力用のフォームはどのように作られるんでしょうか?
[染田さん]
データを扱うレイヤとは違うレイヤに、Wiki のエンジンがあります。Wiki のコンテンツの中に、プラグインという形でデータベースの入力フォームを作ることができるんですね。ページの遷移に関しては、WikiWay という書籍のアイデアを採用して、ユーザーがデータを入れた時点で遷移先のページが存在していなかったら、新しくページを追加します。
-- Wiki のエンジンは自作されたんでしょうか?
[染田さん]
はい。JavaCC を使って作りました。正規表現でやっても良かったのですが、同じ Wiki のソースから別のアウトプットを出したいと思ったときに、また同じ正規表現を1から書かなくてはならないのは面倒に感じたので、JavaCC でやりました。
[西岡さん]
Java で書かれたオープンソースのライブラリは一通り探してみたのですが、Wiki のエンジンに限って言うと、これというものがなかったんですね。ならば作ってしまおうと思い、構文木からちゃんと作りました。
[染田さん]
Tuigwaa は、基本的に「車輪は2度開発しない」の精神で作っていまして、ありそうなものは大抵ありものを使うんですが、これは例外ですね。
-- 自分でソースコードを書いて作った Java のクラスを、この中で使ったりすることはできるんでしょうか?
[西岡さん]
既存の Java クラスを読み込んで POJO として使うこともできますし、既存のテーブルなどを読み込んで同じように扱うこともできます。「テーブルから作るか、クラスから作るか」というような、いろいろな方針に対応できるようにしたかったんですね。ただ、例えば、テーブル読み込むときは PRIMARY KEY がひとつじゃないとだめであるとか、ちょっとした制約があります。
また、やり方などがまだまだ汚いところがあるのでドキュメントを公開していないんですが、プラグイン的に Java のクラスなどを追加して、データが入力される瞬間にだけ、いろいろなカスタマイズを適用させることなどができるようになってます。ゆくゆくはちょっとしたスクリプトを書くだけで、そういうことが実現できるようにしたいと思っています。
*4 バイトコード変換ライブラリのひとつ。OO エンジニアの輪 〜 第 35 回 千葉 滋 さんの巻 〜に作者である千葉さんご本人による解説があります。
*5 Data Transfer Object - プロセスまたはネットワークの境界を介して転送されるデータの集まりを格納するオブジェクト。
*6 Annotation - 注釈。クラス、メソッド、フィールドなどに特別な意味を付加するためのメタデータ。
-- 開発時における役割分担はどのようにされていたんでしょうか?
[染田さん]
当初は、西岡がデータ周りの肝の部分、足回りの部分、そして、JavaScript を担当し、僕は認証まわりとか、Wiki エンジンの実装といった、コンテンツ周辺部分の担当ということでスタートしました。今はお互いのソースに対して、変更を加え合っていたりするところが結構あります。
-- 開発時のコミュニケーションはどのようにされていたんでしょうか? 例えば、モデルを描かれたりされたんでしょうか?
[染田さん]
ある程度綺麗に役割が分担されていたので、モデルを描いて共有しようという場面はそれほど多くはなかったですね。未踏ソフトウェア創造事業に専念していた時は、私も西岡も会社を辞めて社会的には無職と言いますか、よく「ニート」って言われながらやっていました(笑)。そういう状態でしたので、ほぼ毎日 Skype で電話をしていたんですね。西岡の嫁さんよりも僕の方が頻繁に話をしていた程です(笑)。
あとは、1ヶ月か1ヶ月半かに1回の頻度で、合宿と称してどちらかの家に集まり、機能結合や大掛かりなリファクタリングを行っていました。そのときは、クラス構造とか機能関連とか、日頃から持ち歩いてましたノートに、ざっくりとした UML っぽいものを描いていました。必ずしも正確な図ではなかったのですが。
-- 描かれていた図は、静的な図が多かったんでしょうか?
[西岡さん]
そうですね。静的な図が中心です。多分、今見ても解読不可能なんですが(笑)。
[染田さん]
僕たちは「仕事でアプリケーションを開発する」ということをまったく経験していない状態で未踏ソフトウェア創造事業に応募してしまって、千葉先生からも、コケるとしたらその点だと言われていました。ですから、なんとなく知っているだけのツールでも、解読不可能なくらいに汚くなったものでも、とにかく開発に関するコミュニケーションに使えるものならなんでも使っていましたね。
[西岡さん]
モデルそのものはあまり描いていないのですが、MDA って言葉はすごく好きなんですよ。その精神を参考にして、Tuigwaa では「UDA」という言葉を使ってます。「U」は「UML」ではなくて、「User」なんですけどね(笑)。
-- 今後、どういう方向で Tuigwaa を発展させたいと考えているのでしょうか?
[西岡さん]
ダウンロードの必要があったところを ASP 化したり、IT リテラシーがそんなに高くない人でも簡単に使えて、UI が綺麗で、情報の共有・整理が、各個人主導でできるようになったらいいなと考えています。
[染田さん]
他のツールとの連携という観点では、明日の Seasar Conference 2006 Autumn *7 で、ワークフローエンジンS2Buriと Tuigwaa をくっつけるという話 *8 をする予定なんですが、S2Buri も POJO を中心に考えて作られているということでした。Seaser に限らず、他のフレームワークが POJO を中心に考えて作られていさえすれば、連携がいろいろな形でとれるんじゃないかなという期待があります。
*7 今回のインタビューは、Seasar Conference 2006 Autumn の前日に行われました。
*8 染田さんの発表資料 「ユーザ駆動でお仕事2.0へ!Tuigwaaではじめるお手軽Webワークフロー」(pdf)
-- Tuigwaa の使用例や、おすすめしたい使い方はありますか?
[染田さん]
ちょっとしたアンケートや出欠簿が、使用例としてはよくあげられるケースではないかなと思っています。まさに西岡は、自分の結婚式の2次会の出欠簿を、Tuigwaa でやっていますね。
[西岡さん]
たまたま幹事の方が使ってくれたんですよ。その方はプログラマではないんですが、独力でデータベースなどを定義してやってくれたんですね。出欠者確認のような定型データはテーブルで扱って、「こんな企画やろう」といったアイデアを共有するところは Wiki を使って、1つのサイトだけで完結できたので、便利でした。
開発者ならではの使用例としては、未踏ソフトウェアの報告書を Tuigwaa だけで完成させたことですね。千葉先生から「毎月自分の Web サイトで報告してください」と言われていまして、最初は PukiWiki を使っていたんですが、途中から Tuigwaa で報告できるようになりました。最終的な報告書として、PDF か Word で書いたものを 30〜40 枚程度で出してくださいとも言われていたのですが、コンテンツを PDF 化してダウンロードする機能を追加したので、それも含めて、Tuigwaa だけで報告書を完成させることができました。
[染田さん]
未踏ソフトウェア創造事業の成果報告会の受付サイトに使った例もありますね。「報告会に来られた皆様は、申し込みをしていただいた時点で、僕たちの成果を目にしています」というネタなんです(笑)。
-- Seaser Conference 2006 Spring の時もそういうネタを披露されていましたよね?
[染田さん]
すいません(笑)。「実は皆様」って、デモするときには必ず言っている、いつものネタなんです。
[西岡さん]
そろそろ新ネタを考えないとね(笑)。
-- おふたりが仲良くなられたきっかけをお伺いしたいのですが、初めて出会ったのはいつのことでしょうか?
[西岡さん]
10年以上前のことになります。大学の入学年度、学科、クラスが同じでした。特に仲良くなったのは、「iモードでおもしろいサイトを作ろう」という趣旨のコンテストに一緒に参加して以来ですね。
-- そのコンテストでは、どんなアプリケーションを作られたんでしょうか?
[染田さん]
携帯で映画のデータベースにタイトルや俳優名で問い合せると、他の人の感想と点数や、その平均点などを見ることができるアプリケーションでした。自分たちで「こういうものがあったらいいよね」と思ったものを作りました。おまけに、何の脈略もなく、ログイン時におすすめビデオがランダムに表示される仕掛けになってましたね。
-- Amazon とか、まさにそんな感じですね
[西岡さん]
今考えたら Web2.0 アプリケーションでした(笑)。それから、iモード関係では、アルバイトも一緒にやっていました。
-- 先ほどの話にあった、Java のバイトコードを圧縮するソフトのことでしょうか?
[西岡さん]
はい。当時、iモードのiアプリは 10KByte までという制約があったので、それに対応するためのものです。既存のiアプリのクラスファイルを読み込んで、短くできるところを短くして吐き出し、iアプリとして再ロードさせるというようなソフトです。
-- ファイルの圧縮というと、ZIP のようなものを想像してしまいますが、この場合は、機能やデータはそのまま利用できるものという意味なんでしょうか?
[染田さん]
そうです。機能としてはまったく一緒で、シンボルの持ち方とかネームスペースの取り方でサイズを縮めたものです。
[西岡さん]
例えば、単純に "Hello.class" っていうファイルが "H.class" になったら "ello" が減るんで、クラスファイルとしてサイズが小さくなりますよね。さらにいろいろな工夫をしてもっと小さくしたんですけれども。
iモードが出た当時は、サイズに気をつかって、iモード用のプログラミングをしようっていう雰囲気があったんですよ。でも僕はそれがすごく気にいらなかったんですね。ちゃんとオブジェクト指向でクラスを書いて、ツールを使ってサイズを小さくする方がいいんだという発想です。
-- 休日はどのように過ごされているのでしょうか?
[西岡さん]
新婚なので、一緒に出かけたりすることが多いです。
あとはコードを書いたりとかですね。最近は、Google API を使って面白いことができないかなと思っています。Tuigwaa から離れたところでもそういうので遊んでますね。
[染田さん]
僕もコードを書くことが半分趣味なところがあるので、軽めのコードをちょろちょろ書いていますね。それから、学生時代にバンドとかやっていたというのもあるんですが、音楽聞くのが大好きです。外に聞きに行ったりとか、家で聞いたりとかしています。
-- どのようなジャンルをお聞きになるんでしょうか?
[染田さん]
ブラックミュージック、特にFunk が好きです。James Brown とか、リズムの強いものが好きですね。彼らの音には、情報があふれている世の中であっても、それを否定せずに、吸収して何かを作り出していくという力強さがあります。「血」という言葉を、雑誌のインタビューでスガシカオさんが使っていたんですが、先人から受け継いだ感性を音楽で発揮していくことの凄さと、その語られている文脈の重さに、何か惹かれるものがあったんですね。
他にも、「なんちゃって」で Jazz を聞くこともあるんですけど、一方で毎年フジロックには欠かさず行っていまして、結局何が好きなんだっていう感じです(笑)。
あと、ふたりの共通点としては、「ミステリー好き」だったりするので、読書ですね。どちらかというとインドアで、あんまり活発に外には出ないほうです(笑)。
[西岡さん]
流行のミステリーとか結構読んでますね。日本人作家のですが。
-- ミステリーの情報交換はなされたりするんでしょうか?
[染田さん]
本の貸し借りはよくやってますね。僕と西岡が好きなミステリー作家は、東野圭吾さんとか、伊坂幸太郎さんとか、森博嗣さんとか、理系であったりエンジニアであったりと、技術畑の人が多いんですよ。
[西岡さん]
一回ハマると、全然技術書を読まなくなって、小説ばっかり読むようになってしまいますね。何かそういうのって、流れがありますよね。
-- 最後に、若手エンジニアに向けて一言お願いします。と言っても、おふたりともまだお若いのですが。
[染田さん]
現在の混沌とした様子は、10年後とか20年後に振り返ってみても、きっとすごく面白い時期なんだと思います。ネットユーティリティを含むインフラまわりが加速していく中で、それに向けて「どんなハードウェアが出てくるんだ?」という増幅感や期待がいろいろなところで見えているタイミングで、種がいろいろなところで見えていますよね。
そういう時期ですので、一緒に頑張りましょう。
[西岡さん]
さらに若い学生に向けて一言「もうちょいがんばれよ」と言いたいですね。うちに来ているアルバイトがいるんですけど、バイト休むときにも連絡とかあんまりしてくれないんですよ(笑)。
[染田さん]
「近頃の若いもんは」って、飲み屋で愚痴っているみたいになってますね(笑)。
[西岡さん]
やっぱり僕も「一緒に頑張りましょう」でいいですか(笑)。
-- はい(笑)。本日はどうもありがとうございました。
©2007 OGIS-RI Co., Ltd. |
|