Ruby

ActiveRecord(gem)を使ってDB(MySQL)にデータを保存してみよう【Ruby】

mysql_AR
対象者

本記事は「プログラミング初心者」を対象にしています。

ActiveRecord(gem)を使ってDB(MySQL)にデータを保存してみよう

キヨシ
キヨシ
フォッフォッフォッ、キヨシ(@kiyothink12)じゃ^^ 今日はActiveRecordというgemを使ってDB(MySQL)にデータを保存してみようと思うよ^^
ケイタ
ケイタ
DBってデータベースですよね。それってどんなメリットや意義があるんですか?
キヨシ
キヨシ
うむ、良い質問じゃな。それでは下記にまとめてみよう^^

データベースを使うメリット

  • データを探し出すのが楽になる(一元管理でき、関連データの検索も容易)
  • 格納したデータの共有、編集ができ、データの整合性を担保しながら制約をつけて格納できる
  • データの安全性、機密性を保ちやすい
キヨシ
キヨシ
などなど。まあデータベースを利用しないでアプリケーションはありえないと言って良いんじゃなかろうか。
ケイタ
ケイタ
ほえ〜。そうしたら絶対知っておかないとですね!どうやってデータベースが使えるようになって、操作していけるようになるのでしょうか?
キヨシ
キヨシ
うむ、では順を追って説明していこうかの^^

環境構築

  • Ruby 2.2.2
  • MySQL 5.6
  • ActiveRecord 5.2.1
  • Sequel Pro 1.1.2

MySQLをインストール

※既にMySQLをインストールしている方は飛ばしてください。

MySQLとは・・
リレーショナルデータベース(RDBMS)に属しているデータベースです。構成は”行”と”列”で組まれたテーブル形式です。CRUDと呼ばれる「作成(Create)」「読み出し(Read)」「更新(Update)」「削除(Delete)」などの機能をSQLコマンドによって操作することが出来る。

HomebrewでMySQL(ver.5.6)をインストール

Homebrewをまだインストール出来てない方はこちらの記事を参照してください。
Homebrewのインストールの仕方

$ brew install mysql56

 

インストールされていることを確認。

$ ls /usr/local/Cellar/mysql*
5.6.41
※5.6.×× であればOK

 

シンボリックリンクの作成。

$ brew link –force mysql56

 

パスを追加する。

$ echo ‘export PATH=”/usr/local/opt/mysql@5.6/bin:$PATH”‘ >> ~/.bash_profile

 

MySQLを起動させる。

$ sudo mysql.server start
Starting MySQL
.. SUCCESS!

※SUCCESSせずにERRORが出たらMySQLに接続できていないのでエラー文を検索してみてください。

MySQLにログイン(ユーザー名:root,パスワードは無しの場合)

$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.41 HomebrewCopyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>

これでMySQLへの接続準備はOKです。

Sequel Proをインストール

Sequel Proをインストール

次にSequel Proというツールをインストールします。
このツールがあるとデータの操作、管理が非常にやりやすく便利です。

リンク先から(https://www.sequelpro.com/)からSequel Proをダウンロードし、起動してみましょう。

Sequel Proを起動後、下記の画面が表示されたら名前は”localhost”を指定します。ユーザ名、パスワードはMySQLで設定したものです。(画像はユーザ名がroot、パスワードは無しの場合)
接続をクリックします。

sequelpro_top

データベースを作成

Sequel Proを使ってデータベースを作成してみましょう。
データベースは大きな箱のようなイメージでプロジェクト名などにするケースが多いと思います。
Sequel Proの左上から「データベースを追加」を選びます。
add_database

今回は”sample”とデータベース名を名付けて作成しましょう。
named_database_sample

テーブルを作成

データベース”sample”内にテーブルを作成します。プロジェクト内に必要なテーブルを作っていきます。
今回はuserのデータを入れるusersテーブルを作ってみましょう。
※データは基本的に複数であるはずなので、テーブル名は複数形にしましょう。
バーの一番右のクエリをクリックします。

made_users_table

ここに上記画像のようにテーブルを作成するための下記クエリを打ち込み、右下の”現在を実行”をクリックします。

create table users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name varchar(255),
created_at datetime default current_timestamp,
updated_at timestamp default current_timestamp on update current_timestamp
)

 

すると左端のテーブルの欄にusersテーブルが作成されました。
ですが、まだ作ったばかりで何もデータが入っていませんね。

users_tabele_content_no_data

 

ただ、先ほどテーブルを作った時にどんなカラム(列)をどんな構造でテーブルを作成するかを指定していたので以下4つのカラムが出来ていると思います。

  • id
  • name
  • created_at
  • updated_at

レコードを挿入してみよう

それでは早速上記4つのカラムにレコードを入れてみましょう。再びクエリをクリックし、下記を打ち込み、”現在を実行”をクリックしてみましょう。

insert into users (name) value (‘kiyoshi’);

内容をクリックし、「command + R」 ボタンを押して更新してみましょう。

下記のようにエラーはありません;◯◯msかかり、1行が影響を受けました。と下に表示されれば成功です。
no_error

下記のようにレコードが挿入されていれば成功です。

created_kiyoshi_record

この後にレコードを追加していれていくとidは1ずつ足されて新しいレコードが入ります。
これはテーブルを作った時に、AUTO_INCREMENTを入れたからです。

id INT AUTO_INCREMENT NOT NULL PRIMARY KEY

created_atはレコードが格納された時間(current_timestamp)です。
updated_atは格納したレコードが更新された時に時間が更新されます。

テーブルの構造は「構造」から確認、変更することも可能です。

kozo

ActiveRecordを使ってRubyプログラムでレコードを取得、挿入してみよう

gemのactiverecordをインストール

ターミナルで下記コマンドを実行。

$ gem install activerecord

usersテーブルに更にレコードを追加

createメソッドで”kiyoko”というレコードを追加

Rubyプログラムでレコードを挿入してみましょう。
それではsample.rbファイルを作成し、下記コードを記載してみましょう。

require ‘active_record’
require ‘pp’
# DB接続処理
ActiveRecord::Base.establish_connection(
:adapter => ‘mysql2’,
:database => ‘sample’,
:host => ‘localhost’,
:username => ‘root’,
:password => ”
)# DBのタイムゾーン設定
Time.zone_default = Time.find_zone! ‘Tokyo’ # config.time_zone
ActiveRecord::Base.default_timezone = :local # config.active_record.default_timezone# UserクラスはActiveRecord::Baseを継承。UserモデルはActiveRecord::Baseクラスのすべての機能を使用できる。
class User < ActiveRecord::Base; end# usersテーブルにkiyokoを追加
user = {}
user[:name] = “kiyoko”
User.create(user)

 

sample.rbを実行します。

$ ruby sample.rb

 

Sequel Proのusersテーブルをクリックしてcommand + Rで更新してみましょう。
id=2の行(横の列)のnameカラムに”kiyoko”が追加されていると思います。

add_kiyoko_users

allメソッドでレコードを取得

さて、次はデータベースに入っているレコードを取得してみましょう。
先ほどのcreateメソッド関連の行はコメントアウトし、新たに”User.all”をppで出力します。

require ‘active_record’
require ‘pp’
# DB接続処理
ActiveRecord::Base.establish_connection(
:adapter => ‘mysql2’,
:database => ‘sample’,
:host => ‘localhost’,
:username => ‘root’,
:password => ”
)# DBのタイムゾーン設定
Time.zone_default = Time.find_zone! ‘Tokyo’ # config.time_zone
ActiveRecord::Base.default_timezone = :local # config.active_record.default_timezone# UserクラスはActiveRecord::Baseを継承。UserモデルはActiveRecord::Baseクラスのすべての機能を使用できる。
class User < ActiveRecord::Base; end# usersテーブルにkiyokoを追加
# user = {}
# user[:name] = “kiyoko”
# User.create(user)# Userテーブルの全てのレコードを取得
pp User.all

 

実行してみましょう。usersテーブルの全レコードがターミナル上で出力されます。

$ ruby sample.rb

 

条件を指定して特定(idが1)のレコードだけを取得して出力することも出来ます。

# pp User.allの部分を下記に変更し実行
pp User.where(id:1)

 

idが1のnameがkiyoshiのレコードだけ取得、出力できたと思います。

キヨシ
キヨシ
と、いうわけじゃ。ActiveRecordを使ってMySQLに接続しデータをCreate(生成)、Read(読み取り)、Update(更新)、Delete(削除)できるわけじゃな^^
ケイタ
ケイタ
へ〜なるほどですね!理屈はわかったのであとは実際に使ってみながら覚えたいと思います!
キヨシ
キヨシ
そうじゃな。プログラミングは実際に手を動かしてみて頭に入っていくもんじゃからな^^
ABOUT ME
キヨシ
キヨシ
キヨシじゃよ^^ 30歳を超えてからエンジニアに転身。現在はリモートワークしながら海外と日本を行き来して自由気ままに暮らしておるよ( ^ω^ ) フォッフォッフォッ