PONCOTSU

インフラ領域を主にあれしてます

RubyスクリプトからMySQLにログインする

ActiveRecord上からDBに接続すると実際にどんなふうにDB操作をプログラムからやれるものかのかイメージしづらくなる。そこで今回はRubyのプログラムを書いて、MySQLにログインするためのスクリプトを書いてみる。

対象読者

  • ある程度Rubyを書いたことがある
  • サーバ(又はローカル)にMySQLをインストールしたことがある
  • 簡単なクエリを書いたことがある
  • Dockerを使ったことがある

構成

  • ローカル:Rubyコードをつくる・実行する
  • MySQLコンテナ:Dockerを使ってMySQLサーバとしてコンテナをつくる

こんな感じ。 RDSとか使ってもよいのだけども、検証のためなので、擬似外部サーバとしてDockerを採用した。

STEP0: 前提とする環境

  • ローカル
    • mysqlインストール済
    • rubyが動く状態
    • gem install ruby-mysql しておく
    • dockerが動く状態

STEP1: MySQLコンテナをつくる

Docker使っているならわりと簡単。

docker pull mysql
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=root -d -p 33066:3306 mysql

これでMySQLサーバが作成された。 これでコンテナ上にもmysqlのプロセスも立ち上がっているはず。

STEP2: ローカルからコンテナ上のMySQLにログインしてみる

mysql -h 0.0.0.0 -uroot -p
# パスワードは root
mysql >

無事、mysqlにログインできたらOK.

STEP3: コンテナ上で少し下準備

コンテナ上のmysqlにログインしたまま、下準備をする。 具体的には、データベース・テーブルの作成を行ないます。

CREATE DATABASE test;
mysql> CREATE TABLE users(id int, name varchar(50));
mysql> use test;
mysql> show tables;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| users          |
+----------------+
1 row in set (0.00 sec)

mysql> DESC users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

こんな感じのデータベースになればOK.

STEP4: Rubyスクリプトを書く

test.rb

require 'mysql'
connection = Mysql::connect("0.0.0.0", "root", "mysql", "test", 33066)

# 文字コードをUTF8に設定
connection.query("set character set utf8")

# DBに問い合わせ

# 挿入するデータ
data= {
1: 'hoge',
2: 'fuga'
}

# 用意したデータの分だけINSERT文を実行
data.each do |id, name|
  connection.query("INSERT INTO test.users(id, name) VALUES(#{id}, '#{name}')");
end

# SELECT文の結果を取得
rs = connection.query("SELECT * FROM users")

# 検索結果を表示
rs.each do |r|
  puts r.join ", "
end

# コネクションを閉じる
connection.close

実行してみる

書いたスクリプトを実行してみる。

[localhost]$ ruby test.rb
1, hoge
2, fuga

無事、RubyスクリプトからMySQLにログインし、クエリを叩くことができるようになりました。