[2007 年 11 月号] |
[OOエンジニアの輪!]
今回のゲストは、須藤功平さんです。 須藤さんは今最も注目されているプログラミング言語 Ruby で実装されたプレゼンテーションツールRabbitを開発されています。 今回のインタビューでは須藤さんのRubyの出会いからRabbit開発秘話までお話いただきました。 Rabbitが全国に普及していくといいですね!
|
---前のインタビューアの笹田さんとのつながりは?
Rubyのつながりですね。Ruby関係のイベントでよくお会いしています。
実は、笹田さんとはプログラムの組み方で相容れない部分が多いです(笑)。 私はevalメソッド(動的に式を評価するメソッド)が大好きなんですよ。ところが、evalを使うとコードが動的にきまるので最適化しずらい。 笹田さんは処理スピードが速いのが大好きなので、静的に解析できないevalは嫌いだそうです。笹田さんには以前、「eval使ったらsleep(1)を入れとく。毎回余計に1秒かかるぞ」とかいわれました。(笑)
---普段のお仕事って何をされているんですか?
ソフトウェア開発ですね。
メンバー全員が違う得意分野を持っていて、私はRubyとCをやるんですけど、 ほかの人はJavaScriptだったり、ほかの人はCをメインでやるという風に専門がばらばらなんですよ。専門ではないものでもお仕事をいただいたらやるんですが。
---プログラムやソフトウェアとの出会いは、大学の1年の時なんですよね?
そうですね。それまで全くといっていいほどパソコンは触ったことがなくて。高校の家庭科の時間にExcelをさわったぐらいです。
---情報系にはいろうと思ったきっかけは?
これからはITなんじゃない?っていうよくわからないイメージで入ったんですよ。 そして、情報のイメージはプログラミングっていうのがあって、それでやり始めました。
ただ、大学1年生の時、プログラミングもそうですが、パソコン自体のこともよく分からなかったので、いろんな本を図書館から借りて読んでました。 中身をほとんど知らないで、JavaScriptというのがあるのか、C++とかがあるのかとか思いながら読んだり、インターネットで調べたりしていました。 実際にプログラムを書いていたわけじゃなく、継承とかポリモーフィズムとかいうのがあるのか、なるほどなるほど、という感じでした。
---エアプログラミングですか。
そうそうそう。なんか読んで満足してました。 そして、大学の基礎ゼミという1年生向けのゼミでJavaっていうのがあるっていうのがわかって、 これもちょっとやってみなきゃいけないと思って、フロッピーを持って研究室いって毎日数枚ずつダウンロードしてました。
---なんか地道な話ですね。
当時はアパートがネットにつながってなかったですし、何もしらなかったですから。結局、フロッピーに分割して持って帰ったJDKが元に戻んないね、とかやってました。
---環境は何なんですか?LinuxとかBSDとかですか?
大学のときにはじめてノートパソコン買ったんですけど、それにはWindows入っていました。 大学の端末はHP-UXでした。
---また、しぶいですね。
それがどんなにしぶいかがわからなかったんですけどね。 メモリが少なくて、いろいろコンパイルできなくて・・・ 2年生になってから、自分のPCにLinuxをインストールしようとしてました。 でも、よくわかんないから、いろいろ(ディストリビーションを)入れてみて、最終的にDebianに落ち着きました。
それからだと思いますね。本格的にプログラミング始めたりとか、いろんな言語処理系をインストールして使ってみたりとかは。
---COZMIXNGの活動について教えてください。
大学3年生のころにCOZMIXというものがあると知りました。 COZMIXNGって最後にNGがついてるんですけど、あれ、ネクストジェネレーションって意味なんですよ。
COZMIXは略称で、 不来方マルチメディアインターネットエクスチェンジの頭文字なんです。*1 私は岩手大学出身なんですけど、岩手に不来方(こずかた)という 岩手県盛岡を指す言葉がありまして。 岩手大と盛岡周辺の学術機関や地域のプロバイダの方たちが一緒になって、 マルチメディア関連のインターネットエクスチェンジっていう大きいLANみたいなネットワークを構築して、 ネットワークの問題点の洗い出しと解決方法の研究を行うっていうプロジェクトがあったらしいんですよ。
*1COZukata Multimedia Internet eXchange
私が知ったときには既にそのプロジェクトは完結していたんですけど、 なんかもっとさらに面白いことができるんじゃないかなと思いました。 当時プロジェクトをやってた大学の先生をけしかけて、 そのインフラを利用してその上でなんかサービスができるようなのがあったら面白いんじゃないかということで始めたものなんです。
私はプログラムを書くことが好きだったので、リポジトリを提供したり自由に使える開発環境を提供したいと思って、 そういうサービスを構築しました。それ今でもやっていて、これを使って開発しています。
リポジトリを提供するほかにも、Webスペースがない人とか、 ソフトウェアのパッケージを作ったけど置く場所ないとか言う人には置く場所を提供したりしています。 サーバプロセスが必要なサービスはなかなかレンタルサーバじゃ難しいじゃないですか。 そういうのをホスティングするっていうのをやりたいなって思ってたんですけど、 こちらはあんまりニーズはなかったみたいです。
今は、RWikiっていうRubyで書かれたWikiの本家のサイトのホスティングとかしてますね。 ちっちゃいSourceForgeみたいなのを目指していたんですけど、 まぁそうはならなくて、もっとこじんまりとしたものになってしまいました。
---卒研ではなにを研究されたんですか?
卒研は、Schemeですね。Gauche*2っていう Schemeのインプリメンテーションがあるんですけど・・・
*2Schemeの仕様書R5RS準拠のScheme処理系
---scratchっていうWeb Application Frameworkも作られてましたよね。
使いづらいRailsみたいな奴なんですけど。 なんか似てるところとかがいくつかあったんですよ。 ファイルを置く場所を決めるとか、 なるべく設定ファイルが少ないほうがいいなという考えでやっていたんで。
---ちょっと時代を先駆けていたCoC*3の原型みたいですね。 継続ベース*4のWeb Application Frameworkでは無いんですか?
*3Convention over Configration
*4処理引数と同時に継続先も持ってファンクションにジャンプする方式
当時ちょうど同じくらいにKahuaっていう継続ベースのフレームワークが出てきていて、 Schemeっぽいなとかそういう方向もあるねとか思ってたんですが・・・
---あえて使ってない?
その前に作り始めてたんですよ。
---かぶらなくてよかったなぐらいな感覚ですか?
そうですね。
もともと、Schemeをやり始めたのは研究室のゼミでSICP*5っていう Schemeを題材にしたプログラミングの教科書をやってて、Scheme面白そうだなと思って使っていたんですよ。 その頃、私はRubyもやっていまして、すでにRuby好きになっていたんですよ。 そして、RubyにあってSchemeとかにないライブラリとかを作っていって、作ったはいいけどどうしようかなって思って。 アプリケーション作んなきゃっていうのがそれ(scratch)になったんですよ。
*5計算機科学分野の古典的な教科書
---それじゃ、それらのライブラリを(scratchフレームワークに)パッケージングしたってことですね。 その時にテスティングフレームワークも作られたんですか?
そうですね。一番最初にそれを作ったんですよ。 Gaucheにも組み込みでテストのフレームワークがあるんですよ。Perlはよくわかんないですけど、 Perlっぽいテストフレームワークだったみたいで、ちょっと使いたくないなと。 自分は、xUnit*6系しか知らなかったので、最初にGauche用の xUnit系フレームワークから作ったんです。
*6Kent Beck由来の単体テストフレームワーク
---学生時代にSICPとか読んでおくといいですよね。社会人になると眠くて読めなくなっちゃいます。
前半だけでもわりと大丈夫だと思いますけどね。
---後半はきついですよね。
私、論理回路好きじゃないんで・・・後半は論理回路の話になってきますよね。
---就職もオープンソース系の企業を受けたんですか?
そうですね。 学生の頃はオープンソースばっかりやってたんですけど、最初に入った会社がオープンソースを押してる会社だったんですよ。 そこに応募して訪問して一緒にやりましょうということになったんです。 応募したときは知らなかったんですけど、そこの会社に、私がパッチを投げてたプロジェクトの人がいたりしたんですよ。 なので、ほんとの就職活動はしてないんですよ。社会人としてはあまりよくないんでしょうけど。
---いや、新しいですね。プロジェクトのパッチを使った採用試験とかいいんじゃないですか?
いいと思いますよ。 会社の方でもこの人はどのくらい出来るのかがすぐわかりますし。 最近、面接でコード書かせるというのもあるみたいじゃないですか。 その前からパッチ見て、この人だったら大丈夫だとか、コミュニケーション能力も評価できますし。
---メーリングリストで喧嘩してたから、ちょっとだめだぞとか。
そうですね。そういうのもわかったりするかもしれないですね。
---そう考えるとすごく危険な時代ですよね。あんまり本名でブログとか書かないほうがいいときもあるかもしれないですね。
逆に就職活動のためにブログ書いてるという人もいるみたいですよ。アピールのためにとか。
---Rubyとの出会いは?
プログラム自体を始めたのが大学に入ってからだったんですよ。 最初、何もわからずにどんな言語があるか調べていた時に、 画像処理の研究室のゼミの先輩にRubyっていうのがいいよと薦められたのが最初でした。 でも、実際使い始めたのはそれから1,2年後なんですよ。
---Rabbitを作ったきっかけは?
Unix環境用にはMagicPointっていうプレゼンテーションツールがあるんですけど、 その書式がすごい嫌だったんですよ。 あれが嫌いで作ろうかということになって作りました。
---Rabbitを作られたのはいつぐらい?
大学院1年のときですね。 大学の卒論のときはTeX*7 とかでがんばっていたんですけども、もうやだなって思ってて。
*7組版処理のソフトウェア
---TeXのコンパイルエラーとかめんどくさいですよね。理系の大学生殺しですね。
特に私の場合は数式を使わない題材だったんで、TeXを使わなくてもよかったんですよ。別にMagicPointでもできるような奴だったので。
---TeXの仕上がりはきれいですよね。
Rabbitもそこそこきれいなんですけど・・・
---(笑) 大学生使ってくださいよみたいな
あーそうですね。 多分、今でも、私のいた研究室だと何人か使ってると思います。そのくらいのユーザ数なんですよ。 基本的にいないですからね、使う人は。 プレゼンすることもそんなにないじゃないですか。
--- Rabbit使ったプレゼンは角谷さん(角谷信太郎氏)のプレゼンでよく見た記憶があります。 最近はKeyNote*8を使っているみたいですが。
*8Mac用 プレゼンテーションソフトウェア
そうみたいです。角谷さんが浮気し始めたころからわかってきてたんですけどね。あーもう使わねーなって。
---アプリ開発者としては一番さびしい瞬間ですね。
そうですね。一応Rabbitユーザ会の会長なんですよね。角谷さんは。
---名誉会長ぐらいになっちゃった?
いつか帰ってきてくれると信じてます。
---ところで、グラフィックが好きというわけではないんですか?
ではないです。むしろ苦手なほうなんです。 お絵かきとか全然できないんですよ。できたらすごいいいなぁって思ってるんですけど。
---でもrcairo*9を・・・
*92次元画像描画ライブラリcairoのRubyラッパー
rcairoもRabbitで使いたかったからです。基本的に必要に迫られて開発するんですよ。
---すごいですね。なんかこう自給自足で暮らす人みたいです。自分で足場をどんどん作っていくという・・・
あーそうですね。Gaucheのときに最初にGaUnitを作ったのも同じような感じですね。
---最近の興味は?
Rabbit系では、今はGStreamerっていうマルチメディア系のライブラリのRubyバインディングもいじっています。 あと、3Dのやつもやりたいなというのがあって、 マイナーなんですけど、Clutterっていうライブラリがあって それがちょっとよさげだなと思ってるんですよ。 Rabbitで音出せるようにしないと誰も惹かれないな。 ならビデオも流せるようにとかっていうのを考えてるんですよ。
---動画張り込めるようになったらある意味KeyNoteとかにも追いついてますからね。
いやいや。そこまでいくにはまだ道があるんですよ。動画の貼り付けとかもできるようにするには、さらにGTK用のキャンバスウィジェットとかっていうのが必要になったりするんですよ。
---だんだん編集機能も欲しいとかいう話になって・・・
私はテキストじゃないとイヤで、ユーザインターフェイスを作るのも苦手なので、たぶん、私は実装しないと思います。
それに、今のままでも編集機能っぽいことはできるんですよ。 RabbitはPDFの読み込みができるので、既存のPDF編集ソフトでPDFを作成してRabbitに読み込ませれば編集機能があるように使えるんです。
---Ruby-GNOME2は何のために使っているんですか?
Ruby/GnomePrintというのは印刷関係の処理に使っていました。今はrcairoでやっていますが。 Ruby/RSVGというlibrsvgのバインディングはSVG*10レンダリングに使っています。
*10Scalable Vector Graphics
---それもやっぱりRabbitがらみですか?
そうですね。RabbitでSVGを表示したいとかPSとかPDFで出したいとか。 あと、popplerっていうPDFレンダラがあるんですけど、 それのRubyバインディングもRabbitでPDFを表示したいからって作りました。
Rabbit Driven Developmentなんですよ。
---永久機関みたいに、RabbitのプレゼンをするためにRabbitの開発をするみたいな。
たいていそんな感じで進んでますね。 Rabbitでのプレゼンの準備をするとコミットが増えます。
---すごい本当にRabbit Driven Developmentですね。・・・略すとRDD・・・Responsibility Driven Designですね。
なんだ、その略称はもうあったんですね。
---Rabbit通る所にいろんなライブラリが落ちてますね。
そうですね。
---「みんな使ったほうがRuby界の発展にはいいんじゃねぇの」的なことは言っておいた方がいいかもしれませんね。
Rabbitの目標の一つに、Matz(まつもとゆきひろ氏)をRabbitに乗り換えさせる*11っていうのがあるんですけど、面倒くさいっていわれるんですよ。
*11MagicPointを使用している。
---やっぱり、自分の言語で開発されたツールでプレゼンしなきゃだめですよね。
でも面倒くさいのが先にたつんでね。しょうがないですよ。
Rabbitもけっこうがんばってやってるんですけど、わりと売れないですね。まぁ使う人が少ないですからね。 そもそもRabbitはインストールするのが難しい、まぁめんどくさいんですよ、いろんなライブラリに依存してて。 なので、インストールするのでもうご馳走様って言うような、あぁこれでいい仕事したね。 っていう感じになるような風潮がある時期もあったんですよ。
たしか角谷さんが使い始めたころですね。 Rabbitインストールしました、お疲れ様でした。みたいな。 なので、Rabbitはインストールした時点である程度満足感が得られる珍しいソフトウェアだと思うんですけど。
---最終的にはパッケージ化しないんですか?
私は、gem*12が、嫌いなんですよ。
*12Rubyのパッケージ、ライブラリを管理するソフトウェア
---えー!? 何でgemは嫌いなんですか?
私、Debianを使ってるんですけど、Debianにもパッケージ管理のシステムがあるんですよ 。
---apt-getですね。
はい。そして、gemもパッケージ管理をするわけですよ。独自に。 それが嫌なんで、嫌いなんですよ。
---(システム全体で)統一的なパッケージ管理システムを使ってくれよ、ってことですよね。
そうですね。 でも、サーバにインストールするときは楽なのかもしれないですね。 言語独自でパッケージ管理をもっていたほうがいろんなところで管理機能が使えるから。
Ruby 1.9でgemが標準に入るっぽいんでね。
---もう標準装備になるんですか?
多分入ると思いますよ。
---ライブラリ開発者としては対応しないといけない?
RSS ParserはもうRuby本体にはいってるのでgemとか気にしなくていいと思うんですけど、 ほかのライブラリはもしかしたらなんか言われるのかもしれないですね。
---Rabbit普及のためには、Rabbitをgemに対応させてくださいみたいな。
それは、むずかしいんですよ、結構。 何でかっていうとRabbitってRuby/GTK2とかに依存してるんで、 そいつらがgemになってないと依存関係で引っ張ってこれないんですよね。
---全部やらなきゃいけないってことですね?依存関係にあるものを。
そうなんですよ。ほかのも結構gemになってないのもあるんですよ。 なので、他のも対応してくれたら、やっていいよくらいの感じですね。
---Rabbit普及の道は険しいですね。
あんまり普及させようとも思ってないんですけど。(苦笑)
---RSSパーサのライブラリも作られてますよね?
RSS Parserが私の作ったので一番古いライブラリなんですよ。 関わっているソフトウェアのひとつにRWikiっていうソフトウェアがあるんですが、 それにRSSの機能を組み込みたくて作ったんですよ。 RWikiがRSSリーダになるよぐらいの話だけだったんですけど、 ちゃんと別にRSSリーダを作ったほうが使いやすいなってことがわかったんで。
---あまりつかっていない?
一応そのころ作ったRSSリーダは今でも使っているんですけど。 その後にRSSを使うようなソフトウェアをほとんど書いていないんで、自分ではあんまり利用してないですね。
---でも使う人は結構多いですよね?
みたいですね。一番のヒット作なんで、私の。基本的に売れないソフトが多いんですよ(苦笑)。 でも、珍しく私にしてはわりとドキュメントを書いているやつなんですよ。
RSS Parserの作りが変なんですけどもメタプログラミングチックな事をいっぱいやっているんですね。 メソッドを動的に作るとかいうこととか。そういうのをいっぱいやっているので RDoc*13でパースできないんですよ。 なので、APIリファレンスを自動生成するのはあきらめて、 チュートリアルとか簡単なリファレンスなたいなのを別に用意しています。 私はRDocのやつよりもそういうのとかサンプルプログラムの方が有用だと思っているのもあるんですが。
*13メソッドのコメントからドキュメントを生成するツール
---リリースって勇気がいることだと思うのですけど、須藤さんはどうですか?
私はコードをさっき言ったCOZMIXNGのサーバ上に置いてるんで、見えるんですよ、最初から。 なので、リリースする時にコードを公開するのが恥ずかしいというのはあんまりないですね。 ただ、パッケージングがめんどくさいっていうのはありますね。リリースが大変。ドキュメントもほとんど書けていないですし、私。
---ほかに力を入れているものは?
そうですね。最近はRetrospectiva*14っていうやつですね。 ソースブラウズできたりとかチケット発行できたりする、Trac風のツールです。
*14Railsで作られたプロジェクト管理ツール
---なぜ力を入れようとしているのですか?
私、Subversion*15のRubyバインディングも作ってるんですよ。 それをRWikiのバックエンドにしたくて。 バインディングはちゃんと作ってあるんですけど、その他にちゃんとアプリケーション作んなきゃだめだなと思ってて。 作っただけのライブラリはAPIが変なことってよくあるんですよ、使いづらいとか。 なので、アプリケーションを作ってAPIを見直さないといけないと思っています。 Subversionバインディングを使ってくれて、そのうちで一番よさそうなのがRetrospectivaでした。 それを応援しながら、そのバインディングのところのAPIを見直そうかなと思ってやってます。 で、最近コミット権をようやくもらったんですけど、日本語化*16とか細かいところとかをやっていてぜんぜんまだSubversionのところを見れてないんですよね。
*15構成管理ツール
*16日本語化の作業は何かをベースにして行ったのではなく1から行っている。
---Ruby/ActiveLdapも開発されているようですが・・・
そうですね。
企業でWindowsのネットワーク作るのにSamba*17と LDAP*18ってわりとよく使う組み合わせらしいんですよ。 ちょっと、仕事がらみでどういう風に導入しているのかって話を聞くことがありました。
*17ファイル共有ソフトウェア
*18Lightweight Directory Access Protocol
smbldap-toolsっていうコマンドラインのPerlで書かれたツールのがあって、 それでLDAPのエントリを操作しながらユーザ管理をWindows側でできる仕組みを作って提供してるらしいんですよ。 そのコマンドラインのツールが使いづらいですし、Windows側の管理ツールもWindows NTの頃のものらしいんですよね。
---じゃぁRubyで
そうですね。もちろんRubyじゃないからRubyで作らなきゃというのはあったんですけど、その状況は改善しなきゃいけないなぁと思って。 Sambaの設定をやろうとするといろいろ覚えなきゃいけないことがあるんですよ。 だからSambaに特化した細かいことを知らなくても使えるツールが必要だろうなと思いました。 RailsでWebのインターフェースを作れると思って、 Railsから使いやすいようなSambaとLDAPのライブラリ ActiveSambaLdapっていうのを作ろうと思ったんです。 でも、そのツールを作るには、その下のレベルでLDAPをいじらなきゃいけないじゃないですか。
---そうですね。まずは下層から。
なのでActiveLdapっていうのがあるらしいんで、まず、それを調べてみたんですよ。 そしたら、ひどかったんですよ。 じゃ、こっちから直さなきゃいけないなと思ってまだ直してるんですね。
---まだ、ActiveSambaLdapにたどりついてない?
はい。いけてないんですよ。 まぁ、そこそこ動くものにはなっていて、smbldap-toolsを置き換えるくらいのことはできます。 ただ、まだ、Webのインターフェイスが手つかずなんですよ。
そういうわけで、まだ下の方ですね。 LDAPのバックエンドの抽象化をやって、今はようやくバリデーション。 LDAPにSyntaxっていうのがあって 「この属性の値はこういうフォーマットじゃなきゃだめだ」っていうのがあるんですけど、 それでバリデーションができるようになったりとか。 他には、国際化ができるようになったとか、ActiveRecordに近づいたねとかなって・・・ 最近はようやく次にいけるなって思ってるんですけどね。
---Samba関係なくLDAP編集だけはできるようになった?
今は一般的なLDAP管理ツールが作れるようなのはできて、簡単なLDAP管理用サンプルRailsアプリケーションができたところです。 もうそろそろいいかなぁと思っていて、1.0をリリースしてもらおうかと思っています。
---どうしてもこう下層に行ってしまうんですね。
いっちゃうんですよ。 ActiveLdapっていうのは、その、LDAPを操作するライブラリのラッパーみたいな感じになってるんですよね。 LDAP操作のインターフェースをActiveRecord風にするとかっていう。 下のほうにもたまにバグとかがあって、いやここバグってるんで直してとか、あっちにパッチを送って、こっちにパッチを送ってとかしてるんですよ。 まずはバグをつぶしたい。なので、なかなか欲しいのができないんですよ。
---様々なライブラリのコミットをしていることが多いですが、どこからそのバイタリティが沸いてくるんですか?
これが必要だから、そして無いからっていうのですね。
---自分がほしいからというのは重要ですね。
だからドキュメントもあんまり書かないんですけど(苦笑)。自分だけで使うと思っているとどうしても。悪いですよね。
---いきなりライブラリから作らないという方がモチベーションが良く保てると。
そうですね。ライブラリとかどう使われるか想定しないとAPI決めるのもわりと難しかったりとかしますし。
---パッチとかもそういうかんじですか?
自分がバグ踏んだときに解決したりしています。私、ライブラリを変わった使い方をするんでバグを踏みやすいんだと思います。
---そういったその開発の作業は会社が終わった後にやるんですか?
そうですね。会社ではちゃんと仕事してるんで一応。(笑)
---仕事が終わった後に帰ってから夜に?
そうですね。休みの日にやったりとかですね。なので、今はそんなにアクティブではないですね。 うん、その学生のころほどは・・・
---平日とかもある程度時間作ったりして?
そうですね。でも、眠りたいっすよ。はっきりいって。
---会社とかでオープンソースをサポートするというか、Rabbitサポートしてくれるところを探すというのは?
いやいないでしょう。もっとポップなライブラリとかならね。
---rcairoを軸にして売り込むという手はあるような・・・
rcairoはラッパーで、大事なのはcairoですからね。Ruby側でチューニングとかできないですからね。私はそんなにたいしたことはしていないんですよ。
---オブジェクト指向ってどうですか?
本格的にやるって決めたのがRubyだったので、それで、オブジェクト指向に洗脳されたんだと思います。
---ほぼ自動的に?
だと思いますね。 Cもやってたんですけど、どっちかっていうとRubyのほうが好きだったですから。
その後にGaucheというかSchemeをやることになるんですけど、やって気づいたことがあったんですよ。 なんかSchemeが書きにくいなと思ってて、何で書きにくいか考えたら、 頭ん中でRubyで考えてSchemeにコンパイルして書いてることに気づいたんですよ。 私の考え方がもう洗脳されてRubyになっちゃってたんですね。 だから、Rubyは書きやすくなったんですよ。
---じゃぁRubyは考えるときの道具?
そうですね。だから私には書きやすいですね。すごいですよね。Matzはね。洗脳しちゃうんですからね。
---最初がRubyだから、他の言語と比べてこれがいいというのは逆に言いづらいですか?
そうですね。Pythonをあんま好きじゃないのは、Rubyと違ってself.っていっぱい書くからとか、そういうのはありますけど。
--- もう理由を超えたものがありますね。
(selfを書かない)Rubyは暗黙のうちにコンテキストで決まって、それがいいと私は思ってるんですよ。 Pythonみたいに全部明示的にっていうのは、ちょっと肌に合わないんだと思うんですね。
--- ところで、好きなデザインパターン、ソフトウェアパターンはなんでしょう?
あまりパターンとかわからないんですけど。 オブジェクトにメッセージを送って処理は流れていきますよね。そのメッセージを動的に作るっていうのが、私は好きですね。 Rubyでいうとsendっていうメソッドになるんですけど、 sendを使うとメッセージの名前とかが文字列とかで渡せるので動的にメソッドを変えられるんですよ。 検索したときに、あれ?これどっから呼ばれてるんだろうってわかんなくなっちゃうんですけど。 でも、そういうメタプログラミングっぽいのが好きなんですよね。 ただ、メッセージがころころ変わっちゃうんで、わりと読みづらいって言われますね。
---いわゆる世間一般的なプログラムとは別のオブジェクトの分析・設計とかはあんまり興味はないですか?
そんなに意識しては考えないし、興味もあんまりないですけど、 考えるときはオブジェクト中心に考えてるなと思う部分もあって・・・
例えば、いろんなソース見ると危険な匂いがするときがあるじゃないですか。 いろいろ。これやばいなとか。
---そうですね。
それの見分け方にパターンがあることに気づいたんですよ。
--- なんですか!?
何かっていうと長いことなんですよ。エディタでみるとソースって縦に長いのと横に長いのがあるじゃないですか。 で、横に長いのは必要なオブジェクトが無いことが多いと思うんですよ。 なんでかっていうと、横に長いときはこのクラスのこの定数のこれとかっていう風に 参照になってることによってどんどん長くなってく。 ってことは、そこのコンテキストでやることじゃないって事が多い。
---(遠い相手の)情報を引っ張ってきて、処理してるってことですね。
もう一人オブジェクトが必要なんじゃないかって思う。基本的に私(エディタの横桁数の設定は)80カラムなんですけど。 それより長いと、(オブジェクトが足りない)嫌な匂いだなっていうのに、最近ようやく気づいたんですよ。
---縦は?
縦はですね。ほかのメソッドに分割できるのに1個のメソッドになってる。
---冗長だったり、やりすぎってことですよね。
メソッドを分けなきゃいけないという、匂いなんだなっていう風に思いました。
---それって一番大事なことだと思いますね。視覚的に一瞬でわかることだし、 感覚的にプログラマの人ならほとんど「そうですね」っていう話だと思います。
ちょっと新しいかなって思ってたんですけど、そんなこともないんですね。
---あ。(苦笑)
---ソフトウェア系以外だとどんなものに興味がありますか?
パン屋のパンが好きですね。 もっとこだわってここのパン屋のこのパンがとか言えればいいんですけど、 たいていのパン屋のパンはどこでもおいしいので。 ぷらっと入ってあーおいしいなって食べながら帰りたい。
---パン好きですか?
はい。パン。好きですね。
---家の近くにパン屋は多いんですか?
パン屋は3〜4軒ありますね。駅の周りに。 まぁ、パン屋は家の近くじゃなくてもいいんですけどね。
---ほかには?
毎月1日は映画の日なんですけど、その日は映画を見に行くようにしています。
---映画の日ですか。いっぱいみられるんですか?
1回が安いんですよ。いつもは1800円ぐらいなのに1000円になるんですよ。 盛岡いるころに映画の日を知って、最初は盛岡ローカルだと思ってたんですけど、 全国的だったみたいでびっくりしました。
---どんな映画をみるんですか?
私は邦画が好きですね。洋画とかハリウッド系とかあまりだめなんですよ。
---映画を見るときに一番気にしてるところはなんですか?(アナウンサー的な意味で)
特にないです。(エ○カ様的な意味で)
---(笑)
上達するにはソース読むのが大事ってよく言われてますよね。 読むコツも本になったりしていて、その中の一つに「目的を持ってソース読むこと」っていうことがよく言われてるんですよ。 どうやれば目的を持って読めるかなっていうのを考え付いたんですよ。
ライブラリとかを使うときに、ドキュメントを読まなきゃいいんじゃないかなと思います。 使い方がわかんなかったらソース読んで使い方をわかればいい。 その時は自分でこういう風に使いたいっていう目的あるので、 こういう風に引数渡せばうまく動くなっていうのを必要に迫られて読むと思うんですよ。 それが、目的を持って読むことになるんじゃないかと思います。 であれば、ライブラリにはそんなにドキュメントが必要ないんじゃないかな?っていう。(笑)
---みんなのためにドキュメントは書かないと。(笑)
そうです。若い人たちのためには必要ないんじゃないかなっていうのを思いついたんですけど。(笑)
---名言ですね。
さらに、スクリプト言語だったらコンパイルしてないので、ソースが読みやすいんじゃないかなと思います。
---ドキュメントつけたら、皆のためにならないということですね。
そうですね。ドキュメントがあったら読んじゃうじゃないですか。 そして、ドキュメント通りに動かなかったら動かないんですけどって終わっちゃうところを、 ソースを読んでてバグを見つけたら、思わずパッチを書いちゃうじゃないですか。
---ソースを先に読む方法は一個だけ難点があると思うんですけど。 実装者が想定していない(仕様と違うバグがある)ソースを先に読んじゃうと、それがデフォルトだと思っちゃう。
ソースがドキュメントで仕様になっちゃいますからね。
---ここだけちょっと弱点がありますよね。
ここで、これがおかしいんじゃないの?って言えるくらいになれば、さらにいいんじゃないですかね。
---ライブラリはドキュメントを読まないで、まずソースを読めってことですよね。
読むといいんじゃないかな?ぐらいですよ(笑)。 読んで、自分が理解したらその人がドキュメントを書けば、ソースを読みたくない人たちの助けになると思います。 ドキュメントを書くと理解が深まりますからね。
---逆に年取ったエンジニアに一言はありますか?
みんな若いですからね(笑)。年取った人いないですからねぇ。
Rabbitとか、新しい(マイナーな)ツールを使ってみる。たまには試しに使ってみるのもいいかもしれないですね。
以前飲み会で、「ハッカーとは!」みたいなことをいってた人がいたんですよ。 「これが作りたいとかいうゴールがあったら、より早くゴールに到達するのがハッカーだ。 Rubyにはこういうライブラリがなくて、Perlで同じようなライブラリある場合は、 Perlを使ってより早くゴールに到達するのがハッカーなんだ」と。
思ったものを、手早く出すっていうのはとても凄いことだと思うんですが、 私の考えているハッカー像とはイメージが違うんですよね。 ゴールにたどり着くまでに、必要なライブラリが無かったら作っていって、 たどり着くのがハッカーなんじゃないかと思うんです。 出来上がったきれいな道を上手に通っていくんじゃなくて、通った後に道ができている感じです。
でも最近はあんまりハッカーにならなくていいなと思ってるんです。 (なぜかというと)メンテナンスし続けるハッカーはあんまりいない気がするんですよ。
新しいのを作って、みんなにすごいって言われて、 じゃぁ、次また新しいネタを思いついたからまたすごい勢いで作って、と繰り返していくので、 ハッカーの人って作った後にすぐどっかいっちゃうんですよね。
私はちゃんと続けてメンテナンスすることとか、続けていくことも大事だと思ってるんで、 (どこかに行ってしまうような)ハッカーになりたくないなっていうことに、最近ようやく気づきました。
---続けてメンテナンスしていくことの重要性ですか。
そうですね。続けることが大事っていってた人がいましてね。 何でもそうだと思いますよ。プログラムとか関係なく。 だから、尊敬する人は続けてる人って言おうと思ってたんですよ。
---本日はありがとうございました。
こちらこそありがとうございました。
©2007 OGIS-RI Co., Ltd. |
|