第3回 ActiveRecordを使ったソースコードを読もう
倉貫 義人
松村 章弘
TIS株式会社
SonicGarden
2009/1/28
優れたプログラマはコードを書くのと同じくらい、コードを読みこなせなくてはならない。優れたコードを読むことで、自身のスキルも上達するのだ(編集部)
- - PR -
これまでの2回の記事で、Railsアプリケーションの基本的な構成と、テスティングフレームワークであるRSpecを使ったソースコードのコードリーディングを行ってきました。今回は、RailsのキモでもあるDBアクセス処理の部分を扱うActiveRecordを深く掘り下げてコードリーディングを行います。
ActiveRecordとは、まさしく同名の“Active Record”というDBアクセスに関するデザインパターンを実装したライブラリです。データベースのテーブルをクラスとしてビジネスロジックを持たせ、テーブルの1行1行をインスタンスとして扱う考え方のデザインパターンです。このように、オブジェクトとリレーショナルデータベースをつなぐものをO/Rマッパーと呼んでいます。
Railsでは、O/RマッパーとしてActiveRecordを採用しています。テーブルのカラムが、Rubyオブジェクトのメソッドに対応するなど、データベースへの処理をRubyのオブジェクトで扱えるように抽象化されています。これによって、SQLを直接書くことが、ほとんどなくなります。
まずは、あらためて本連載のコードリーディングの題材として扱うオープンソースの紹介をしましょう。
SKIPバージョン1.0リリース!
前回の第2回から今回までの間に、本連載の題材であるオープンソース「SKIP」のバージョン1.0がリリースされました。そこで、今回から扱うソースコードは、バージョン1.0を対象としていきます。

| 関連リンク: | |
| オープンソース「SKIP」 http://www.openskip.org/ |
|
SKIPのバージョン1.0で追加された機能について簡単に紹介しておきます。
- 管理機能が付きました。Webの画面上からSKIPに登録されているデータを管理できるようになりました。
- OpenIDに対応しました。認証処理を外部のOpenIDプロバイダを使ってログインする機能が付きました。
- ランキング機能が付きました。ブログの記事数や、人気記事などのSKIP上のトレンドを知ることができます。
バージョン1.0では、それまでのバージョンと違い、プログラマ以外の一般の方々にとっても、SKIPを使いやすいものにすることを主眼に置いて開発されました。LDAPを使う場合の多い企業ユースでは、LDAPにOpenIDインターフェイスを追加することで、社内の認証方式でSKIPにログインできるようになったので、より企業内での利用が促進されることを期待しています。
そのほかにも多くの改善が行われています。以下のURLよりリリースノートをご覧ください。
| 関連リンク: | |
| SKIP ver1.0のリリースノート http://portal.openskip.org/top/releasenote-ver1-0-0 |
|
今回扱うソースコードの場所ですが、こちらも前回から大きく変更されました。SKIPの開発コミュニティでは、いままではSubversionを自前で運用してソースコード管理を行ってきたのですが、バージョン1.0公開のタイミングでGitHubというインターネットのサービスへ移行しました。以下に、GitHub上のSKIPの公開URLを示します。
GitHubは、gitという分散リポジトリ管理ツールのホスティングサービスです。gitはLinuxの開発でも使われているリポジトリ管理のツールです。gitの詳しい紹介は@ITの解説記事を参照ください。
GitHubからの直接のソースコード取得には、gitコマンドを使います。それができない場合は、SKIPの公式サイトから圧縮ファイルの形でダウンロードすることもできます。
| 関連リンク: | |
| SKIP ver.1.0.1のソースコード http://github.com/openskip/skip/tree/v1.0.1 |
|
| 分散バージョン管理Git/Mercurial/Bazaar徹底比較 http://www.atmarkit.co.jp/fjava/rensai4/devtool03/devtool03_1.html |
|
| SKIP ver.1.0.1のダウンロード http://www.openskip.org/ja/download |
|
MVCモデルのM
今回のコードリーディングでは、SKIP上では利用者情報を示す「ユーザー」の機能を中心に読んでいきます。
ActiveRecordのソースコードは、Railsアプリケーション上では、モデルとして実装されています。Railsアプリケーションは、MVCで構成されており、モデル(M)とビュー(V)とコントローラ(C)という形で、役割分担が明確になっています。
モデルの部分では、ビジネスロジックの処理とデータの保存を行うのですが、そのデータの保存先として、リレーショナルデータベースを使います。そこで、O/RマッパーであるActiveRecordの出番になるわけです。
つまり、ActiveRecordのソースコードを読むということは、Railsアプリケーションのモデル部分のソースコードを読むということです。今回、中心に見ていくのがユーザー機能なので、対応するテーブルは「Users」テーブル、そしてソースコードは「Userモデル」になります。その「Userモデル」のソースコードの先頭部分を見てみましょう。
16 |
class User < ActiveRecord::Base |
| app/models/user.rb | |
16行目(実質の1行目)は、クラスの宣言部分です。ここで、ActiveRecord::Baseというクラスを継承していることが分かります。ActiveRecord::Baseは、Railsフレームワークで用意されているActiveRecordの基本的な振る舞いを実装したクラスです。それぞれのRailsアプリケーションで継承して使われることを前提に作られています。
実は、このようにしてActiveRecord::Baseを継承するだけで、中身のソースコードを1行も書かずとも、「Users」テーブルにアクセスしてデータのやりとりを行うことのできるクラスを作ることができます。
このあたりが、Railsの真骨頂でもあり、黒魔術とも呼ばれる部分になりますが、クラスの名前付けの規約に従って、DBアクセスのソースコードをRails側で用意してくれるのです。その規約は「モデル名」の英語表記での複数形が「テーブル名」になるようにするというものです(例:UserモデルとUsersテーブル)。
1/4 |
| Index | |
| ActiveRecordを使ったソースコードを読もう | |
| Page1 SKIPバージョン1.0リリース! MVCモデルのM |
|
| Page2 データの検索 データの更新 |
|
| Page3 値の検証(バリデーション) コールバック |
|
| Page4 テーブルの関連 トランザクション |
|
| Railsコードリーディング 〜scaffoldのその先へ〜 |
| Ruby/Rails関連記事 |
| プログラミングは人生だ まつもと ゆきひろのコーディング天国 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる |
|
| 生産性を向上させるRuby向け統合開発環境カタログ Ruby on Rails 2.0も強力サポート 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる |
|
| かんたんAjax開発をするためのRailsの基礎知識 Ruby on RailsのRJSでかんたんAjax開発(前編) 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう |
|
| Praggerとnetpbmで作る画像→AA変換ツール Rubyを使って何か面白いものを作ってみよう! 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう |
|
| コードリーディングを始めよう Railsコードリーディング〜scaffoldのその先へ〜(1) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- [ニッチ]E4Xで攻撃できる? できない? (2010/2/8)
ECMAScriptでXMLを扱う「E4X」。ニッチかもしれませんが、攻撃の可能性があることだけは知っておきましょう - GAE上でLL+RDBアプリを作ろう (2010/2/3)
開発者にとって魅力的な環境に映るGoogle App Engine。これまでの開発手法を変えずに使えないだろうか - 豆まきユースケースの包含 (2010/2/1)
デバッグが上手くいかず、気分転換にもらった豆をポリポリ。節分のユースケースを考え始めます - Apacheで仮想ホストを動かそう (2010/1/29)
1台のApacheサーバで、複数の公開サイトを提供するには? 仮想ホストの設定の意味を知ろう
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |







