はじめまして、学生エンジニアのHayashiです。

rubyプログラミング環境構築のActiveRecord編ということで記事を書くことになりました。よろしくお願いします。

さて、ActiveRecordってRuby on Railsのやつでしょ?と思っている方もいると思います。いますよね?

実は(?)ActiveRecordはRuby単体でも使うことができます。

今回はActiveRecordの環境構築について

  • rubyで扱うActiveRecordとは
  • ActiveRecordを使う準備
  • 簡単な使用例

という点について書いていこうと思います。

RubyにおけるActiveRecordとは

ActiveRecordはruby単体で扱えると先ほど言ったばかりですが、Railsの公式を参照します。

Active Recordとは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。Active Recordは、データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行なえるようにします。Active Recordは、ORM (オブジェクトリレーショナルマッピング) システムに記述されている「Active Recordパターン」を実装したものであり、同じ名前が付けられています。

よくわかりませんね。最初は自分も、ActiveRecordを理解するにはRailsのこともわかっていなくてはいけないのかと思いました。もう少し読んでみます。

オブジェクトリレーショナルマッピング (O/RマッピングやORMと略されることもあります)とは、アプリケーションが持つリッチなオブジェクトをリレーショナルデータベース(RDBMS)のテーブルに接続するものです。ORMを使用することで、SQL文を直接書く代りにわずかなアクセスコードを書くだけで、アプリケーションにおけるオブジェクトの属性やリレーションシップをデータベースに保存したりデータベースから読み出したりすることができるようになります。

重要なところは、ActiveRecordを使えばSQL文を直接書く代りにわずかなアクセスコードを書くだけで、アプリケーションにおけるオブジェクトの属性やリレーションシップをデータベースに保存したりデータベースから読み出したりすることができるようになるということです。データベースをrubyのオブジェクトのように扱うことができるんですね。

ActiveRecordは動的なアプリケーション内でも当然役立つものですが、データベースにアクセスしたい場合ならRailsとは関係なく使えます。

例えば、Webスクレイピングプログラムが自動的に取得したデータをデータベースに保存することがRuby単体で可能です。

では次にActiveRecordを使うための環境を整えていきます。

ActiveRecordを使う準備

まずActiveRecordをインストールします。rubyのgemで提供されています。gemはbundlerで管理しています。

以下gemfileです。

source 'https://rubygems.org/'
ruby '2.3.4'

gem 'activerecord'
gem 'mysql2', '>= 0.3.12b4'
bundle install

rubyでMySQLを扱うためにmysql2というアダプターを使っています。

次にサンプルのテーブルを新しく作ります。

mysql> create table sample.characters(id int, name varchar(20), gender varchar(10));

sampleデータベース内にcharactersテーブルを作りました。

mysql> desc characters;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(20) | YES  |     | NULL    |       |
| gender | varchar(10) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

ちなみにテーブル名はruby内で対応させるオブジェクトの複数形にすることになっています。

後にオブジェクトが出てくるのでそこでわかると思います。

これで準備は終わりです。次は実際にテーブルを操作していきます。

実際にActiceRecordを使ってみる

まずはローカルのデータベースにアクセスします。

require 'active_record'

ActiveRecord::Base.establish_connection(
  adapter:  "mysql2",  #アダプター名
  host:     "localhost",  #ホスト名
  username: "root",  #ユーザー名
  password: "",  #パスワード
  database: "sample",  #データベース名
)

これでsampleデータベースに接続できました。

あとはクラスを継承するだけで自由に操作できるようになります。

class Character < ActiveRecord::Base
end
#このCharacterクラスがcharactersテーブルと対応しているということです

#newメソッドで新しいオブジェクトが生成されます
character = Character.new

#カラム名がそのままメソッドになります
#saveでデータベース内に保存されます
character.id = 1
character.name = "Dominick Cobb"
character.gender = "male"
character.save

#createを使えばsaveも同時にしてくれます
Character.create(id:2, name: "Saito", gender: "male")
#実際にテーブルを見てみる
mysql> select * from characters;
+------+---------------+--------+
| id   | name          | gender |
+------+---------------+--------+
|    1 | Dominick Cobb | male   |
|    2 | Saito         | male   |
+------+---------------+--------+

このように実際にデータが追加されています。

データの追加以外にも色々な操作が可能です。

おわりに

簡単な說明になりましたが、最後まで読んで頂いて ありがとうございました。

rubyでクローリングして大量のデータを扱う者にとって、ActiveRecordは便利なツールです。

みなさんも機会があれば使ってみてください。