酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

RailsでデータをDBに投入する Active Record [初心者向けチュートリアル]

プログラム初心者な方向けに始めたRailsチュートリアルシリーズです。今回はRailsのWebアプリケーションでDBを扱う場合に便利なライブラリ『Active Record』の入門記事です。

例えば、拙著の『Nokogiri を使った Rubyスクレイピング』で取得したデータをWebサイトで表示する場合は、スクレイピングした時点でDBに入れておくのが一般的です。そうすることで、スクレイピングする処理と、表示にかかわる処理をシンプルにすることができます。


目次

(1) 前提として
(2) ActiveRecordとは?
(3) ActiveRecordについて最初に読んでおくと良い資料
(4) シンプルなActiveRecordの操作について
(5) 実際にコードを書いていくのに参考になりそうなサイト

(1) 前提として

この記事は、Railsのアプリをベースに話を進めていきます。そのため、もし『Rails x Herokuでアプリを作成』をまだ読んでおられない場合は、もし先に読んでからこの記事に戻ってきてもらえると泣いて喜んで歌って踊ります!

(2) ActiveRecordとは?

ActiveRecordとは、データベース(DB)の種類を意識することなく、プログラミングしやすい形でDBのテーブルとのデータのやりとりを行えるようにするためのライブラリです。

オープンソースのリレーショナル・データベースだけでもMySQL、PostgreSQL、sqlite、SQL Server, Sybase, Oracleなどなど様々な種類があります。各言語に合わせてプログラミングを書き直していると、膨大な手間がかかってしまう可能性があります。そういったことを最小限にしてくれるのがActiveRecordのような『[ORマッパー]』と呼ばれる仕組みです。

(3) ActiveRecordについて最初に読んでおくと良い資料

http://dotinstall.com/lessons/basic_activerecord

まずは、初学者の親友ドットインストールさんの『ActiveRecord入門 (全14回)』が最初に見ておくと捗ります。

http://www.techscore.com/tech/Ruby/Rails/model/activerecord/1/

また、TECHSCOREさんの『ActiveRecordシリーズ』も作成・読み込み・更新・削除(CRUD)の一連の流れを丁寧に解説してくれています!

(4) シンプルなActiveRecordの操作について

モデルの作成

ここからは実際にRailsでモデル(ActiveRecord)を作っていきながら、簡単なデータの追加と削除をやってみます。

まずは、ActiveRecordのモデルUserを作成するためにターミナルで次のコマンドを実行します。

1
rails g model user name:string email:string

ちなみに、rails generate(g)はrailsのモデルや、ビュー、コントローラ、scaffold(土台)をつくることもできます。

このコマンドが完了すると次の2つのファイルができます。

db/migrate/xxxx_users.rb #=> UserモデルをDBのテーブルとして作成するためのファイル
app/model/user.rb #=> Userモデル(ActiveRecord)を表す。モデルに関わる処理を書く

マイグレーションファイル

先ほど自動で作成されたマイグレーションファイルは次のようになっていると思います。

1
2
3
4
5
6
7
8
9
10
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

このファイルを直接編集することも可能です。

まずこのファイル内では抽象化されたカラムを指定します。カラムの型としては次のようなものがあります。

1
2
3
4
5
6
7
8
9
10
11
:string     #=> 文字列
:text       #=> string読みも長い文字列
:integer    #=> 整数
:float      #=> 少数点を含む数
:decimal    #=> floatよみも精度の高い少数点を含む数
:datetime   #=> 日時
:timestamp  #=> より細かい日時
:time       #=> 日付
:date       #=> 日付 
:binary   #=> バイナリデータ
:boolean    #=> Boolean型(true or false)

詳細は『テーブルの作成 マイグレーション(migration))』がおすすめです。

さらに、DBにテーブルを作成するために次のコマンドを実行します。もし、rake db:createを一度も実行していない場合は、先に実行してください。

1
rake db:migrate

レコードのd 作成(Create)・読み込み(Read)・更新(Update)・削除(Delete)

ここからはできるだけ説明を簡単にするためにrails console内で確認をしていきます。次のコマンドを実行するとrailsのコンソールが起動します。

1
rails console

コンソールが起動したら、次のコマンドを実行してみてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# John Dueというユーザーを新規作成
user = User.new({name: 'John Due', email: 'john.due@example.com'})
user.save

# 登録したJohn Dueの読み込み
john = User.find(user.id)
=> #<User:0x007fe6c5436b98> {
  :created_at => Sun, 16 Feb 2014 11:39:34 JST +09:00,
       :email => "john.due@example.com",
          :id => 1,
        :name => "John Due",
  :updated_at => Sun, 16 Feb 2014 11:39:34 JST +09:00
}

# johnのデータを更新
jhon.name = "John Due2"
jhon.email = "jhon.due2@example.com"
user.save

# 登録したJohn Dueの読み込み、データが更新されています。
john2 = User.find(user.id)
=> #<User:0x007fe6c5436b98> {
  :created_at => Sun, 16 Feb 2014 11:39:34 JST +09:00,
       :email => "john.due2@example.com",
          :id => 1,
        :name => "John Due2",
  :updated_at => Sun, 16 Feb 2014 11:39:34 JST +09:00
}

# Johnの削除
john2.destroy

# もうJohnは削除済なので存在しません
john = User.find(user.id)
#=> ActiveRecord::RecordNotFound: Couldn't find User with id=1

これでデータベースからデータを作成(Create)・読み込み(Read)・更新(Update)・削除(Delete)することが出来ました。この一連の操作を頭文字をとってCRUDと呼びます。

Railsの処理への反映

これらの処理は実際にはモデルやコントローラなどに個別に記述していくことでWebアプリケーションを作成します。ここでは、CRUDの流れをわかりやすく丁寧に解説しているSpice Lifeの五十嵐さんが一橋大学での講義に使われたスライドを元にトライしてみてください。

Ruby on Rails講義 第20回: CRUD基礎

Ruby on Rails講義 第21回: New, Create

Ruby on Rails講義 第22回: Model

Ruby on Rails講義 第24回: new&create

Ruby on Rails講義 第25回: model

(5) 実際にコードを書いていくのに参考になりそうなサイト

http://railsdoc.com/

超有名なRailsの日本語リファレンス・サイト。2014/02/16時点でのRailsの最新版(4.0.2)にも対応しており、毎日確実にお世話になっています!

http://magazine.rubyist.net/?0006-RubyOnRails

日本のRubyistで知らない人はいないほど有名なるびまの記事『Rubyist Magazine - RubyOnRails を使ってみる 【第 3 回】 ActiveRecord』は、ActiveRecordの機能についてしっかりと説明をして頂けています。ActiveRecordを基礎からしっかり理解するために是非読んで欲しい記事!

お願い

個人的に初心者向けにRuby/Railsを教える機会が増えています。この記事に関連する分野で効率的に勉強するのにおすすめな資料をご存知なら、Twitterで@zyunnosukeにメッセージ or コメント頂けたら感激します!

逆にこの記事を使ってトライしたら、なんか上手く動かない的な話も同じく大歓迎です。いつでもメッセージ下さい!

おすすめの書籍