Ruby、君はオブジェクト指向なんかじゃない、謎の生命体試行錯誤だ!

いつものようにベッドの中で体がまだ寝ている間に
僕の意識は目覚めた
昨日寝がけに聴いたMr.ChildrenのHEROの歌詞が
まだ頭の中を回っていた

例えば誰か一人の命と
引き換えに世界を救えるとして
僕は誰かが名乗り出るのを待っているだけの男だ…

「いったいぜんたい、どんな状況なんだ?一人の命と引き換えに世界を救えるって!」
「環境破壊の問題でもなさそうだし」
「宇宙人でも襲ってきたんだろうか?」
「まさか」


朝から解決できそうにない疑問が
僕の上にまた積まれた
寝てる間に問題解決ができる人がいるって話を聞いたことがあるけど
こっちはいつもその逆だ


「さて無駄な思索はやめてそろそろ起きようか」
心の中でそう言って体を起こそうとしたちょうどその時
家の外で僅かながらそれでも確実に何かが落ちた音がした
「何だろう?」


気になって外に出て音がしたほうに行ってみると
そこにはまるい石のような
それでいてあきらかに石ではない
不思議な物体が落ちていた


表面は少し赤み掛かっていて
見る角度によってはきらきらと光る
宝石といえばそうだが
それほど高価そうにも見えない


「いったいなんなんだろう?」


空から降ってきたんだろうか?
空を見上げてみてもそこに穴なんか開いていないし
どこから来たのか皆目見当がつかない
でも確かにどこからか降ってきたんだ


試しに近くにある小枝を拾って突いてみた
「 … 」
なんの反応もない
叩いたり蹴っ飛ばしたりもしてみたけど
結果は同じだった


顔を近づけてその外側をよく観察してみると
その表面に「1」という数字が彫ってあるのに気がついた
それだけが差し当たりこの不思議な物体から得られる情報だった


僕はその不思議な物体を部屋に持ち帰って
少し調べてみることにした
「さてどうするか」
腕組みをしながら少し考えて僕は
馬鹿みたいな話だけど
謎の物体に話しかけてみることにした

$ 1.hello!
# 謎の物体「1」をちょんと突いて「hello!」と話しかけるのをこう表記しよう

すると、驚いたことにその物体が何かしゃべったのだ!

$ NoMess...

「な、なんていったんだいま?」
おそるおそる僕は同じ質問を繰り返してみた

$ 1.hello!

すると今度は確かにはっきりとした口調で答えた

$ NoMethodError: undefined method `hello!' for 1:Fixnum

僕の問い掛けに何だか分からないけどその物体は答えた


生きてる!生きてるんだ!
こいつは単なる物体なんかじゃなくて
意思を持ったある種の生命体なんだ!
僕はそう確信した


その答えの意味はいまのところ僕にはよく分からないけど
少なくとも彼 ー生きてるんだからそう呼んでもいいだろ?ー は
僕のhello!に答えてhello!と返してきたんだ!
数字の「1」と彫られた石のようで石ではない謎の生命体と
最初にコンタクトした人類
それは僕なんだ!そして今がその歴史的瞬間なんだ
まさに僕は「未知との遭遇」の場面に遭遇してしまった


さてこうなったら彼の答えを分析してみようじゃないか
何しろ僕が最初の人類なんだから

NoMethodError: undefined method `hello!' for 1:Fixnum

英語はあまり得意じゃないなあ
「NoMethodError:」ってのは「方法エラーなし」…かな?
「undefined method」ってのは「未定義方法」?


ん?何となく分かってきたぞ君の言いたいことは…

なるほど…
わかったぞ!

方法に問題なし: 規定されたやり方じゃないけど。1:Fixnum君`hello!'

だろ?君の答えは!
おそらく僕の問い掛け方が君たちのルールに従っていなくて
一瞬戸惑ったけどまあ意味は分かるので受け入れてくれたんだね
君は僕の名前が分からないので
差し当たり1:Fixnumを僕の名前としたんだね


あっ待てよ
そうかちがうぞ
FixnumはFixed numberの略だね?つまり固定番号だ
そうか君が最初に出会った人類が僕だから
君は僕に固定番号の1を割り当てたんだね?
そうだね?すごいよ君!


今度は名前を聞いてみようじゃないか

$ 1.name?

あれ?さっきと同じ答えじゃないか

$ NoMethodError: undefined method `name?' for 1:Fixnum

でもよく見ると`hello!'のところが`name?’になっている


なあんだ
わかったぞ
彼はただこちらの問い掛けに
おうむ返しをしてただけだったんだ!


それじゃあこうしよう
君らへの規定のやり方ーmethodーとやらを教えてもらおうじゃないか

$ 1.method

ん?今度はなんだ?

$ ArgumentError: wrong number of arguments (0 for 1)

「議論に問題あり: 議論の数が違う(0じゃなくて1)」ってこと?
君たちのやり方が分からないから聞いてるのにつれないなあ
そうか
もしかしたら複数形にしろってことだね?

$ 1.methods

おおっ!ちょ、ちょっとまって!
もっとゆっくり!今紙に書き取るから!

$ => ["%", "inspect", "<<", "singleton_method_added", "&", "clone", ">>", "method", "round", "public_methods", "instance_variable_defined?", "divmod", "equal?", "freeze", "integer?", "chr", "*", "+", "to_i", "methods", "respond_to?", "-", "upto", "between?", "prec", "truncate", "/", "dup", "instance_variables", "__id__", "modulo", "object_id", "succ", "|", "eql?", "zero?", "~", "id", "to_f", "singleton_methods", "send", "prec_i", "taint", "step", "to_int", "frozen?", "instance_variable_get", "__send__", "^", "instance_of?", "remainder", "to_a", "+@", "nonzero?", "-@", "type", "**", "floor", "<", "protected_methods", "<=>", "instance_eval", "==", "prec_f", "quo", ">", "display", "===", "downto", "id2name", "size", "instance_variable_set", "kind_of?", "abs", "extend", ">=", "next", "to_s", "<=", "coerce", "hash", "ceil", "class", "tainted?", "=~", "private_methods", "div", "nil?", "untaint", "times", "to_sym", "[]", "is_a?"]

これだね
これが君たちの規定のやり方ーmethodーなんだね?


よし早速そのやり方に倣って問い掛けることにしよう
さてどれにしようか…93個もあるのか…
君の名前を知りたいけどそれを示すようなものはないかな…
これはどう?

$ 1.id

今度はなんだ?

$ warning: Object#id will be deprecated; use Object#object_id
=> 3

「警告: 物体#idには反対である。物体#object_idを使いなさい」
おいおい警告って物騒なこというなよ
反対するならリストから外しておいてくれよな
わかったよobject_idでいいんだね?

$ 1.object_id

こんどはうまくいったぞ

$ => 3

そうか君の名前はいまだ分からないけど
君の物体idーおそらく社会保障番号のようなものーは3ということだ
リストをよく見ると__id__というのもあるな

$ 1.__id__

これも同じ結果が出た

$ => 3

数字の「1」って書いてあるのにidが3って変なヤツだな君は
でもこれで少し君らのことがわかったよ
君の仲間がまだすくなくとも二人(id=1, 2)はいるってことだ


さて君の社会保障番号が分かったので次は何を教えてもらおうか
年齢とか性別とかどこから来たとかそういう情報はないのかな
classというのは何だろう?彼の職務上の階級か何かかな
聞いてみよう

$ 1.class

$ => Fixnum

あれ?Fixnumって
さっき君は僕のことを固定番号:1って呼んだよね?
もしかしてあれは君自身のことだったの?
そうか君こそが固定番号:1なんだ!
そりゃそうだ「1」って彫ってあるんだから
君は数字の「1」以外ではありえない


そうすると最初に君が答えた

$ NoMethodError: undefined method `hello!' for 1:Fixnum

というのは

方法に問題なし: 規定されたやり方じゃないけど。1:Fixnum君`hello!'

なんかじゃなくて

やり方無しのエラー: `hello!'は私こと固定番号:1に未規定のやり方です

ということなんだ


つまり彼、固定番号:1君は
どこかの誰か(あるいは神)によって創造されて
93個のやり方を教え込まれ
そのやり方に対する問い掛けだけに答えるよう教育されている
彼がいったい何のために存在するのか
現時点では皆目検討がつかないけれども
特殊な教育を受けた未確認の生命体であり
何らかの目的のためにこの地球上に送り込まれた
そういうことなんだろう


さて今日はこれくらいにして
これまでの調査でわかったことを記録しておくとしよう

  1. 名称は「固定番号:1」
  2. 物体#idは「3」。従って他にも仲間がいると思われる
  3. 職務階級は「Fixnum(固定番号)」
  4. 今のところ向こうからアクションを起こすことはなく、こちらからの問い掛けに答えるのみである
  5. 93個の規定のやり方(method)で答えうる。既に6個を試してみた
  6. オウムのようにこちらから新たなやり方を教え込むことができるかは不明
  7. こちらが誰であるかということの認識が彼にあるのかは不明。おそらくここがどこであるかということも含めて認識がないのではないだろうか