ObjectSquare [2008 年 3 月号]

[OOエンジニアの輪!]

OOエンジニアの輪!

OOエンジニアの輪!

第 40 回 関 将俊 さんの巻

今回のゲストは、関将俊さんです。関さんは Ruby の分散オブジェクトライブラリ dRuby やテンプレートエンジン ERB 等を開発しています。また eXtreme Programming を実践されている方としても有名です。

face1
尊敬する人

今一緒に仕事をしている人たち

好きな言葉

「無理をしない」

愛用のツール

iBook (G4)


自己紹介

--- 簡単に自己紹介をお願いします。最近されていることのお話をお願いできますか?

昨年末から、インターナショナル・ジャーナル・オブ・パラレル・プログラミング(International Journal of Parallel Programming)という学会誌か論文誌かの記事をやってます。そこの編集の人から「20ページ書いて」っていう依頼が来て、日本語で書いて、みんなが英訳してくれてと、年末から今年の初めまでやってたんですけど。編集の人かなと思ってた人は、エール大で L で始まる Linda*1を作った人たちの 1 人ですね。

--- Lindaってオリジナルは結構昔ですよね?

うん、80 年代末くらいに出てますよね。概念は残っちゃうんじゃないですかね。

--- お昼の仕事は?

医用機器を作っていて、組込みソフトをやっています。組込みって言ってもピンからキリまであって、ROM 焼くようなやつだけじゃなくて、OS の上に乗っかるようなところまで・・・

--- お仕事は C ですか?

うん、C と C++。Ruby はツールとして使ってますけど、製品に乗ったりはしないですよね。

--- SI 業的な感じではないんですか?

たぶん IT 業界っぽく言うと、ユーザ企業が製品を作ってる。自分たちの製品を自分たちで作ってる状態です。

--- だからユーザさんとの距離はほぼ無いという状態なんですね。

うん、ない。

--- チームの人数って何人くらいですか?

ヒミツです。

--- ちなみに、関さんっておいくつなんですか?

ヒミツなんですよ(笑)。○○才ですけどね。

--- るびマと同じ 20 代前半にしておきますか(笑)。

須藤さんとのつながり

--- 須藤さんとのつながりは?

須藤さんとのつながりは・・・Div/Tofu*3 を使って、Web メールみたいなやつを須藤さんが書いていて。

--- Div/Tofu は Rabbit*4 でも内部的に使ってましたよね?

使ってますね。Web のインタフェースがあるはずです。そのときは、僕は須藤さんを知らなかったんですよ。とある人に、Div/Tofu を使ってる人がいるよって言われて。あー、いるんだと思っていたら、須藤さんが RWiki に参加してくれて。

---では関さんの dRuby*5 本を書いている前ですか?

うーん、もうちょっと前かな? これ書いているときは、もう須藤さんはレビューアに入ってくれてて。

--- Div/Tofuっていうのは、どんなフレームワークだったんですか?

Web UI のフレームワーク、というよりも UI のフレームワークの Web 版みたいな感じ。一般的な Web アプリケーションのフレームワークのデザインって、僕は好きじゃない。UI のところだけじゃなくて、モデルや DB の部分まで一枚岩でドーンというところが凄い、っていうけど。そうじゃなくて、モデルや DB のところはなんでも良くて、UI としての Web、HTTP の UI。そのためのフレームワークなんですけどね。

--- どちらかっていうとグラフィックツールキットみたいな・・・

いや、レンダリングツールっていう意味じゃなくて。たとえば、従来ではターミナルで作っていたようなプログラムがあって、その上に GUI 載せましたっていう気持ちで Web UI を載せるとしたら、一枚岩のフレームワークにはならないですよね。それとは全然違うモデルで作られるべきだ、という風な主張で Div/Tofu は作られている。だから、X11 で言うと Xt くらいのところしか担当してない。イベントのディスパッチとか、セッションの管理とか。

--- 例えば Rails*6 だとフルスタックで一枚岩のフレームワークになりますね。

インタビュー風景

一枚岩が悪いって訳じゃないけど、それは Web「アプリケーション」のフレームワークであって、僕がやりたいのは Web のインタフェースのフレームワーク。自宅で DB 使うシチュエーションが思いつかないんですよね。

--- 確かに、ないですね(笑)。趣味で作るものではないですしねぇ・・・

前に作ったのはパズルみたいなもの・・・

--- 数独とかですか?

違うな、こうパネルをかちかち動かす奴。名前忘れちゃった・・・

--- 箱入り娘*7ですね。

あーそう、箱入り娘が Tk 版と Div 版で同じソースで動くんですよ。それって、インタフェースが Web インタフェースというだけで DB は全然関係ないじゃないですか。ホントにモデルと UI が分けられてるなら、UI だけ独立して変えたい。

プログラミング歴

プログラミングを始めたきっかけ

---プログラミングを始めたきっかけは?

プログラミングを始めたきっかけってなんだろうな〜。第一次パソコンブームみたいなのが、あったんじゃないんですかね。

--- 第一次パソコンブームっていうと・・・

PC-8001 とか MZ-80 とか。そういう時代の・・・

--- じゃ、始めた言語は BASIC だったんですか?

始めた言語は BASIC ですね。それしかなかったですもんね。

--- 何 BASIC ですか?

シャープ MZ-80 の BASIC。SP-5030っていう奴。

--- MZ-80 ですか?

そうそうそう、一体型の奴(笑)。

--- 意外とやってた人多いですね、BASIC。

当時他になかったんじゃないですか。その他だと、もうアセンブラで直接書くみたいな形になるし。高校ぐらいまでそうゆうのをやってて、大学入ってからは SE/30*8

--- いきなり SE/30 ですか!当時 Macintosh は高価でしたが、大学にあった物ですか? 授業で使ったとか

授業では VAX とか使ってた。

--- じゃ SE/30 は自宅機だったんですか? すごい(笑)。大学時代はプログラミングは?

プログラミングはしましたよ。授業でもあったけど、趣味というか、面白そうだから触ってた。

--- 言語は何を?

その当時は、Object Pascal と Smalltalk/V とか。あ、でも Turbo Pascal も確かやりましたね。今だとなんでしたっけ、Delphi か。

--- じゃあ Pascal と Smalltalk、静的と動的の二大言語を押さえてる感じで。

そうですね。Object Pascal の方が良くできてた気がしますね。

--- MPW(Machintosh Programming Workshop)*9 とかですか?

いや、Think Pascal(旧名 Light Speed Pascal)ですね。Think Pascal がすばらしかった。

--- Smalltalk/V はどういう環境で動くものを使っていたんですか?

それも Mac で動くものですね。ちっちゃいですよ。当時から PC98 とかでも動いてたんじゃないですかね。

当時の情報源

--- 当時、90 年代前半ぐらいですかね、情報はどこで入手していましたか?

情報は雑誌しかなかった。ネットとかあんまりつながらなかったですから。だから、多分雑誌ですよね。雑誌が売れてた頃ですよね。

--- Dr.Dobb's Journal とかの流れですか?

そう、そうだったと思います。こうなんか、質が同人誌みたいな(笑)。誌上もそうだけど、内容が(笑)。

--- 雑誌がパワーのあった時代ですね。もう今となってはプログラム系は滅多に買わないですもんね。

毎年入門編やってますよね(笑)。

--- いろいろ特化してて、全般を扱う雑誌はもう無くなっちゃいましたね。

『WEB+DB PRESS』はちょっとプログラミングっぽいのかな。でも結局、本当の情報はウェブ見てね、みたいなオチが多いですよね(笑)。

--- オブジェクト指向に興味を持ったのはいつぐらいからですか?

興味を持ったのは、もっと前で大学の時から。オブジェクト指向の用語が流行りはじめたのも、その頃からじゃないですか。日本で流行ってたのが 80 年代くらい。でも実体はよく分かんなかったですよね。なんか触ってみたいな〜、とか。

インタビュー風景

--- その頃からずっと、継続的に興味があって・・・

そうですねー、興味なのかな? ごくありふれた何かなんじゃないかな。特に興味ってわけじゃないんですけどね。

--- もう完全に普通になっちゃってますね。Smalltalk まで行くとオブジェクト指向は普通ですもんね。

Object Pascal の方が馴染みやすかったですね。Smalltalk はシステムが元々大きいから、文字出すだけでもどうすんだっけ、とか調べることが色々と多いから。

--- 就職された後は、ずっと主戦場は C ですか?

C ですね。会社に入ってから本格的にやりましたね。大学時代からちょっとは触ってたけど。

--- OO でやるって感じだったんですか?

うん、普通にデザインしたらそうなっちゃうから。特に OO をやるとかやらないとかはなかった。

--- 現場もそういうのは許されるんですか? 「こういう風に作れ」みたいな圧力はないんですか?

圧力はないけど、なんでこうなってるのか理解できないというのはあった。

Ruby

Ruby との付き合い

--- Ruby*10 との出会いはいつぐらいですか?

えっとね、まつもとさんが初版(ver1.0)をネットニュースに流したときに見ました。でも、ビルドできなかったんですよね。fj.lang.oops かなんかで流れてたのかな、fj.src かな。忘れちゃったけど。そこで流れてて、あーオブジェクト指向でスクリプト言語なんだ、とか。

--- ビルドはなぜ出来なかったんですか?

いや、単にまつもとさんが使ってないマシンだったからじゃないですか(笑)。ビルドが出来なかったから、いったん寝かせてあって。そのうち動くようになって。

--- 本格的に Ruby と付き合い始めたのはいつごろですか?

99 年とか 98 年とか、そのくらいですよね。あんまり覚えてないですけど。

--- じゃあ、ファーストコンタクトから結構寝かせてたんですね。

たぶん・・・そうですね。家庭で Linux とか使うようになったぐらいの頃から、本格的に使えるようになったんじゃないですかね。Slackware*11 を使えとかいろいろ言われたけど、とてもあれをフロッピーで運ぶのには耐えられなかった(笑)。

--- 当時はフロッピーだったんですね(笑)。家庭で Linux が使えるようになってから Ruby が使いやすくなりましたか?

うん、使いやすくなりました。

ERB

インタビュー風景

--- 本格的に Ruby で始めたのは ERB*12 を作り始めたのが最初ですか? ERB を作ろうと思ったきっかけはなんだったんですか?

きっかけは、まつもとさんが eRuby の外部仕様をメーリングリストに投げたから。「こんなのが欲しい」と言ってたから、「こういうのですか」って作って返して。

--- eruby*13 より ERB の方が先だったんですか?

うん。でも、きっとその頃は、前田さんが私より先に作ってたんだと思いますけどね。後の方で、前田さんの実装に参考になるところがあって。というのは、行番号を維持しないとデバッグのときに辛いんだっていうのが。文字列を連結するときに一回でやりたいからって繋げちゃってたんですけど、それだとデバッグしたいときにエラー情報が手に入らないから敢えて分けるんだ、っていうのを見せてもらって、あー、そういう風にしないとみんな困るんだ。その頃、PHP*14 とか知らなかったんですよね、そんなものがあるなんて。だから言ってる意味が最初分からなくて。

--- 取り入れたと

うん。だから ERB はああいう風にライブラリとして作られてて、組み込まれるのが前提になってるんだけど。前田さんの eruby はコマンドラインで、コマンドとして作られていて、PHP、Perl のテンプレート言語っぽく使われるようになってましたよね。その文字列の置換っていう規則は同じだけど、出来上がったものは使い方が違う。

--- Rails は eruby なんですか? ERB なんですか?

ERB じゃないですか。

--- まさか 2007 年とか 2008 年とかまでバリバリ使われてるって、当時はあまりイメージしてなかったんじゃないですか?

あー欲しい人がいるんだー、っていうぐらいでしたね。

dRuby

--- ERB を開発された後、dRuby*16 を開発されたんですね? dRuby とか分散に興味持ったのって、なぜなんですか?

分散オブジェクトはけっこう前から気にはなってたんですけど、具体例が触れるところに無かったんですよ、昔。

--- そうですね、CORBA*17 の実装は一部を除いてほとんど商用製品でしたね。

これだけしないとできないんだったら、Sun の RPC の方が簡単じゃんと思いながら見てたんですけど。この複雑さにはきっとなにか理由があるんだろうなと。Objective -C の DO*18 だとすごい簡単にできるんだよ、とある人に言われたことがあったんですけど、それとは話が違うなと思ってました。

--- CORBA だと IDL コンパイルとかやらなきゃいけないし。スタブとか作んなきゃいけないし。

うん。だいたい C で書けるはずないよな、受け側の言語にスレッドがないとしたらそもそも待ち受けするのどうすんの? 特別なプログラム書くんだろうな、とか思ってました。CORBA の本はちらっと見たけど、話がデカいわりに具体的なことが書いてなくって・・・と思ったら突然 IDL の具体的な話があって(笑)分かんない。だからそもそも CORBA は興味もないっていうか、目指してもなくって。

--- 当時 Java だと HORB*19 とか RMI もありましたよね?

HORB は、dRuby 書いてたら HORBってのがあるんだよって教えてもらって、へーとか言ってるような感じだった。

--- ではリモートのオブジェクト呼び出し機構を、ほとんどゼロから考えたということですね。

うん。既存の RMI とか RPC とかを Ruby に持ってきたいとかそういうのは全然なくって、Ruby のメッセージ呼出をネットワークに拡張したらどうなるのかな、って。

--- じゃ作ったらだいたい同じに?

同じ、っちゃあ同じだけど。見る人によっては、dRuby のプロキシはなんで 1 つしかないんだ?って。それは Ruby だからなんですけどね。

--- ほとんどオリジナルですね。

うん。ERB も結局のところ、PHP の Ruby 版が欲しいとかそういう動機は全然ないから、結局似ないんですよね(笑)。

--- そもそも動機が違うってことですね。

動機が違う。別にそういうのをやってる人たちを否定するとか、そういう意味じゃないけど、多分僕はそういうのが合わないっていうか、真面目に研究するような根性がないから、既存のものをよく調べたりとかいう体力がないんですよね(笑)。

--- RWiki*20 を作り始めたのもこの頃ですか?

うん、それは dRuby と ERB を書いたけど、そのサンプルプログラムが無いので。当時出てきた色んなライブラリのサンプルを作ろうかなーと。排他制御系の Mutex の何かとか、ちょっと覚えてないですけど。あと RDtoolとか。

--- そこら辺を全部乗せた、みたいな感じなんですね。

最初はインストールが辛かったですけどね(笑)。今はだいたい Ruby に乗っちゃってるから、手間なく入っちゃいますけどね。

--- それにしても元ネタ無しで dRuby みたいなのができるってすごいと思います。

実装に関しての元ネタは、原さんの httpservっていうちっちゃな HTTP サーバがあったんですよ。今の WEBRick*21 よりもちっちゃいような。Ruby のネットワークプログラミングをどうするかは、それを見てました。

インタビュー風景

--- 「完成形ってこんな感じ」ってところまで作るのが、結構大変かなと思ったんですけど。

どっちかっていうと、完成形もあんまり決まってなくて、これで使う意味あるのかな〜、とかってことをずっと考えてて。だから、サンプル作らなきゃなとか思うのかもしれないですけど。こういうシチュエーションだとどうなるんだろうっていうのが、これを使って意味があるのかって視点で見た時にここに穴があったら使えないよな、とか。

--- ちょっとユースケースを考えてみて、単に意味ない仕組みを作ってもしょうがないっていう。

そうですね。気付かないところで勝手に動く変な仕組みとかが入ってるんだけど、プログラマが気が付かないくらいに自然にしときたいですよね。

--- 分散系だと、ユースケースを考えるのが結構大変だったりしますか?

大変・・・? 比較できないから分からないですけど・・・まあ、あまり教えてくれないですからね。

--- 少なくとも CORBA の本とか読んでも、使い方っていう立場ではそんなに書いてないですよね。

CORBA のレベルだと、単に呼び出せました、だけで。

思いついたことを実装してみる

--- 思いついたことを実装してみる。そのために dRuby とか作りきっちゃうのはすごいですね。

小さいですけどね、dRuby は。

--- 作り始めてから数えると結構長いんじゃないですか?

特に機能増やしたりはやってないし、今行数が長いのはほとんど RDoc とかが入っているから長いってだけで。

--- じゃ、ほとんど最初に作った初期版とそんなに変わっていない?

仕掛けはかわってないですね。プロトコルを増やしたいといった事に対応する仕掛けが入ったりはしているけど、本質的なロジックは変わっていない。

--- 最初に見積もったアイデアが結構当たってたってことですか?

そうですね。大抵そうなんですけど、根っこの辺しか作ってないので、結局外れないですよ。大風呂敷広げちゃうと外れる範囲が広くなるわけじゃないですか。だからリモート呼び出ししかしないって特化しちゃえば、外す余地が減りますよね。

--- なるほど(笑)。

ネームサーバーとかやり始めちゃうとユースケースが見切れないから、多分外すんじゃないかな。

--- ソフトウェアってみんなの言うことを聞いていくとだんだん膨らんでいきますよね?

まあ、そうでしょうね。でも範囲をもともとしぼってあるってみんなが分かっているとしたら、そんなこともあまり言われない。

--- 面倒みないといけないという必要がないですもんね。

軽いヤツはみんなそうなんじゃないですかね(笑)。これの時のこれが欲しいんだけどとか言われちゃうとつらいですよね、それ。

--- そこでこういうことやらないって決める事の方が難しそうですね。ある程度、周りの人から理不尽に思えてもコレやらないっていう強さが必要で。

そうですね。答えるの難しいんですよね、英語で聞かれちゃうと。日本語でも大変だけど。受け入れるのは簡単なんですけどね。

--- 断るには理由を書かないといけないですからね。

dRuby3.0 作るからって言われたことがありましたね。結構分からなかったな、今でも全然わかんない。

--- 完全にスルーしてしまった?

一応返信してるけど、、、コネクション減らす方法を思いついちゃったみたいな事言ってた。

--- でも、それでも提案は精査しなくちゃいけない?

まあ、そうですね。大変ですね。提案するくらないなら作っちゃえばいいのにね。

Rinda

--- Rinda*22 は dRuby の応用例として開発されたんですか?

そうですね。Rinda 自体は単にスレッドの同期メカニズムとして書かれてて、dRuby をかませればリモートからも使える。

インタビュー風景

--- 分散環境じゃなくてローカルだけだったんですね?

いや、プログラミング的・実装的にそうなっているというだけで、結局スレッドの同期メカニズムは何もしなくてもプロセス間同期メカニズムになるから。分散向けの実装はあんまりしないけど、スレッドの同期メカニズムとしてちゃんと作ってある。前田さんが作った Monitor Mix-in とかを使って、その基本的な排他制御とかをやって。

--- で、dRuby を使えば分散にもできると。

うん。分散にもできる。

--- Rindaって当時と比べると、今の方が逆に注目されているみたいですね。

どうなんですかね。ここ一年くらいだと、MapReduce*23 の論文の孫引きをしたブログを読んだ人が反応、とか(笑)。

--- MapReduce の実装を Rinda 使って出来ないか、みたいなことを関さんのブログにちょっと書いてありましたね。

MapReduce のプロセス間通信用としての、というかタスクの協調用として、とかはあるんですけど、ストレージとして向くか向かないか、というと多分僕は向かないと思う。専用のやつを作った方がいいような。Rinda は知ってるキーが無いと多分軽く動かない。MapReduce の応用例は、たとえば単語を数えるとか、単語が出現するところはどこか、とかのユースケースを考えたときに、単語は未知な単語で、順番にアクセスしたいだけとか。Rinda はそういうのにあんまり速くないというか、面倒くさいんですよね。

--- そうですね、まさにユースケースというか、分野が違うのかもしれないですね。あとの応用例は Rails とかと連携したりするんですかね?

どうなんですかね。協調の試作をするところまではすごい上手く動いちゃうんで、その後実際に実運用するときどうするかっていうと、やっぱり緩すぎるというか、もしかして専用のクラス作った方が簡単になっちゃうことが多いんじゃないかな、と思う。キューで良かったわ、ってやってみたら分かったとか、そこまで仕組みが、パターンマッチがあったりする必要はないなとか、気付くような気もするんですよね。ただ最初の実験としては、なにも考えないでただ協調させるときは楽だと思います。もしかしたら上手く動くのかもしれない。上手い方法が・・・

--- どっか海外とかで面白い例が出てくるかも知れないですね。

出てくるといいですけどね(笑)。

Pragmatic から訳本を出版

--- 今回英訳された・・・年末に書かれた文書は、論文になるんですか?

論文なのかな? "article"って書いてあったから、記事なんだろうと思うんですけどね。その度合いが、僕はよく分かんないですけど。

--- dRuby と Rinda の紹介記事ですね。記事の公開で面白い例が来るかもしれないですね。

うん。あと、dRuby 本の訳本が出ますよ、きっと。

--- おぉ、本当ですか? すごい!外国の人が誰か翻訳し始めているということですか?

いつか分かんないけど、Pragmatic Bookshelf*24 から出る、らしいです。多分大変だと思いますよ。これであってるの?って英語で見せられても分かんないし(笑)。

分散オブジェクトの未来

--- 分散オブジェクトの未来について聞こうと思っていたんですが、、、お話を聞くと分散オブジェクト自体に興味があるってわけではないですね?

うーん、もしあるとしたら、分散オブジェクトにする必要がどのくらいあるのかがよく分からないから、そういう意味で興味があって。分散オブジェクトを使え!とか、そういう風な興味はあまりない。分散オブジェクトっていうカテゴリがもしあったとして、そのカテゴリがどのくらい他の技術の人たちの役に立っているのかっていうのが、よく分かんない。分かんないというか、ちょっと疑問が。

--- 例えば分散オブジェクトを使うとこういう未来になるんですよ、みたいなことを言うつもりは全然ない、ということですね? どちらかというと、分散オブジェクトの意味を考えたいから作った、って感じですか?

そういうところもありますね。たぶん、Rinda もそういう感じですね。これで本当に役に立つのかが想像しきれない。サンプルを書いて、こういうときには利くね、っていうのが知りたいですよね。

--- なるほど。じゃ、Ruby は自分のアイデアの確認のための道具として使っているんですか?

ま、そういう面もありますね。普通に足し算するのにも使うけど(笑)。アイデアの確認にはすごい便利ですよね。何も考えなくてっていうか嫌な準備をしなくてもなんでも動くし、なんでもやりたいことは大体出来るから。

XP/開発プロセス/テスト

--- 次は開発プロセス関係の話題にうつりたいと思います。現在のお仕事では、サブチームのレベルでは XP とかアジャイルをかなり実践されてますね。

うん、かなりやっています。

--- XP やアジャイルを試みてからずっと継続的にやってるんですか?

7 年くらい。でも、多分やってる人は XP でやってると思ってないと思います。そういう話はしてないです。はじめに入った時からそれしか知らないから、他と違うことを知らない人が多いのかもしれないです。

--- エリートですね(笑) 。どのようなプラクティスを重視してますか?

うちが一番注意しているのは計画ゲームとか、ストーリーカード・・・他のやつは、普通のプログラミングテクニックですよね? 計画ゲームが無いと XP としての意味がないというか・・・

--- そうですね。でも計画ゲームは実践が難しそうですね。

どっちかっていうと、そういうビジネス側とどうやってネゴを取り合うかっていう。会社にその環境を作るのはどうやるか思いつかないですね。うちは出来たけど。だから、どこでも出来る方法は、多分ない・・・最初の環境をどうやって作れるかは・・・

--- 人間関係が重要そうですね。いきなり導入できないですもんね。

うん。

--- XP、アジャイルとの出会いはいつくらいですか? Kent Beck の白い本が出始めた頃ですか?

多分 2001 年ぐらいだと思う。出る前くらいかなんかだと思います。なんか当時、流行ってましたよね? ほかでも。なんか絵が描いてあるヤツ。絵を指している絵を使って。平鍋さんの所かな*25。プラクティス同士がこうつながるような絵のやつ。計画ゲームとかは共感できて。

--- 計画ゲームに関さんのツボがある感じがしますね。

計画ゲームは、何かある山を越えないとできない何かが結構あるんですよ。他のプラクティスに限って言えば、導入しても普通のプログラミングテクニックとかわらない。うまくやっている所はやってた事で、みんな知ってたよねっていう気がするんです。例えばうまい人はみんなテスト入ってからやってるのが普通。

--- 計画ゲームをやっていないと XP をやってるとは言えないですか。

うん。XP は名前に反しててプログラミングのための仕掛けじゃなくて、どうやって製品作ればいいんだろうっていう仕掛けなんですよね。その中でも、計画ゲームは作る製品を企画するような作業に一番向いていて。

--- ただ、計画ゲームは心理的にも入りづらいところだし、お客さんにばっと言いづらいとこではありますね。

計画ゲームをお客さんに言えるような関係ができたらうまく行き始めるんだと思うけど。うまく行かない所は、多分乗り越えないといけない山を越えてない。

--- XP を導入するにあたって、試行錯誤が結構あったんですか?

まあ、あるんでしょうね。あったと思うけど、試行錯誤はずっとやっているから。XP というのは、結局試行錯誤をしてもいいというのが XPっぽいじゃない? そもそも誤りを認めるということが入っているかどうかだから。

開発プロセスの現在

--- 開発プロセス関係で最近興味のあることは?

なんでまたスクラムが流行り始めたのかがよくわかんなくて。誰か本を書いているんじゃないかなとか。

--- スクラムが流行始めてるんですか?

ブログとかでスクラムのセミナー行きましたとか見たりとかしたんで、スクラム流行ってるのかなーと思ったけど、その後止まっちゃったからその人の執筆作業が始まったのかな、と(笑)。

--- 他になにか流行ってるものはありますかね?

あっそうか、トヨタの生産方式のメタファのブームがあるかも? トヨタのメタファはわかんないですね。僕トヨタ好きでも嫌いでもないから。多分、ミクロでみて外れてて大雑把で見るときに似ているんだと思う。

--- トヨタ生産方式にはそんなに興味はないということで。

ズレてますね多分、ズレてるのかなー。僕は一生懸命とか努力とか改善とかしてないんだよなー。

--- 名言ですね(笑)。これは絶対太字で。

実は本人達は努力しているのかもしれないけど、ダラダラじゃないな、淡々とやってる。身につくまでの過程でも「XP やんなきゃ」という雰囲気にしなかったというか排除したつもりだけど、そういうのはやってない。

--- さっき、僕らの印象では一番きついなーと思った計画ゲームでも?

うん。計画ゲームは、そもそも開発者としてのメリット、嘘がなくてわかりやすいというのと、ビジネス的な人達のメリットがあるので。計画ゲームを実施しないと、ビジネス的な人達にとっては製品を磨くチャンスがなくなっちゃうんですよね。結局、「ずーっと良くするには」ってしていきたいから。計画ゲームはビジネスの人たちのメリットも大きいというか。

インタビュー風景

--- そんなに無理に壁をぶち破ったことはなくて?

まぁ、基本的にないですね。本当にプロジェクトがうまく行くの? みたいなことはあったけど、反対側にまわったりするような人もいなかったし。

--- プロジェクト X 的なことは起きなかった?

なかったなー。大丈夫だよって言った人がいるからかもしれない。僕が言ったんですけどね。

--- なるほど、ちょっとありきたりの言葉でいうと、自然体ですね(笑)。本当に無理をしていない感じがいいですね。

多分、すごい意識したのは XP をやりたいと思われたら負けちゃうっていうこと。みんなには、こうした方が気持ちいいよねって話はするけど、XP をやりたいんだとか XP が優れているとかってことを示すためにやっているわけではない。

--- なるほど。アイデアそのものの方が重要ということですね。

それが切実で、もうそうしないと良い製品が作れないって追い込まれた状況もあって。こうしたらうまく行くんじゃないかって事で、すーってうまく入っていったのかもしれない。

テスター文化

--- ちなみに JaSST*26 に行かれるとのことですが、テストの何に対して興味を持たれているんですか?

JaSST は、この間しゃべったからまた行ってみたい、みたいな。

--- 逆に、客としてですか?

うん。でも、テストは興味ありますね。ただ、テストのプロの人達の話を聞いてもよく分からない。

--- どうしてですか? テストを専門やっている人達と、ちょっと文化が違うんでしょうか?

違いますね。目指しているところが違うのかもしれないけど、話のあわなさが面白いですよね。テストの範囲、つまり自分たちのできる範囲でいろいろしようとがんばることがいやですね。そうじゃなくて、設計を正せばいいじゃんと。それをやらないで、自分たちの範囲内でできることを最大限広げて解決しようとがんばりますよね?

--- (笑)いろいろあるんだろうなー。もやっとするところですね。責任範囲を明確にするとやっぱりそうなるんでしょうか?

それは無責任範囲を明確にしているだけであって、責任範囲を明確にしている訳ではないですよね。ここから先は僕じゃないですみたいな。

--- ソフトウェアの業界っていろんな所でこの手の事が起きていますね。アジャイルプラクティスにロールを決め過ぎるとよくないみたいなことを書いてあったように思うんですけど。みんな開発者でしょ? みたいな。

そうですよね。

--- 理想、そういう風にしたいですね。

やれば出来るんじゃないですか。

最近の Ruby について

--- Ruby 界隈だと RSpec*27 が流行ってますけど興味はありますか?

角谷さんに来てもらって、実際に RSpec で開発しているところを見せてもらいましたね。RSpec でテストを英語っぽく書けることがどれくらいメリットがあるかがわかんなかった。英文法に近いって言われてもうれしさがわかんないみたいな。いや、英語の人にはすごい伝わるんだろうな。

--- dRuby では UnitTest を書かれていますよね?

でもあれですよね。僕は、RSpec の Spec にあたるような Ruby Unit のテストをあまり書いてない。dRuby とか Rinda に同梱して UnitTest は入っているけど、これが開発を駆動したわけではないですね。たぶん、このテストが捕まえているのは ruby の外部仕様の変化とかが dRuby に与える影響を捕まえているだけで、dRuby を作るときに使えたテストかというとそうでもない。

今の ruby に入っているテストも内部でプロセスをどうやって動かすんだろう、もう一個動かすにはどうしたらいいんだろうとかで大変なんですよね。オブジェクト間の話し合いを安全に作って、安全に殺す方法とかを考えると嫌になっちゃう。タイムアウトのテストがしたくても本当に時間かけちゃったらテストにならないし。

--- なるほど。ある意味 RWiki とかって dRuby のテストになるんですかね?

そうですね。実証としてのテストですね。でも使う API の範囲が限られているから、あまりきちんとしたテストとは言えない。

Ruby1.9

--- それ以外で Ruby で最近興味があることとかありますか?

1.9 かー。1.9 の国際化の話がぜんぜんついていけない。実装をかえてないから決まったのを受け入れるんだろうなと思いなら。

--- ちょっと関係はしてるんですよね、多分。通信とか?

うん、マーシャリング*28したときはどうなんのかなって。今 1.8 だとマーシャルした結果っていうのはバッファなんだけど。バッファは、結局 String クラスの領域使ってバイナリ化されてるんだけど、そのエンコードがどうなっちゃうのかとか。

--- ちょっと面倒そうなところではありますね。

あと、今日新幹線の中で Rinda の実験してて遅いなーと思って、1.9 でやったら速かったから、あー 1.9 速いんだなー、速いのかもと思いました。ベンチマークかけた訳じゃないけど体感で速かった気がする。多分、スレッド周りがネイティブになっているのが影響するのかわかんないけど。それかもしれない。

Rails について

--- 最近流行の Rails とかあっち系は興味はないですか?

インストールがうまくいったことがない。

--- そこで力つきてると。gems*29 があまり好きじゃない須藤さんと同じですか?

僕はそうじゃなくて、gems がはいんないんですよ(笑)。

--- それは由々しき事態ですね。

多分、OS X をずっとバージョンアップしつづけているからそうなのか、わかんないけど。でも、僕の日記のアクセスログみたいなのに参照元とかあるじゃないですか? みんな gems とかのエラーで検索してるんですよね(笑)。本当にみんな困ってないのかなーみたいな。みんな同じエラーで検索してくるから絶対困っていると思うんだよなー。あ、困ってるなーって(笑)。

--- 仲間を見つけたみたいな。

でも、うまく行っている人はうまく行ってて、うまく行かない人はそれ以上進まないから、多分何もしないと思う。僕はあまりインストールとか得意じゃないんですよ(笑)。なんていうかな、今までずっとすごい優秀な root がいるとこでやってたから自分が root になるってのが、もうね、いやなんですよね。

--- 気持ちは分かりますね(笑)。

なんで UNIX なのに俺が root やってるんだろうみたいな。誰か良くしてくれるから使っているのに。

--- Rails のインストールは精神的な負担は多いですよね、DB とか。

あー、そこまではやったんだよなー。SQLite はいいですよね。でもそもそも Railsって使い道がないじゃないですか。

--- 他の人達が Rails 使って何をしているかというと・・・

ブックマークですかね(笑)。ブックマークはみんな作ってますからね。

--- Rails 界隈の雰囲気についてはどう思いますか?

Ruby にどこまで踏み込んでいいのかっていうのが気になってて。ruby が、メタプログラミングが出来て、リフレクションがすごく豊富で誰でもいじれるって昔から知っているんだけど、昔からやっているプログラマーの人達はそれを知った上で ruby 自体を変えないじゃないですか? 手を加えて Symbol とか変えちゃいましたとかしないっていう接し方するんだけど。

Rails はすごい便利なプログラミング環境があったといって、ガシャっと換えちゃえっていう距離感がすごい違うなと。ruby に対する立場が違うのかな。それは知ってるんだけどやんないよっていうとこまで普通にやるっていうのが、羨ましい。それは知ってるけどやっちゃいけないと思ったのにやっちゃうんだみたいな、いいなーとか(笑)。

--- 関さん自身はコアにがっつんがっつん手を入れちゃうのはあまりやらない?

なんかやんないですね。Rails の開発者達は Railsっていうものの実装レイヤとして ruby があるだけのように感じられる。で、それを羨ましいと思う。

--- 他に何か興味を持っていることはありますか?

ちょっと前にやってたのは、OODB 書くとか。何の役に立つのか知りたいから書いてて。

--- やっぱりアイデア検証ですか?

まぁ、そうですね。ただ後ろ向きだった。役に立たないんじゃないかと思って。出来るだけ役に立つようなものを作ってみて、やっぱり役に立たないんだなって知りたいのか、実はこうするとうまくいくんだっていうのが知りたいなーっと思って始めたけど、最近は飽きてきた。役に立つのはなかなか作れないですけどね。愛してないから作れない(笑)。

その他

好きなパターン

--- オブジェクトの広場的な質問なのですが、好きなパターンってありますか? デザパタでも何パタでも。

なんだろうなー、パターン知らないんですよね。ていうか、さけちゃったんだよなー。辞書的なブームがあったじゃないですか? パターン辞書みたいな。みんなこのパターンとこのパターンのここが違うから何が違うんだ文化みたいな。

かわんねーよとか(笑)

インタビュー風景

そういう本が一杯出てて、こういうのにはつきあってられない。でもパターンは結構身近にあって、設計するときとかみんなに設計してもらうときにこれは何と似てるんだっけとか、この間作ったあれと似てるよね?っていうふうな独自のパターンがあって、そういうパターンは結構使ってた。「上」とか「下」とか、「配線」とかあるんだけど(笑)。そう言って通じるパターンを作るのが重要なんだなと思って、それが多分ドメイン、本当のドメインというか文化、その言葉が顧客とも通じるんですよ。

--- 普遍ではないドメイン特化型のパターンでしょうか。

もともとのパターン言語の使い方に近い。顧客が言いたいことプログラマーが言いたいことの間に入るパターンを示す言葉、そういうパターン言語の重要性はわかる。けど、カタログ的なのは意味がわからない。あのパターンとこのパターンの持ち方が違うからこれみたいなヤツは・・・嫌いっていうかついて行けない(笑)。学会みたいに新規性が重要なところだと、こっちからたどるからビジターとか、重要なのかもしれませんが。


趣味について

趣味とか、ないですね。

--- ブログを読んでたら音楽好きなのかなと?

あー、そうですね。iPod が出来てからは聞きやすくなりましたね。今まで CD 差し替えないといけないと思うと・・・チェンジャーは 6 枚しかないから 6 枚しか聞けないよみたいな。

--- 入れっぱなしになったりしますね。車通勤ですか?

そうです。でもすぐ着いちゃうんですけどね。

--- ちょっと近い世代だから音楽の趣味があうなーと思ってブログを読んでました。どちらかというと、DMC の根岸君が聞いてるような感じの音楽が好きですよね。(注:質問者も好きです)

まあ、そうですね(笑)。

--- 趣味系は他に何かありますか?

後なんかあるかなー。今日、ドラクエ4やってきました(笑)。トルネコの章は面白いんだけどお金貯めるの面倒臭いから。

--- DS派ですか?

派じゃないけど、でももうなんか DS じゃないとやる気が起きないかもしれない。

--- テレビとかでやるのが面倒臭い? Wii とかは?

あるけど、Wiiってメディア換えないといけないでしょ(笑)。うわーもう面倒臭せーと思ってもうやんない(笑)。天気予報とか見てる。iTunes みたいに、ストレージに入れてくれればやるけど(笑)。

--- そういうところがあるんですね?(笑)

面倒臭いでしょ。だからもう 200 行のヤツしか作れないですよ。何書いても 200 行になっちゃうんですよ。

--- すばらしい(笑)。プログラマーの三大美徳みたいな感じですね。

あれですよね、それは面倒臭いから努力とかしたりするんですよね、その人達は。僕は努力とかしない(笑)。

--- すばらしい(笑)。

IT業界について

--- 最近の IT 業界に一言。

IT 業界とかってわかんないですよね。そもそも IT 業界って本当に存在するのかがすごい疑問。IT 業界はなんとかだーとかいろいろ出てるじゃないですか? ぜんぜん当てはまんないですよ、話が。きっと、我々と関係ない所に起きている何かを話をしているんだ、永田町みたいな感じ。きっとなんか知らない世界。君 IT 業界?って言われたら、うーん、そうですねみたいな(笑)。

--- まあ、僕は合コンとかでは自分は IT 業界ですっていいますけどね(笑)。

まぁ、説明は楽だけど。

--- そもそも IT 業界なんて存在しないんじゃないのって話もあるし、面白いですね。

IT 業界のみんなは辛い辛いっていってるけど、僕ら辛くないんで、属してないのは確からしい。

--- 結構仕事は楽しいですか?

楽しいですね、仕事は。楽しいですよ。会社はともかく仕事は楽しいですね。

若いエンジニアへ

--- 若いエンジニアに一言。

若いエンジニアって僕も若いんですけど(笑)。プログラミングした方がいいですよとか。

--- それはどうして、また?

いや、わかんないけど、してんのかな?と思って(笑)。ブログ書いているんでしょ、きっと。

--- ブログ書くよりプログラミングをしろと?

まぁ、フレームワークを使うなら作った方がいい。arton さんが前のデブサミで、フレームワークを作るのはお前だってヤツ書いていましたね。何故必要か? 何故作るべきか? みたいな。

インタビュー風景

--- 例えば Rails とかを使うだけだと、ちょっと足りない?

書いてみたら、なんで Rails がそうしたか理解できて面白いんじゃないですかね。Rails みたいなヤツは作りたくなるような気がするんだけどな。

--- 最後は告知タイムなので、何か告知したいことがあればどうぞ。

あ、まだ初版買えます(笑)。早く買わないと英語がでちゃうから初版先に買った方がいいですよ。

関 将俊 著『dRubyによる分散・Webプログラミング

---ありがとうございました!!


*1: 並列プログラミング言語拡張 https://ja.wikipedia.org/wiki/Linda

*2: UNIX OS などのバックグランドで動作するプログラム

*3: https://www.druby.org/ilikeruby/div.html

*4: https://www.cozmixng.org/~rwiki/?cmd=view;name=Rabbit

*5: 関 将俊 著『dRubyによる分散・Webプログラミング

*6: https://www.rubyonrails.org/

*7: https://ja.wikipedia.org/wiki/%E7%AE%B1%E5%85%A5%E3%82%8A%E5%A8%98

*8: Macintosh SE/30

*9: Apple 純正の開発環境だった。https://developer.apple.com/tools/mpw-tools/

*10: https://www.ruby-lang.org

*11: https://www.slackware.com/

*12: https://www.druby.org/ilikeruby/erb.html

*13: https://modruby.net/ja/index.rbx/eruby/

*14: https://www.php.net/

*15: https://www.kuwata-lab.com/erubis/

*16: https://www.druby.org/ilikeruby/druby.html

*17: https://www.corba.org/

*18: https://wwwa.dcns.ne.jp/~nito/objective-c/classware-next.html

*19: Hirano Object Request Broker 通産省電子総合研究所の平野聡氏によって開発された分散オブジェクト技術の一種

*20: https://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=top

*21: Ruby の HTTP サーバ

*22: https://www.druby.org/ilikeruby/rinda.html

*23: https://labs.google.com/papers/mapreduce.html

*24: https://www.pragprog.com/

*25: https://www.objectclub.jp/community/XP-jp/xp_relate/xp-faq

*26: https://www.jasst.jp/archives/jasst08e.html

*27: https://rspec.info/

*28: Ruby のオブジェクトを通信しやすいデータ構造に変換する操作

*29: https://www.rubygems.org/



©2008 OGIS-RI Co., Ltd.
Prev Index Next
Prev. Index Next