読者です 読者をやめる 読者になる 読者になる

xengineer’s diary

結果、メモ的な内容になっています。

ActiveRecordを単体で使う(rails なしで)

概要

  • ActiveRecordの挙動をみたいなー
  • 多少中身知りたいなー

と、思ったので、ActiveRecordだけ単体で使ってみました。

グーグル先生に聞いてみたら、やってる方を発見したので、

その通りにやってみましたメモです。

uehi.info

前提条件

テスト環境

詳細

今回は、mysqlに直接手作業でデータを突っ込んで、

それを読みだすとこまでの簡単なお仕事です。

まずは、作業用にテキトウなディレクトリを掘る

$ mkdir ar_test
$ cd ar_test

Gemfileに必要なGemを書いてインストール

Gemfileはこれ。

# Gemfile

source "https://rubygems.org/"

gem 'mysql2', '~> 0.3.20'
gem 'activerecord'
gem 'pry'
gem 'pry-byebug'
  • DBは、mysqlにするので、mysql2
  • debugというか、調査にも使いたいので、pryとpry-byebug
  • mysql2だけバージョン指定してるのは、最新だとなんかがうまくいかなかったから

でbundlerでインストール。

$ bundle install

今回は、ActiveRecordは、ver4.2.4。

# Gemfile.lock

GEM
  remote: https://rubygems.org/
  specs:
    activemodel (4.2.4)
      activesupport (= 4.2.4)
      builder (~> 3.1)
    activerecord (4.2.4)
      activemodel (= 4.2.4)
      activesupport (= 4.2.4)
      arel (~> 6.0)
    activesupport (4.2.4)
      i18n (~> 0.7)
      json (~> 1.7, >= 1.7.7)
      minitest (~> 5.1)
      thread_safe (~> 0.3, >= 0.3.4)
      tzinfo (~> 1.1)
    arel (6.0.3)
    builder (3.2.2)
    byebug (8.0.1)
    coderay (1.1.0)
    i18n (0.7.0)
    json (1.8.3)
    method_source (0.8.2)
    minitest (5.8.2)
    mysql2 (0.3.20)
    pry (0.10.3)
      coderay (~> 1.1.0)
      method_source (~> 0.8.1)
      slop (~> 3.4)
    pry-byebug (3.3.0)
      byebug (~> 8.0)
      pry (~> 0.10)
    slop (3.6.0)
    thread_safe (0.3.5)
    tzinfo (1.2.2)
      thread_safe (~> 0.1)

PLATFORMS
  ruby

DEPENDENCIES
  activerecord
  mysql2 (~> 0.3.20)
  pry
  pry-byebug

インストール完了。

mysql準備

ARを使いたいので、次は、mysqlを準備。

DB作成

まずはDBの作成。今回は名前は、ar_testにしよう。

$ mysql -u<username> -p<password>
mysql> create database ar_test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| ar_test               |
| mysql                 |
| performance_schema    |
| tpcc                  |
+-----------------------+
5 rows in set (0.04 sec)
テーブル作成とデータ挿入

テーブル名は、test_tables。

カラムとデータは、こんなのを作っておきます。

mysql> select * from test_table;
+-------+---------+
| col01 | col02   |
+-------+---------+
|     1 | value01 |
|     2 | value02 |
+-------+---------+
2 rows in set (0.00 sec)

コマンドは、こんなん。

mysql> create table test_tables(col01 int not null primary key, col02 varchar(64));
Query OK, 0 rows affected (2.17 sec)

mysql> show tables;
+-------------------+
| Tables_in_ar_test |
+-------------------+
| test_tables       |
+-------------------+
1 row in set (0.01 sec)

mysql> insert into test_tables (col01, col02) values (1, 'value01');
Query OK, 1 row affected (0.19 sec)

mysql> insert into test_tables (col01, col02) values (2, 'value02');
Query OK, 1 row affected (0.97 sec)

mysql> select * from test_tables;
+-------+---------+
| col01 | col02   |
+-------+---------+
|     1 | value01 |
|     2 | value02 |
+-------+---------+
2 rows in set (0.00 sec)

これで準備はできた。

ActiveRecordを使ってみる

早速本題。使ってみよー!

↓↓こんなtest.rbを作ってみる。

# test.rb

require 'rubygems'
require 'bundler'
Bundler.require

require 'active_record'
require 'pry'

database_name = :ar_test

ActiveRecord::Base.establish_connection adapter: 'mysql2', database: database_name, host: 'localhost'

###################################
# ここより下にテスト用のコードをかく
###################################
class TestTable < ActiveRecord::Base
end

test_tables = TestTable.all
test_tables.each do |test_table|
  puts test_table.col01
  puts test_table.col02
end

これを実行すると・・・

$ ruby ./test.rb
1
value01
2
value02

おーー。読めた読めた。

ちゃんとDBの値が出てきておりますよー!

これで一旦は使えるようになったのかな。

おしまい。