アペフチ

『RESTful Webサービス』でRailsを覚える

今日はちょっと思い出話でも。

Groongaもくもく会@札幌 2015-12-30に参加して来た。帰札した翌日から熱を出して寝込んでいたのだが、直前で治って本当によかった。

もくもく会ではDroonga HTTP Serverのインストールスクリプトの修正を試みていた。進捗はこんな感じ:https://github.com/droonga/droonga-http-server/compare/master…KitaitiMakoto:centos-systemd

その後は忘年会@Sinatra札幌&Sapporoonga 2015-12-30。そこで話題になった一つに、Railsの躓きポイントの話があった。既にうろ覚えだがこんな感じだったと思う。

ウェブアプリケーションを作ったことがない状態でRailsに入門すると、どこで何が起こっているか分からない。scaffoldしてアプリケーションが動くようにはできる。でも何がどうなっているか分からない。その後Sinatraをちょっと勉強して、

get '/' do
# ...
end

get '/entries' do
# ...
end

get '/entries/1' do
# ...
end

みたいなのに触れてみて初めて、「Railsはroutesをまず見るべきなんだ」と分かった、という話。そこから、Rails(のようなフルスタックのフレームワーク)に触れる前に、ウェブの基本的な仕組みを学ぶべきだ、という話になった。その場にはDjangoをやっている人もいて、やり始めはやはり同じような分からなさを感じていたらしい。

僕は、自分のRailsの覚え方は普通ではないし人に勧めるような物ではないと感じていたのだけど、この話を聞いていると意外とよかったのかも知れないと思えてきた。僕がRailsを覚えたのは、Railsの本でも勉強会でもなくて(当時はプログラミングの話をする相手すらいなかった)、『RESTful Webサービス』だった(今はPDF版もあるようだ)。

オライリー・ジャパン
発売日 : 2007-12-21

この本は、勿論Railsの入門書ではない。書名の通り、RESTful Webサービスの解説書だ。前半で、ウェブとは何か、HTTPとは、URIとは、アドレス可能性とは、RESTとは、といった基礎的な考え方と、実例として、Google Mapsのような地図サービスのサーバーサイドのリソース設計が紹介される。今実家にいて手元に実物が無いので記憶頼りだが(こういう時電子本だったら……)、どういうXMLにするべきか(当時はWeb APIはXMLを返すのが普通だった。そしてWeb APIでなくWebサービスと呼ばれていた)、どういうURIにするべきか、地図の拡大・縮小はURIとしてどのように表現するといいか、といったことが紹介される。

そうしてみっちりと理論的なことを叩きこまれた後で後半、ようやくサンプルウェブアプリケーションとして、del.icio.usクローンのブックマークサービスを作ることになる。この時に採用されたフレームワークが、Ruby on Railsだったのだ。Railsのバージョンは2で、ようやくRESTfulルーティングが入ったような頃だったと思う。Rackはまだ入っていなかった。

僕はこれを読みながら、HTTPメソッドとRailsのアクション名との対応表を何度も見返しながら、サンプルアプリケーションを写経することでRailsを覚えていった(Railsアプリケーションの作り方の簡単な解説もあった)。上で言っていた「ウェブアプリケーションの基本的な仕組み」を散々解説された後でRailsに触れることになったし、しかもこの本の順番だとURI設計をし、config/routes.rbに反映させて確認してからようやくコントローラーやモデルの実装に入った。期しないで、上で挙げた落とし穴に嵌らなかったわけだ。

Rails Guides日本語)やRails Tutorial日本語)、またはRails用の本を使ったわけではないので、正当な覚え方ではないのだろうと思っていた(その後Railsの本も何冊か読んではいる)し、何より人に勧めるような覚え方ではないと感じていたのだが、意外とそうでもないのかも知れない。しかし、この本は多少古い(XML、del.icio.us、Rails 2……)ので、やっぱり人には勧めにくい。そこで、『Webを支える技術』の実践編という位置付けで、Railsを使ったハンズオンチュートリアルを書いてみるのはどうだろう。

そこまでいかなくても、いきなりRailsで手を動かすのではなくて、先にこの本を読んでおくことにするのはどうだろう。

なお、当たり前の断りとして、適した覚え方は人それぞれだ。特に、人は自分の習得方法がいい物だと思いがちなので、そういったバイアスもある。何より僕は今のRails 4、5は殆ど触っていないので、今でも通用する考え方かは分からない。