181
135

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails/MySQL】RailsにMySQLを導入する方法【プログラミング学習149日目】

Last updated at Posted at 2019-01-22

はじめに

先日1つ目のポートフォリオが完成し、2つ目のポートフォリオ制作に取り掛かっています。

2つ目のポートフォリオではMySQLを使用してみたいと考え、MySQLの導入方法を調べてまとめました。

開発環境

  • Ruby 2.5.1
  • Rails 5.2.2
  • MySQL 8.0.13

RailsへのMySQL導入方法

まずMac へ MySQL を Homebrew でインストールする手順を参考に下記1〜3を実施しました。

1. MySQLのインストール

インストール
 $ brew update
 $ brew install mysql
インストールできたかの確認
 $ brew info mysql
 -> mysql: stable 8.0.13 (bottled)

2. 起動・接続

MySQLの起動
 $ mysql.server start
MySQLへの接続(quitまたはexitで脱出可能)
 $ mysql -u root 

3. セキュリティ設定(rootのパスワード変更等)

セキュリティ設定(基本的に全てYesとして設定を進める)
 $ mysql_secure_installation
   - 1.rootユーザのパスワード設定
   - 2.anonymousユーザの削除
   - 3.rootユーザがリモートサーバからログインできないようにする
   - 4.テスト用のデータベースと接続するかどうかの確認を削除

rootアカウントで作業するのは抵抗があるため、次にRailsのDBを(初めから| |後から)MySQLに変更するを参考にしてMySQLユーザーの作成を行いました。

4. 再度MySQLへ接続、MySQLユーザーの作成

MySQLへ接続
 $ mysql -u root -p
 Enter password:
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 12
 Server version: 8.0.13 Homebrew
 
 Copyright (c) 2000, 2018, 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.

 mysql> 
MySQLユーザーの作成
 mysql> create user 'test-user'@'localhost' identified by 'password-example';
 Query OK, 0 rows affected (0.06 sec)
作成されたかの確認
 mysql> select User,Host from mysql.user;
 +------------------+-----------+
 | User             | Host      |
 +------------------+-----------+
 | test-user        | localhost |
 | mysql.infoschema | localhost |
 | mysql.session    | localhost |
 | mysql.sys        | localhost |
 | root             | localhost |
 +------------------+-----------+
 5 rows in set (0.00 sec)
権限の設定
 mysql> grant all on *.* to 'test-user'@'localhost';
 Query OK, 0 rows affected (0.06 sec)
最後にquitで脱出
 mysql> quit

5. railsアプリの作成

以下を参考にしながらデフォルトがMySQLの設定になったrailsアプリの作成を行いました。

Railsアプリの作成
 # 以下の2つのいずれかを用いればconfig/database.ymlがMySQLの設定になった状態でスタートできる
 $ rails new アプリケーション名 -d mysql
 $ rails new アプリケーション名 --database=mysql

config/database.ymlを確認すると以下のようになっています。

config/database.yml
  default: &default
   adapter: mysql2
   encoding: utf8
   pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
   username: root
   password:
   host: localhost
 
 development:
   <<: *default
   database: アプリケーション名_development
 
 test:
   <<: *default
   database: アプリケーション名_test
   
 production:
   <<: *default
   database: アプリケーション名_production
   username: アプリケーション名
   password: <%= ENV['アプリケーション名_DATABASE_PASSWORD'] %>

6. railsアプリからのMySQLへの接続

(2019.2.12追記)
環境変数について、ローカル環境においてはパスワード等が公開されても特に困ることはないため、わざわざ環境変数で管理する必要もないとのこと。(誰も自分のローカル環境にアクセスすることはできないため。)

上記のdatabase.ymlにパスワード等を入れれば使えるようになりますが、パスワードを晒すのは嫌なので環境変数として管理したいと思い、MySQLの環境変数の設定方法について調査すると、dotenv gemで実現できることが分かりました。
(参考:RailsのDatabaseをsqlite3からMySQLにして、パスワードをdotenvで定数化する

Gemfile
# 以下2つを追加
 gem mysql2
 gem dotenv-rails

bundle installを実行すれば、以下のような形で記述できるようになり、パスワードを晒さなくてよくなります。

config/database.yml
 development:
   adapter: mysql2
   encoding: utf8
   database: <%= ENV['DATABASE_DEV_NAME'] %>
   pool: 5
   username: <%= ENV['DATABASE_DEV_USER'] %>
   password: <%= ENV['DATABASE_DEV_PASSWORD'] %>
   host: <%= ENV['DATABASE_DEV_HOST'] %>

そして最後に、touch .envでアプリケーションのルートディレクトリに.envファイルを追加してそのファイルに以下のように記述することでRailsアプリからMySQLと接続可能になります。
この時に、.gitignore.envを追加しておかないとプッシュした時にパスワード等が結局晒されることになるので注意が必要です。

.env
 DATABASE_DEV_PASSWORD = '設定したパスワードを記入'
 DATABASE_DEV_USER = '作成したMySQLユーザー名を記入'
 DATABASE_DEV_HOST = 'localhostとか'

ここまでできたら、$ rails db:createでDB作成します。
成功すればMySQLの導入は完了です!

その他MySQLに関するメモ

本編とはあまり関係ないですが、MySQLでテーブル中のカラムの内容を取得する方法も調べる機会があったのでついでに備忘録として載せておきたいと思います。

1.MySQLにアクセス
$ mysql -u root -p
2.データベースを指定
# 例えば、sample_appdevelop環境用のDBにアクセスしたい場合
mysql> use sample_app_development
3.カラムを調べる
# 例えば、usersカラムの内容を知りたい場合
mysql> desc users;
(参考)上記1,2を一コマンドで実行する方法
$ mysql -u root -D sample_app_development -p

まとめ

  • RailsにMySQLを導入する際の手順についてまとめました。
  • パスワード等を環境変数で管理するための方法についても触れました。

参考URL

181
135
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
181
135

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?