Active Record

曖昧さ回避 アクティブレコード、アクティブ・レコード」はこの項目へ転送されています。イギリスのレコードレーベルについては「ミュージック・フォー・ネイションズ」をご覧ください。

Active Record(アクティブ・レコード)とは、プログラミングにおいて、企業アプリケーションで頻繁に認められるデザインパターンである。

概要

Active Recordはデータベースからデータを読み出すためのアプローチである。データベーステーブルあるいはビューの1行が1つのクラスにラップされ、オブジェクトのインスタンスがそのデータベースの1つの行に結合される。このクラスはデータベースアクセスのカプセル化も行う[1]。オブジェクトの生成後は、保存メソッドで新しい行がデータベースに追加される。 オブジェクトが更新されると、データベースの対応する行もまた更新される。ラッパークラスはテーブルあるいはビューの各カラムに対するアクセサメソッドを実装するが、それ以外の振る舞い(MVCのモデルが担当すべきロジック)も記述することができる[1]

テーブルとクラスが一対一で結びつくことから非常にシンプルな構造となることが特徴で、後述するRuby on Railsでは、データベース定義からほぼ自動でCRUD操作を備えたクラスを作り出すことを実現している。一方でその性質上、複雑な設計のデータベースとは相性が悪い。[1]

Ruby on Rails

広く使われている実装のひとつは、Ruby on Rails のActive Recordの実装である。例えば、id 列(シリアルな主キー)、name 列(varchar 型)、price 列(money 型あるいは double 型)を持った parts テーブルがあれば、次のようなコードになる。

a = Part.new
a.name = "Sample part"
a.price = 123.45
a.save

上記のコードは与えられた値で新しい行をデータベースに作る。これは次の SQL コマンドにほぼ等価である。

INSERT INTO parts (name, price) VALUES ('Sample part', 123.45);

逆に、データベースを検索するためこのクラスを用いることもできる。

widgetname = "gearbox"
b = Part.where(:name => widgetname).first

このコードは、name 列が Ruby 変数 widgetname の値一致する最初の行を取得して、オブジェクトを生成する。取得については、次の SQL コマンドと同義であるが、前述のrubyコードにそれは現れない。

SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1;

別の方法として、上記のコードは次のように短くすることもできる。

b = Part.find_by_name("gearbox")

脚注

  1. ^ a b c “デザインパターンから見たActive Record”. TECHSCORE (2012年5月23日). 2024年4月1日閲覧。

関連項目

外部リンク

  • TECHSCORE - デザインパターンから見たActive Record
デザインパターン
GoFによる23種のパターン
生成に関するパターン
構造に関するパターン
振る舞いに関するパターン
並行性に関するパターン
  • Active object(英語版)
  • Balking(英語版)
  • Double-checked locking(英語版)
  • Event-based asynchronous(英語版)
  • Guarded suspension(英語版)
  • Join(英語版)
  • ロック
  • モニタ
  • Proactor(英語版)
  • Reactor
  • Readers–writer lock(英語版)
  • Scheduler(英語版)
  • Thread pool(英語版)
  • スレッド局所記憶
アーキテクチャに関するパターン
その他のパターン
関連する人々
関連項目
  • 一覧記事一覧
  • カテゴリカテゴリ
  • コモンズコモンズ