ブログ名

Ruby on Railsの開発環境のデータベースをSQLiteからMySQLへ変更する

SQLiteについて

Ruby on Railsでは、アプリケーションの作成時にデータベースとしてSQLiteがインストールされます。
SQLiteは軽量で、データベースパスワードを必要としないことから手軽に導入でき、組み込みアプリや小規模なアプリの開発環境のデータベースとしてよく採用されます。
しかし、同時に複数のデータを読み書きすることができなかったり、データベースパスワードが無いことから、サービス化する際のデータベースとしては向いていません。

今回は、Ruby on Railsの開発環境のデータベースを、Webサービスのデータベースとして使われることの多いMySQLへ変更する方法をご紹介します。
開発環境とリリース環境のデータベースの種類を合わせることで、仕様の違いに戸惑うことなくスムーズに開発できるようになるでしょう。

筆者の環境

Windows10 + Vagrantです。Rubyは、rbenvを導入してバージョンを切り替えられるようにしています。
今回は安定版の2.5.7を使用しています。

  • Windows 10 Pro 64bit
  • Vagrant 2.2.6
  • Virtual Box バージョン 6.0.20 r137117 (Qt5.6.2)
  • Ubuntu 18.04.2 LTS(仮想環境のOSバージョン)
  • Ruby 2.5.7p206
  • Rails 5.2.3

ライブラリの導入

まずは、MySQLを使用するためのライブラリを導入します。
筆者はUbuntuのためAPTライブラリを使用してライブラリを導入しています。
必要に応じて、brewyumを使うようにして下さい。
sudo apt-get install -y libmysqlclient-dev
sudo apt-get install mysql-client mysql-server

Railsプロジェクトの作成

簡単なRailsプロジェクトを作成します。
--database=mysqlオプションを付けることでGemfileに記述されるデータベースがmysqlになります。
--skip-bundleオプションを付けると、bundle installせずにプロジェクトを作成できます。
rails new hoge --database=mysql --skip-bundle

Railsプロジェクトを作成し終えたら、プロジェクト内へ移動後、bundle installします。
cd hoge
bundle install

bundle installが終わったら、config/database.ymlを編集してMySQLに接続できるようにします。
今回は下記のようにymlファイルに直接値を入れていますが、
開発の際は~/.bash_profile等に環境変数を設定すると良いでしょう。

default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: localhost

development:
<<: *default
database: hoge_development
f:id:shizuuuka0202:20200529223728j:plain

MySQLの設定

「ライブラリの導入」の項でMySQLを導入しているため、mysqlコマンドが使用できるようになっていると思います。
早速、下記コマンドでMySQLを起動しましょう。
sudo service mysql start

MySQLにログインするには、下記コマンドを実行し、表示されたプロンプトでパスワードを入力してください。
mysql -u root -p
mysql> password

また、デフォルトではパスワード認証になっていないことがあります。
その際は正しいパスワードを入力してもログインできませんので、下記手順をお試しください。

①管理者権限でmysqlにログイン
sudo mysql
②パスワードを使用するよう設定変更
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
③キャッシュに保持しているユーザー権限の情報を最新化
mysql> FLUSH PRIVILEGES;
mysql> exit;
④初期設定の実行
sudo mysql_secure_installation
上記コマンドを実行すると、いくつか質問されます。
下記質問(パスワードを強化するかどうか)のみnで回答し、残りはYで回答して下さい。

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: n

MySQLに接続できる方と初期設定ができた方は、MySQLに接続してデータベースを作成します。
database.ymlに記述したデータベース名で作成して下さい。
create database hoge_development

Railsアプリを起動して動作確認

最後に、簡単なRailsアプリで動作確認しましょう。
Scaffoldを使用します。
rails g scaffold User name:string profile:text
マイグレーションファイルが出来るため、rails db:migrateします。
rails db:migrate
RailsのWebサーバを起動して、ブラウザからlocalhostへアクセスします。
rails s -b 0.0.0.0

下記画像のように入力フォームからPOSTし、データベースに保存されることを確認出来たら成功です。

①入力フォーム
f:id:shizuuuka0202:20200529224056j:plain

②投稿結果
f:id:shizuuuka0202:20200529224115j:plain

お疲れ様でした。


戻る