『初めてのRuby』出版記念トークイベント に行ってきたまとめ
辺りを読んで。
Ruby にはリファレンスマニュアルはありますが、あれは、例えばPython の ドキュメントのように、まったくの初心者が読める物ではなく、ある程度 Ruby を知っていないと読めないもので初心者には向いていない 初めてのRuby を読んだ後にどうすればいいか 結論から言えば、「リファレンスマニュアルを読め!」です。
私は Ruby という言語の勉強のために参照したRuby本は実は1つも 無く(ライブラリの使い方のための本とかは読みましたが)、 まさにリファレンスマニュアルで育ちました。 リファレンスマニュアルを読めば大抵のことは*1わかる。 (まぁ、これは Ruby に限らず、どの言語でも大抵は 通用する王道なんですが。)
で、私自身、Ruby勉強会とか社内のRuby勉強会とか、 後輩にRubyを教えるときとかにも、 「とにかくマニュアル読め」と何度も言い続けて来ています。
例えば、以下の「Rails開発ツールガイド」という発表の中でも いきなり最初に「マニュアル」の話から入ってます。
が、トークイベントでも語られているように、 Rubyのリファレンスマニュアルってどうも読みにくいらしいのですね (私はそう思ったことはなかったので、なかなかその感覚は理解できなかった のですが)。
で、 トークイベントで角谷さんが
リファレンスマニュアルは、Rubyが分かってる人にしかわからないよね(笑
と発言したようなのですが、 私が過去に何人かに Ruby を教えてきた経験から、
Ruby リファレンスマニュアルは C や UNIX のシステムコールが わかってないと読めない
ということを付け加えたいと思います。 (正確には POSIX というのが良いのかな、と思いますが、UNIXの方が 通じやすいので以下では UNIX と言うことにします)
Array とか String などはまぁいいとして、チュートリアル的なコードで よく使いがちな IO#new のリファレンスマニュアルを引用してみましょうか。
オープン済みのファイルディスクリプタ fd に対する新しい IO オブジェクト を生成して返します。IO オブジェクトの生 成に失敗した場合は例外 Errno::EXXX が発生します。
まず、最初の「オープン済みのファイルディスクリプタ fd」という言葉。 これ自体、いきなり UNIX 用語ですよね。 Windows の世界では ファイルハンドルとか言うし、ノーマルな C だとファイルポインタとか言う ので。
百歩譲って、これは UNIX を知らない人が読んでも、かろうじて 「あぁ、fd ってのはきっとファイルを操作するための何かなんだな」程度の 理解でなんとかなりそうだということにして、その続きを読んでみましょうか。
すると、「Errno::EXXXが発生します」と書かれていて、 このリンクをたどってみると、
各 errno に対応する例外クラスです。実際のクラス名については Errno モ ジュールとシステムのマニュアル errno(3) を参照してください。
えー、、、雲行きが怪しくなってまいりました(笑)
「システムのマニュアル errno(3) を参照してください」???
しかも、ご丁寧に、manual page という、UNIX のマニュアルの引き方を説明するページにリンクが張ってあっ て、そこをたどってみると
$ man 1 foo
とかいう記述が出てくる。

その他にも、標準入力、標準出力、標準エラー出力、パイプ、 リダイレクト、ディレクトリ、シンボリックリンク、 パーミッション、 プロセス(親プロセス、子プロセス、fork & exec)、 シグナル、ソケット、 環境変数などなど、Rubyの世界というのは大部分が UNIX の世界を背景として 構成されています。
Ruby が Perl を参考に作られており、 Perl はより高機能な awk やシェルスクリプトとして 設計されたことから言っても UNIX が背景になってしまうのは 必然なんですが。
そして、Ruby リファレンスマニュアルも UNIX の知識を前提として 書かれている部分が多いので、 UNIX のことを知らないと、Rubyのリファレンスマニュアルは 読みにくいわけなんですね。
その昔、プログラミングといえば、CとかUNIXなんてのは基礎中の基礎で(私は今でも そうだと思っていますが)、 「知ってて当たり前」だったので、こんなこと説明しなくても良かったんですが、 どうやら最近のプログラマーというのはCもUNIXも知りません、Javaしか 知りません、PHPしか知りません、Windows しか知りません、という人が 増えて来ちゃったから、こういう食い違いが発生しちゃうのでしょうね。
さて、 UNIX プログラミングの勉強といえば、
とか
辺りが定番なんですが、これらは高い上に重い(物理的にも精神的にも)ので、 とりあえずは以下のようなところから入って行くのが良いと思います。
*1 リファレンスマニュアルを読んでもわからないことはRubyのソースコードを読みます