あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

【Rails/MySQL】RailsでMySQLを使う方法

1. はじめに

Railsではデフォルトのデータベースにsqlite3を使用しています。

今回はRailsアプリケーションのデータベースでMySQLを使用する方法を紹介します。

2. 開発環境

  • macOS Monterey:12.3.1
  • Ruby:3.1.0
  • Bundler:2.3.12
  • Ruby on Rails:6.1.5
  • MySQL:8.0.28

3. 手順

3-1. MySQLのインストールとセキュリティ設定

まずは、MySQLのインストールとセキュリティの設定を行います。

ama-tech.hatenablog.com

3-2. MySQLのユーザー作成

次にMySQLの開発用ユーザーを作成します。

rootユーザーでログインします。

$ mysql -u root -p

ユーザーの作成します。

mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

ユーザーが作成されたことを確認します。

mysql> SELECT User,Host FROM mysql.user;
 +------------------+-----------+
 | User             | Host      |
 +------------------+-----------+
 | mysql.infoschema | localhost |
 | mysql.session    | localhost |
 | mysql.sys        | localhost |
 | root             | localhost |
 | newuser          | localhost |
 +------------------+-----------+
 5 rows in set (0.00 sec)

権限の付与します。

mysql> GRANT ALL ON * . * TO 'newuser'@'localhost';

今回の場合は全てのデータベースへのフルアクセス権を付与していますが、本来はユースケースに合わせた適切な権限を付与します。

権限が付与されたことを確認します。

mysql> SHOW GRANTS FOR 'newuser'@'localhost';

3-3. Railsアプリケーションの作成

次に、使用するデータベースにMySQLを指定してRailsアプリケーションを作成します。

$ rails new <アプリ名> -d mysql

アプリの作成後にconfig/database.ymlを以下のように修正します。

省略

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <ユーザー名>
  password: <ユーザーのパスワード>
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: アプリ名_development

省略

test:
  <<: *default
  database: アプリ名_test

省略

production:
  <<: *default
  database: アプリ名_production
  username: アプリ名
  password: <%= ENV['アプリ名_DATABASE_PASSWORD'] %>

3-4. dotenv-railsの導入

次に、データベースの認証情報を安全に管理するためにdotenv-railsを導入します。

ama-tech.hatenablog.com

なお、作成したアプリをローカル環境でしか使わないなどの場合は特に気にする必要はないので、この手順はとばしてokです。

3-5. データベースの作成

以下のコマンドを実行してデータベースを作成します。

$ rails db:create

rails db:createコマンドはデフォルトでdevelopmenttestの2つのデータベースを作成します。

最後にMySQLにログインしてデータベースが作成されたことを確認します。

mysql> SHOW DATABASES;
+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| ***_development       |
| ***_test              |
| mysql                 |
| performance_schema    |
| sys                   |
+-----------------------+
6 rows in set (0.06 sec)

以上で終了です。


【参考】