技術・科学

Railsの学習で考えた(Active Record編)

投稿日:

RailsによるアジャイルWebアプリケーション開発」を使ってじわじわとRailsの勉強を進めている。
やっとActiveRecordに関する章を読み終わった。リレーションシップとか集約なんてところを読むと頭がオーバーヒートしそうになった。RDBでもこの辺の話が出てくると実際にテーブルを作ってSQLたたいてみないと理解できないところで、僕はこの辺の集合論的なものが昔から苦手なのだ。
だからここを読み込むのはかなり辛い作業になったのだが、O/Rマッピングの本質的なことを理解できたような気がする。
というのは、RailsではRDB上で複数のテーブルであったり、複数の列として表されるモノを、うまく結合したり分解したり変換したりして完全なオブジェクトであるモデルを実装しやすいのだ。モデルというやつは必ずしもリレーショナルで表現するのが最適とは限らないわけで、RDBを使う限りモデルオブジェクトはリレーショナルな世界とのギャップを埋めるコードを実装する必要があるわけだけれども、モデルクラスが単なるテーブルのアクセスメソッドライブラリになってしまう落とし穴にははまり込んでしまうことは多々あるものなのだ。RailsではActive Recordによる支援機能のおかげで書かなければならないコードを劇的に減せるから、そういう落とし穴にはまり込むこと(というより出られなくなること)を避けられるようにみえる。
ただ、その裏ではRailsの規約に則ったDB実装が必要となるわけで、単純にデータ分析をした結果をテーブル化するわけにはいかないという側面もある。しかし、規約に従ったテーブルを定義すればかなりの部分でRailsが自動的にモデルを構成してくれる。どうしてもRailsに指示しておかなければならないことだけを宣言的に記述し、意図と違うところはオーバーライドで書き換えればいいわけだ。
モデルでのデータの検証に使うヘルパーももともと定義されているものが結構使えるし、モデルとテーブルの間で変換が発生するときにイベントドリブンで動作するコールバックなんて記述方法もある。これらの全てをきちんと理解していればモデルのコーディングはかなり楽になるだろう。
コールバックの一種でオブザーバという機能を利用すると、アスペクト指向的なプログラミングも可能になる。よくあるログの出力みたいな処理はモデルの処理に関する限りアスペクトとして織り込めるわけだ。まだActiveRecordしか勉強していないが、他のモジュールにもたぶん同じような機能は含まれているに違いない。結合点を自由に定義するということができない点が本来の(?)アスペクト指向とは違うが、規約がしっかりしていることによって実用上はほぼ不足がないような気がする。
こんな風に、Railsはオブジェクト指向、O/Rマッピング、そしてアスペクト指向まで、わりと自然な形で理解することができるフレームワークであることがわかってきた。Javaでは何冊もの本とかドキュメントと、たくさんのクラスライブラリを読まなければならず、網羅的に理解しにくかったことがRailsではとても理解しやすい。Railsを理解すればたとえ他のフレームワークを使ったとしてもその設計思想とか実装方法が理解しやすくなる効果があるのではないかと思う。
さて、次はAction Controllerだ。たぶんRailsの一番Railsらしいところなのではないかと想像している。
またじわじわと読み進んでいくことにしよう。
RailsによるアジャイルWebアプリケーション開発
前田 修吾

RailsによるアジャイルWebアプリケーション開発
Agile Web Development With Rails: A Pragmatic Guide (The Facets of Ruby Series) Joel on Software 入門 Ajax プログラミングRuby―達人プログラマーガイド Life Hacks PRESS ~デジタル世代の「カイゼン」術~
by G-Tools







書いた人

nyao

nyao

本を書きたい人にITの基礎から学んでもらって、Kindleで著者デビューするまでをサポートします。 ITってよくわからないという人のために勉強会をやっています。 「読書と編集」という屋号でお仕事をしています。

プロフィールを表示 →

-技術・科学

Copyright© NyaoPress 読書と日常 , 2019 All Rights Reserved.