なひです.

9/4に行われたJUS主催のRuby Workshopの最初に行われた,
まつもとさんのセッションの記録です.
メモしたものから書き起こしましたが,決して正確ではありません.
あたかもまつもとさんや質問者がそう喋ったかのように書いてますが,
文責はなひにあります.ウソ書いてたらすいません.訂正してください.

特に注釈がない限り,
  括弧()内はなひのコメント
  〇はOHPのタイトル
  ◇は会場からの質問
  →はそれに対するまつもとさんの回答
です.

# gotokenさん14歳もいいけど,歌って踊れるハッカー少年キャラだったら
# 高橋(征義)さんもいいと思うな...って何の話をしてるんだか.
# で,あつこさんでなくていいんだろうか?

	/	/	/

(9:35: まつもとさんは,O'REILLYの「Open Source」T-shirtsを着て登壇)

〇オブジェクト指向スクリプト言語Ruby
(Ruby開発時について)
石塚さんと「こんなのあるといいね」という会話から始まった.
'93〜だから,もう6年経っている.こんなに人が集まるとは...
今日はRubyについて,語ろうかな.(かっこいい)

〇Rubyとは?
今までRubyについて話す機会は何度かあった.
'98.11のPerl Conferenceとか,'99.3のLinux Conferenceとか.
Rubyについて話す場面としては,初めて,
(観衆の)みんなの需要がよくわからない.
というわけで,質問と答えという形式で,明らかにしようと思う.
予めQandAをいくつかこちらで用意したので,
これについて説明するうち,みなさん質問を考えておいてね.

〇なぜ新しい言語を?
(まつもとさんは)言語おたくです.
最大の理由は,作りたかったから.
高校の頃から,「いつかは自分の言語を作る」と考えてた.
現在使っているもの(環境)は,OSを含め,すべて,
ソースが公開され,自由にアクセスできる,フリーソフトウェア.
それらに対する可能な貢献として...(言語を作った)
「新しい酒には新しい革袋を」
新しい酒とは,オブジェクト指向.
新しい革袋とは,新しい言語.
「There's More Than One Way To Do It.」
やり方はいろいろある.Perl,Pythonだけじゃなく,Rubyがあってもいいよね.
少なくとも,私にとってRubyは気持ちいい.

〇なぜRubyという名前?
宝石の名前から.Rubyは略語ではない.考えたんだけど,
uとかbとかyとかあると難しい...
コードネームであり,すぐに変わる予定だったんだけど,6年変わってません.
「Perlの次」を意識してないわけじゃないけど,
最初からそういうつもり,というわけじゃなかった.
同名のハードウェア設計言語があることは知らなかった.
PythonのニュースグループでRubyが紹介され,
その同名の言語を使っていた人からメイルが来たこともある.

〇なにに向いてるの?
なんでも書けます.チューリングマシンだかなんだかの理屈としては
そういうものらしいし.:-)
one-linerから数万行まで書ける.でも数万行のRubyコードはまだない.はず?
スピード狂と,オブジェクトが死ぬほど嫌い,という人には向かないかな.
スクリプト的処理には向いてます.めんどくさいこといろいろ書かなくてもいい.

〇Perlとの違いは?
若い.良い意味でも悪い意味でも.Perlは'86か'88で,5歳くらい若いのかな?
ちなみにわたし(まつもとさん)もlwallより若いし.:-)
「悪い意味」(で若い)ってのは,ソフトウェアの蓄積がないこと.
いつかは追いつきたいですね.
(Perlと)思想は結構似てます.
- UNIX主義.
- Easy things should be easy, hard thing should be possible.
  「Easy things should be easy」については,そういう専門言語は多い.
  でも,「hard thing should be possible」難しいことができないのはいかん.
- 非ミニマリスト
  ミニマリズムってのは,「最小限の記述が美しい」ってやつで,これは
  表現方法たくさん・やり方たくさん,とは相反する.
  楽が出来る・もっとも気持ちよくプログラミングできるべき
  (という思想において非ミニマリストであり,Perlと似ている)

〇Perlとの違いは?(その2)
「人間の心理の別の面に注目している」
lwallは大学で自然言語学やってたそうです.偶然だけど,
わたし(まつもとさん)はプログラミング言語学やってた.
Perlには思想がないけど,Rubyには思想がある.
バベル17ってネタわかる人居ます? わかるひと?
(あまり居ない.なひも知らない.SF者の小松さんは隣で大ウケしている)
バベル17ってのは,ある(自然)言語があるんだけど
その言語に思想があって,その言語を使って喋るとその思想に
洗脳されちゃうという小説です.(まだ理解できない客多し)
(Perlとは違って)Rubyにはわたしの思想がたっぷりふりかけてあるので,
使ってると洗脳されるんです.いや冗談.^^;

(バベル17: http://www.imasy.or.jp/~nydela/babel.htm
  サミュエル・R・ディレーニイ, "バベル-17", ハヤカワ文庫SF248, 1977年,
  ISBN 4-15-010248-1。岡部宏之訳。カバー 中西信行。解説 米村秀雄。
  原書は、Samuel R Delany, "BABEL-17", 1966年。by 小松さん情報)

〇Pythonとの違いは?
Pythonって知ってる人?(挙手をうながす)たくさん居るね.
じゃぁ,使っている人は?(同じく)少ないな.さすが(RubyのWorkshop?).
Pythonは'91だったかな.RubyはPythonより2年若い.
両方ともオブジェクト指向言語という点で並べられるけど,
Pythonは最初は手続き型言語でした.(ABCとかいう教育用言語が元でしたっけ?)
でも,思想は結構似てない.
- 多様性に対する考え
  Rubyは基本的に,「多様性は善である」というスタンス(Pythonは違う).
- 簡潔さに関する考え
  Pythonでは,あることをするコードは,誰が書いても同じになる,という考え.
- ミニマリズムに対する考え
  Pythonでは,「たくさん書いた方がいい」ということになってる.
  それだから,例えばgrepを書くのにも,sysをimportして...
  Regexオブジェクトを作って...何行も書かないと.
  「スクリプト言語でそれはありか?」と思っちゃうわけです.
- インデントに関する考え
  いやもうこれはとんでもない.:-)
他にも結構違って...例えばPythonでは,
文字列などの(組み込み?)データがオブジェクトじゃない,
つーか,えーと,難しいな,クラスに属さないオブジェクトなんですね.
それに対してRubyは全部クラスに属するオブジェクトなんです.
これを言うと「Pythonはクラスに属さないオブジェクトを使うやり方も
提供しているだけだ」とか返されて,「ぐ」と言うしかないんだけど.

〇Rubyの特長って?
オブジェクト指向スクリプト言語...で
純オブジェクト指向...で
スクリプトプログラミング...で
ネットワークプログラミング...で
組み込みスレッド...で
日本語対応(UTF-8にも対応)...です.
いやー,できるとは思ってなかったんだけど,ある日よしださんという
方から突然Patchが送られてきて「やりました」って.
フリーソフトって素晴らしいです.ウクライナから突然
「正規表現にバグがあるよ」ってPatchが送られてきたり.
見たら本当にバグがあった.

〇Rubyの思想って?
プログラミングは楽しい...で
オブジェクト指向は素晴らしい.
というか,オブジェクト指向は今やもう常識ですね.
あと,動的なことは素晴らしい.多様性は素晴らしい.
(特に強調して)使い易さにはバランスが大切である,ということ.
Rubyには何ができる? なんでもできます.
問題は,それをするのに,どのくらい気持ちよくできるか,ということ.

〇楽しいプログラミングって?
〇Rubyの設計原理は?
この辺は説明してきたし,もうみなさんわかってますね(と,飛ばす)

〇どうやって学ぶ?
使ってみましょう.
ソースを読みましょう.(Rubyの)ドキュメントはソースです.:-)
マニュアルやホームページを読みましょう.
マニュアルも結構一所懸命書きました.日英揃ってます.
メーリングリストでたずねましょう.
ruby-listで,マクラに「こんなこときいていいのか...」というのがあるけど,
気にしちゃいけません.質問メイルも,(bladeに)アーカイブされます.
そうすれば,後で誰かが検索できます.質問するのも貢献,ということ.
ただ時々やってくるんですけど,
「Windowsのdllについてインストールうんぬん」
という直メイルはやめてください.わかりませんから.^^;
(どうやって学ぶの話)雑誌で読みましょう.
本を買いましょう(会場爆笑).
来月になると,出る...予定です.今度は本当です.
そういえばこないだ過去の(ドキュメントの?)アーカイブを見てたら,
2年前くらいに,「そろそろ出ます」って書いてあった...^^;
本のタイトルは普通で,「オブジェクト指向スクリプト言語Ruby」
表紙も普通です.動物じゃないです.

〇なぜRubyを使わなきゃ?
いや,別に,無理には使わなくてもいいです.
でも,楽しいよ,他の言語より.
Rubyは,「あなたが楽をするため」という面もあるけど,
「楽しくなる」ためのものでもあります.(Rubyの信条)

〇オブジェクト指向って難しくない?
「本来オブジェクト指向は人間にとって自然な考え方」
別に無理して継承を使わなくてもいい.
バリバリにOOしなくてもいいよ,Rubyでは.

〇Rubyの将来性は?
素材の良さは,見る人がみればわかる...でしょ?
だから今日これだけ集まったんだよね? ^^:(yes, sir)
未来は明るいはず.

〇matzにもしものことがあったら?
なんと,縁起でもないことを.松尾さんだったっけ.
「バスにはねられたら」とかなんとか.失礼な...^^;
まぁもしわたしがメンテできなくなっても,
ソースは公開されてるし,Rubyハッカーは他にも居るから.
フリーソフトですから.

〇Rubyの思想に共感した人はなにができる?
Rubyを使って,楽しくプログラミングして,
もしバグを見つけたら,わたしにこっそり連絡してください.^^;
最新版で.いやこっそりじゃなくてもいいけど.

〇Rubyの思想に共感できない人はなにができる?
いませんね今日はそういう人は(と,飛ばす).

〇あなたの質問は?
さて,じゃ,質問は考えてくれましたか?
(10:02: 質疑応答に入る)

◇standardなModuleの使い方は,最近MLで話題になったmaillibのやり方で行くの?
→確定じゃない.今後.方式としては,PerlのModuleに近くて
  名前の付け方が違う,という感じ.maillibでやってみてよかったら他でも...
  くらいの位置づけ.

◇Eiffelに影響された,というのはどの部分?
→rescueという単語.:-)
  それはともかく,「オブジェクト指向入門」を読んで感銘を受けたんです.
  オブジェクト指向に,Smalltalkのすべての機能が必要なわけではないのだ,と.
  で,一度Eiffelの影響を受けて,あっち(静的?)に流れて,
  そこから振り戻してきてRubyを設計した.やっぱり動的なほうがいいよね.
  そんなわけで,具体的な影響はあまり残ってない.

◇byteコード? RMIみたいな? 動的な...プロファイル,デバッガ,引数の型...
→うーん,よくわからない.^^;

◇RDについて.どのようなツールになる?
→Rubyのスクリプトの中に,plaintextっぽくドキュメントを書くと,
  TeXやroffになる,というもの.
  日本には,世界に誇れるツールとして,plain2がある.あれはすごいです.
  わたしもドキュメントは大抵あれで書いてる.
  plain2を見て,Podみたいなめんどくさいことしなくても,
  Plainにそれっぽく書いてもなんとかできるんだ,と思って作ったのがRD

◇1.5はいつ頃になりますか?
→1.5については忘れてください.
  リリースについてはなんとも言えません.
  (まつもとさんは,最終リリースを期待されてるんだと思ってらしたそうです)
  開発開始についてはそろそろです.1.4.1が出たら.
  1.4.1は,CGI libとmaillibを入れると決意したので,来週か...再来週には.

◇メソッドの引数について.最後でない引数の省略は?
→foo( a, b )に対してfoo( 0, 0 )と書くやつを,foo( , b )ですか?
  これはやらないと思う.foo( b: 0 )かな.
  (元の定義はfoo( a = 1, b )になるのかな?)
  Tkで影響が大きい.現在Hash渡しになっているものが,これに置き換わる
  可能性がある.が,この場合symbol渡しになるので,
  従来文字列受けしてたところが困るかな...

◇今はsymbolは整数ですが,大丈夫?
→将来のことを考えたら,型を作ったほうがいいのかな.

◇'93当時に動いてたマシンは?
→NEWS-OSの4.1です.確か3.9ではなかったと思う...

◇商用スクリプトの事例を知っていたら教えてください.
→商用ってのはなんでしょう.何を持って商用というか...
  あんまり知っているわけじゃないけど,例えば,会社の近所の
  市役所で動いてる,CGIの掲示板.うち(netlab)では,CGIといったら
  Rubyです.あとは,前に勤めてた会社のシステムのサーバの一部として,
  Rubyの0.9だかなんだかが,まだ動いてるんじゃないかなぁ.
  その他は,いちいちみなさんから連絡がくるわけじゃないんで,
  わからないです.

◇RAAに,古くて動かないのがあるんですけど,どうしましょう?
→どうしましょう.基本的に,置き場を提供しているだけなので,
  みつけたら作者に連絡してあげてください.わたしが勝手に
  書き換えるわけにもいかないし...
  というわけで,作者さんに連絡してあげてください.あ,わたしにも
  教えてもらえると嬉しいです.

◇1.4が1.2.6より嬉しい点は?
→まず,バージョンが多い.:-)
  あと,速いです.パフォーマンスのチューニングがしてあります.
  1.4は1.1d系で,1.2.6は1.1c系です.(1.1d→1.3→1.4,1.1c→1.2)
  1.1dでチューニングしました.

◇Ruby本(1999年10月発売予定のRuby本)はいくらですか?
→わかりません.3000円代かな?
  ページ数は,300くらい?(石塚さんに同意を求める)
  え,もっと? 500くらい?(500ページで3000円代に収まるんだろうか...)
  (無理かも。by まつもとさん)

◇分散オブジェクト環境について考えてますか?
→せきさんどうですか.^^;(dRubyのことですね)
  CORBA bindingですか? Orbitのインタフェイスがあったよね.
  できるんじゃないですか? かんださーん.
  (以下かんださん)今のところまだできません.
  IDLコンパイラがまだありません.現在のところ,
  スタブはライブラリ中に埋め込んじゃってる...
  誰か作ってください.そして僕にください.^^;

◇実行されているスクリプトの移動は?(マーシャリングした)字面でなく,
  コードが移動すると嬉しいんですが...
→今のところ不可能です.バイトコードってことですよね.
  今後その部分はドラスティックに変更されるかもしれない部分ではあります.
  バイトコードになるかも.それでも,スクリプトの移送が可能になるか
  どうかは不明.バイトコードにして公開しちゃうと,その後
  チューニングしづらくなるし...
  今でも,「構文木を公開してくれ」って人が居ますが,
  同じ理由でそこには依存しないようにしてもらってる.しないで欲しい.

◇買ってきたマシンにデフォルトでRubyが入ってると嬉しい.そういう戦略は?
→特にないです.話題になれば,自然とそうなっていくんじゃないかと.
  本が出ればまた状況も...

◇メソッドのオーバーロードは? 引数の型で...
→前に設計した言語にはあった.Rubyでは...無理じゃないかな.
  記号が残ってないから.
  (最初なひは「構文木に記号が残ってない」のかと思ってましたが,
  そうではなく,字面として,使える記号が残ってない,ということだそうです.)
  もしなんとかやったとしても,今度は通常のメソッド呼び出しが
  遅くなりそうだし.少なくとも,1.5や1.6には入りません.
  (記号が残ってないのは構文木ではなく、字面です。

◇(み。@おらくるさん)海外への進出は?
  海外のカンファレンスに乗り込んでいくとか.
→日本製としては,めずらしく英語のdocが揃ってるので,
  (広まる)可能性はあると思うんだけど...
  英語のメイリングリストがあって,(ruby-talk)
  英語ページもあって,freshmeatにも登録されてます.
  ただ,わたしはマーケッタじゃないので...
  (以下み。さん)わたしは技術屋でないので(御謙遜を...),
  (み。さんが)なんかやりましょう.
  (以下まつもとさん)そういや最近,通産省が「日本のビルゲイツを」
  ってのやってます.わたしにもあるツテから勧めが来たんだけど...
  ビルゲイツってプログラマか? プロデューサってならわかるけど.
  わたしは「日本のlwallになりたい」んです.つつましいおじさん.
  話も面白いし.憧れてるんです.
  (ビルゲイツのような)とんでもない家に住むわけでなく,つつましく.

◇OOやったことないんですけど,Rubyで入門する,ってのはどうなんでしょう?
→他のOOと比較するとちょっと違うけど,他に移った時に
  対応がとれなくて困る,というほどでもないと思います.
  無理にOOしなくてもいいです.クラスにして継承しなくても,
  オブジェクトを使ったプログラミングができます.

◇Rubyを使うと,他の言語が使えなくなります.
  でも仕事では使わせてもらえなくて...
→バベル17.:-)
  (他の言語が使えなくなるのは)何故でしょうねぇ.やっぱり
  わたしの思想がふりかけてあるから...
  (仕事では使わせてもらえないの話)Perlも昔は,「Perlじゃメンテできない」
  と言われて,使えませんでした.(でも今やあちこちで使われている)
  Rubyも今後は...やはりマーケティングが重要なのかな.

◇会社であるシステムの開発言語として,わたしはRubyを推してたんですけど,
  評価スクリプトも書いたんですけど,「マニュアルのなさ」
  「(メンテできる)人の少なさ」で,別の言語に負けてしまいました...
→何に負けたんですか? ksh?! うーんんんんんんん.
  (背を向けて唸りながら歩き回るまつもとさん.しばらく唸った後,一言)
  「shに負けたかぁ...」

◇オブジェクト指向の次はなんでしょう?
→ありません.(OOは)究極です.:-)
  いやまぁともかく,エージェント指向とかですか?
  どれどれと思って本を読んでみたんですけど,あれってアプリケーションレベル
  の話なんですよね.オブジェクト指向のパラダイムとはレベルが違う.
  プログラミングパラダイムの変革って,構造化とOOの2回しかないんです.
  OOは'60年代の終わり.20年なかったもの(次のパラダイム変革)が,
  出るか.出るとしてももっと先.もしくはないんじゃないかと.

◇beginって要るんでしょうか?
→例外をトラップするきっかけとして,必要なんです.
  なくてもいいとすると...任意のブロックの後ろや,
  メソッドの後ろとか? メソッドの後ろか...
  そのメソッドの中で起きた例外を捕まえるrescue...
  def
    :
  rescue
    :
  end
  ふーむ,とりあえず問題はなさそうですね.
  できるかも.(PL/SQLみたい...あっちは構造化されてませんが.で,
  ruby-listでの話を見ると,実装されることになったみたいです ^-^)
  とにかく,beginがなくなる,ということはないと思います.

◇雑誌に入れるためにRPMに入れたんだけど,ディレクトリ構成が...
  (すいませんこの項,なひに知識がないせいで,メモしきれてません.
  後日まつもとさんにお聞きしたところ,「CPUによって i586-linux だったり
  i686-linux だったりするのでライブラリが見付からないって話でしたね。」
  とのことです)
→debianでは,どこでcompileしてもアーキテクチャは「386」になるように
  なってます.configureのオプションで...

◇次の本は?
→(また)2年くらい先? :-)
  現在進行中の企画は2冊あります.今年中か,あるいは来年前半.
  ですが,順調に遅れているので...^^;
  内容は入門と実用です.(まつもとさんが)メインオーサではありません.
  (何の話の流れでこうなったか覚えてないけど)
  1.4系は1年は続くと思うので,安心して1.4系を使ってください.
  しばらく過渡期で失礼しました.

(10:45: 終了)