【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

第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)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91

Coding Edge フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?