ぎょーぼのぶろぐ

IT系の話を書いていくブログです。今はRubyの勉強中。

【Ruby】MySQL に接続してみる その1

前置き

Ruby から、MySQL データベースに接続してみます。

今回の環境は、Windows10、Ruby 2.6.6、MySQL 8.0.22 です。

C:\Users\gyobo>ruby --version
ruby 2.6.6p146 (2020-03-31 revision 67876) [x64-mingw32]
C:\Users\gyobo>mysql --version
mysql  Ver 8.0.22 for Win64 on x86_64 (MySQL Community Server - GPL)

MySQL の準備

Windows版の MySQL のインストールについては、ネットに様々、情報が出ていますので、そちらを参考にセットアップしてください。例えばこことか。Windows 版 MySQL インストール手順 - Qiita

セットアップするのは、「MySQL Community Server」です。

導入の際、「MySQL for Visual Studio」とか「Connector/Python」とか、使わないものは入れないでいいです。「Workbench」はコマンド苦手な人には便利なので、入れていいと思います。

インストール後、コマンドプロンプト上で、mysql --version としたときにバージョン情報が出ない場合は、パスがちゃんと通ってませんので、環境変数のパスを追加しましょう。デフォルトでインストールしているなら、C:\Program Files\MySQL\MySQL Server 8.0\bin です。

MySQL 側の準備

Ruby でアクセスする情報を、MySQL側に準備しておきます。

今回は、インストール時に「gyobo」の名前でユーザーを作っておいたので、そのユーザーでログインし、作っていきます。

とりあえず、ログインして・・・

C:\Users\gyobo>mysql -u gyobo -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, 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.

world という名前のデータベースを作ってみます。今回はこだわりがないので、名前だけ指定して生成します。

mysql> CREATE DATABASE world;
Query OK, 1 row affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
+--------------------+
5 rows in set (0.00 sec)

MySQL 8.0 では、デフォルトの文字コードutf8mb4、照合順序は utf8mb4_0900_ai_ci になっています。

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_0900_ai_ci   |
+--------------------------+----------------------+
1 row in set (0.00 sec)

utf8mb4 は、絵文字などの4バイト文字が使える文字コードです。昔、タブレットからも入力があるシステムなのに、誤って utf8 でデータベース、テーブルを作ってしまって、開発の後半になってから「絵文字どうしよう・・・」になった思い出がありますが、デフォルトになってくれたので、その心配はなくなっています。

照合順序は、文字の比較や並べ替えに使用するルールです。utf8mb4_0900_ai_ci は、文字コードutf8mb4 で、Accent Insensitive(アクセント無視)、Case Insensitive(大文字小文字無視)、ということになります。

続いて、テーブルを作成します。USE句を使って、デフォルトのデータベースを world に変更して、CREATE TABLE文でテーブルを作成します。今回は、キーとか制約、インデックスのこだわりもないので、列名と型の指定だけで作成します。

mysql> USE world
Database changed
mysql> CREATE TABLE country(id INT, name VARCHAR(20));
Query OK, 0 rows affected (0.05 sec)

mysql> DESC country;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

適当に、データも入れておきます。

mysql> INSERT INTO country(id, name) VALUES (1, '日本');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO country(id, name) VALUES (2, 'アメリカ');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO country(id, name) VALUES (3, 'イギリス');
Query OK, 1 row affected (0.01 sec)

mysql> select * from country;
+------+----------+
| id   | name     |
+------+----------+
|    1 | 日本     |
|    2 | アメリカ |
|    3 | イギリス |
+------+----------+
3 rows in set (0.00 sec)

このデータに、Ruby のコードからアクセスしてみようと思います。

少し長くなってきたので、次の記事に続きます。

※ DB側の設定はもう一つあって、Ruby からアクセスする際、ユーザー認証の「認証プラグイン」についての設定を変更する必要があります。そちらは続きの記事で。