Rails本読みおえて、、、

ちょっと前に、たらたら読んでいたのだが、ようやく読み終えた。

RailsによるアジャイルWebアプリケーション開発

RailsによるアジャイルWebアプリケーション開発

まとめると、以下の2点が非常に参考になりました。

  • Web アプリケーションの設計とか注意点とか、と
  • データ(ERD)、業務領域(モデル)というあたりの作り方

Webアプリケーションの設計、注意点、それからプロセス構成とか

いままでぼくが知っているところは、サーバ側(といっても、メッセージング層とか、だいぶユーザーからは遠いところ)が中心でした。そんなわけで、Rails に限らず、Web の設計とか注意点とか、漠然としか知らなかったことを初めて一通り学んだと思います。
さらっと頭に残っていることはこんなところでしょうか。

  1. 破壊的操作は HTTP POSTで!(またはDELETE/PUT、GETじゃないやつね)
  2. セッションの配置の仕方
  3. httpサーバ、アプリプロセスの配置/構成 (の1つの方法)

最初のやつは、きっと Web 屋さんには当然なことなのかもしれませんが、それを警告として触れるだけではなく、フレームワークとしてサポートしてくれているところに Rails らしさを感じました。昔、Java で HelloWorldServlet を書いた時は、doPost を doGet に委譲して・・・、みたいなことをやっていたような。Struts とか Spring/Seasar2 まわりの Web アプリ系ライブラリがこのへんを Java でどう解決しているのかはちょっと気になるところですね。

2番目のセッションの配置については、3番目とも絡むのだけど、完全にアプリ処理プロセスの外部に置いてしまう、というのがキッパリしていて分かりやすい&あとで制御しやすくて良いと思った。少々大きめのシステム開発では、外部ストレージがあるのは普通になってると思うし、小さく始めるときでもやりやすい(はず)。 Rails というか Ruby という意味では、DRb を使ったプロセス間でのデータ共有が面白いところでしょうか。1つ管理するプロセスが増えはするけど、負荷としてはファイルシステムじゃちょっとしんどいよね、でも面倒なことは嫌だ、って場合に手軽に使えるところがいいと思う。永続化は別問題だけど。

で、一番考えさせられたのは3番目のプロセス配置の問題です。あれ?大事なことは最初に書け!って習ったような、、、(〃_ 〃)ゞ
RailsWiki やブログを見ていると、多く出てくるのが、lighttpd + mod_fastcgi + FastCGI の構成。最初は、Ruby がユーザースレッド(OSライブラリスレッドでは無い)で動作するスレッドモデルを採用しているための、逃げの手かと思っていた。でも、色々と考えていくうちに、もしかしたらとっても良い構成なのではないかと思い始めてきた。長くなりそうなので、後で書く

データ(ERD)、業務領域(モデル)というあたりの作り方といったこと

本の中で、「David 曰く」の囲み記事で DHH 自身が考え方を言葉に落としている(脳内ぶちまけ)。その中で、何度か ERD や業務領域*1に触れています。一つは

PK は物理的な数値にしておく

これは、前にも書いたしそういうこと。先週同僚から聞いた話では、楽々ERDレッスン (CodeZine BOOKS)
で、羽生章洋さんも同じことを書いているそうだ。そのうち読もう。

もう一つ、刺激されたことは、これ

単純な関連テーブルをどしどし作るのではなく、
可能な限りモデル化する。
そこに、豊かな振る舞いを追加することで、
ロジックが整理・カプセル化され見通しがよくなる

最後あたりの記憶が曖昧だけど、言ってることは大体あっているはず、たぶん。
SQL でいっぱい JOIN しまくって、フラグとかで条件分岐しまくって、、、みたいなコントローラ(アクションというべきか)を見飽きたところで、こういうことをズバッといわれると鳥肌が立つ。「業務アプリでオブジェクト指向っぽいモデルなんて無理だって、ワッハッハ〜」ということを何度も聞いたことがある。でも、少なくとも小さな開発であれば(弱気)、それは無理ではないはず。と実践の機会が無いまま、空想の世界だけで思っていた。出来るのか?本当に出来るのか?非常に気になる。

今、お仕事では、あるプロセス(群)の管理画面を、Webアプリで作ろう、ということをしている。まだプロトタイプの域を出ていないのだが、出来る限りモデル層を使うように意識している。アクションは、モデルの繋ぎあわせと、必要なエラーハンドリングのみにしたいと。

*1:ビジネスドメイン、というカタカナはあまりピンと来ないので日本語、大和言葉にまでは落とせない・・・