RESTful Ruby on Rails -- その美しさと難しさ
『基礎Ruby on Rails』の原稿を書いているとき、Rails 1.2の目玉であるRESTをどう位置づけるかで悩みました。
本当にRailsがRESTに向かって進むのであれば、本書でもRESTを前面に押し出して書くべきではないかと。
結論的には、最後の9章をRESTに充て、8章までに少しずつ作ってきたサンプルアプリケーションを一気にRESTで書き直す、という構成にしました。
9章がプログラムの機械的な書き換えの話に終始してしまい読み物としてつまらなくなったという反省はありますが、悪くない決断であったと今でも思っています。
長くWeb開発をやってきた方々にとっては、MVCアーキテクチャの考え方はすっと腑に落ちるものであるかもしれませんが、初心者にとっては結構難しいものです。一言で言えば、抽象度が高いのです。そこにRESTという層が追加されると、さらに抽象度が高まって難解になります。
それでは、そもそもRuby on Railsを使うことがなぜそんなに嬉しいのか、ということになりかねません。
CGIプログラムやPHPスクリプトの場合、URL(パラメータ部分を除いた本体)とサーバサイドのプログラムがだいたい1対1に対応します。基本的にURLはサーバのファイルシステムにおける特定のパスを指しているのです。
しかし、RailsのMVCアーキテクチャには「ルーティング」という仕組みがあって、URLのパターンから「アクション」が特定されて、実行されます。CGIプログラムやPHPスクリプトの場合には明確に想像できた「HTTPリクエストが処理される場所」が分かりにくくなります。
それでも、Rails 1.1までの非RESTな世界では、URLにアクションの概念が含まれていました。ID=99の会員を削除するURLは /members/destroy/99 でした。しかし、RESTfulな世界では /members/99 というURLになります。このURLに対してHTTPのDELETEメソッドでリクエストするわけです。URLからアクションの概念が排除されています。
シンプルで美しい世界ですが、この美しさを堪能するためには、多少の素養と経験が必要です。
また、RESTの世界が美しくかつ実用的であることを示すには、説明する側にとっても準備が必要です。
少なくとも当時の私にはその準備ができていませんでした。
--
黒田努
(2008/04/23)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- Rails はエンタープライズの世界で主流になるか (2008/03/29)
- Rails 2.0 ベンチマーク (2008/03/30)
- テスト駆動開発とデバッグコード (2008/04/07)
- Git or Mercurial (2008/04/22)
- RESTful Ruby on Rails -- その美しさと難しさ (2008/04/23)
- RESTful Ruby on Rails -- 単数と複数 (2008/04/24)
- Rails のソースコードを読む (2008/05/02)
- sudo: no passwd entry for app! (Capistrano 2.3.0) (2008/05/12)
- Rails on GlassFish (2008/06/18)
- 「Ruby は型宣言がないけど、ちゃんとしたシステムに使えるのか」という質問にどう答えるか (2008/11/23)
- 「Ruby はスクリプト言語だけど、遅くないですか」という質問にどう答えるか (2008/11/24)
- どのプログラミング言語が将来的に有望か (2009/01/10)
- どのフレームワークが将来的に有望か (2009/01/11)
- フレームワーク対 CMS (2009/01/12)
- Rails 2.3 で spawner/reaper は DEPRECATED に (2009/03/25)
- db/seeds.rb (2009/06/08)
- LESSとSass (2009/08/03)
- Rails 2.3.4 と I18n (2009/08/15)
- RubyGems のアップデート(上書きインストール) (2010/02/03)
- クリエイティブ・コモンズの Rails 教材 (2010/03/08)
- Yet Another Ruby Reference (2010/03/12)
- Rails で MongoDB を使ってみた (2010/03/23)
- Rails で MongoDB を使ってみた(2) (2010/03/25)
- 祝 Ruby on Rails 3.0 beta2 リリース (2010/04/02)
- Rails 3.x 時代のテストフレームワーク (2010/04/24)
- 続・Rails 3.x 時代のテストフレームワーク (2010/05/06)
- Test::Unit と RSpec と Shoulda (2010/05/06)
- Windows + Rails + MySQL 5.1 (2010/07/20)
- Ruby on Rails 2.3.9 リリース (2010/09/05)
- Railtie と Engine と Plugin の関係 (2010/10/23)
- Rails 3.0 と Internet Explorer (2010/11/19)
- acts_as_list: gem か plugin か (2010/11/29)
- さようならNetBeans/こんにちはRedcar (2011/01/28)
- RubyGems 1.5 が出たけど (2011/02/04)
- はじめる!Rails3 第2巻の執筆を始めました (2011/03/20)
- NetBeans 7.0にRuby on Railsプラグインをインストールする手順 (2011/03/21)
- Resqueを利用したRailsでの非同期処理/バッチ処理 (2011/03/23)
- Resqueワーカーをデーモンとして動かす (2011/04/02)
- はじめる!Rails3 第2巻の執筆(経過報告) (2011/04/23)
- はじめる!Rails3 第2巻の執筆(経過報告 No.2) (2011/05/11)
- Rails 3.1: assign_attributesメソッド (2011/05/14)
- Rails 3.1: has_secure_passwordメソッド (2011/05/27)
- はじめる!Rails3 第2巻の執筆(経過報告 No.3) (2011/06/06)
- Ruby on Rails 3.1 を Windows にインストールする手順をかなり丁寧に説明してみました (2011/07/22)
- Ruby on Rails 3.1 を Mac OS X にインストールする手順をかなり丁寧に説明してみました (2011/08/07)
- はじめる!Rails3 第2巻の執筆(経過報告 No.4) (2011/08/15)
- WindowsマシンにUbuntuをインストールしてRails開発を始めるには (2011/08/29)
- Rails 3.xでISO-2022-JP(JISコード)の電子メールを送る: mail-iso-2022-jp (2011/12/05)
- はじめる!Rails3 第3巻について (2011/12/30)
- NetBeans 7.1にRuby on Railsプラグインをインストールする手順 (2012/01/26)

