Feedforce Developer Blog

フィードフォース開発者ブログ

「RubyでつくるRuby」を読んだ話

エンジニアの id:sukechannnn です。最近アナログシンセサイザーを買いました。発信音最高です。

先週の土日で「RubyでつくるRuby」という本を一気に読みました。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

プログラミングを始めたばかりの初心者でも理解できるように、基礎的な部分からからインタプリタが動く仕組みまで非常に簡潔に分かりやすく書いてあります。

プログラミング始めたいけど何から手を付けていいか分からない、という方はこの本から読んでみると良いかもしれません。今後Rubyを勉強するかどうか関係なく、プログラミングにおいて大切なことが詰まっている本だと感じました。 それがこの分量で学べるのは非常にお得だと思います。

この本には2つの目的があります。1つはこれからプログラミングを始める方にとっての入門書となることです。 そしてもう一つが、Rubyを使ってRubyのインタプリタを作りRubyのインタプリタの仕組みを学ぶ、ということです。

インタプリタの仕組みを学べる、ということはAST(抽象構文木)の扱い方を学べるということです。僕がこの本を買ったのはそれが目的でした。以前からRubocopやRubyの補完のGem(rsenseとかrcodetoolsとか)の動く仕組みに興味があったり、最近はどうやってプログラムがコンピュータが読み取れる形式になるのか、なんていうかなり低レイヤーな部分に興味があったりして、ちゃんと勉強したいなーとずっと思っていました。そこでまずはASTを扱えるようになりたいと思い、RubyのASTってどうやって扱うんだろうと調べたりしていました。

ASTはRubyだとripperparser gemでRubyのコードをパースして取得する事が出来ます。ASTは割と簡単に取得できることが分かりました。では、その取得したASTをどう処理したら良いのでしょうか。それが全然調べても出てこないんです。僕の調べ方がゴミなだけかもしれませんが、ググってもほとんど何も情報が出てきませんでした。 血迷って(?)Rubyソースコード完全解説を読んだりもしてみたのですが、全然理解が追いつかずどうしたものかと途方に暮れていました。

ちょうどその頃にRubyKaigiの開催を直前に控えていたのでどのセッションを見るかとか話していたのですが、mameさんの話題になり、その流れでこの本の存在を思い出しました。(以前にアスキーで連載していたのが本になったのは知っていた) 思い出したので改めて調べてみたところ、Rubyでインタプリタを作るとか書いてありました。インタプリタを実行できるということは、プログラムをパースした結果を使っているということ、ひいてはASTを扱うということでは?木とか書いてあるしそれっぽいなと思って買ってみました。

結果、知りたいことがまさに書いてあったという感じで、とても良かったです。言語処理系の話がこれだけコンパクトに分かりやすく書いてある本は他にないと思います。これを読めば全てが分かる、という本ではもちろんないですが、概要を掴み取るにはとても良いですし、しっかり理論が書いてある分厚い本を読むための準備としては最適だと思います。

今後は先輩エンジニアにオススメしてもらったアンダースタンディングコンピュテーションを読もうと思っています。

アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで

アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで

こういう勉強が直接実務に役立つか、と言われるとなんと答えていいか分かりませんが、趣味で学ぶなら最高に面白い、やりがいのある勉強だと思います。 いつかRubyにコントリビュートできるといいな〜、なんて思っています。 ゆるっとがんばります。

(ちなみに上の本を紹介してくれた id:mizukmb は最近社内勉強会でこんな発表をしていました、おもしろい職場ですね)

developer.feedforce.jp