Ruby On Rails PR

【初心者向け】RailsでMySQLを使うための手順をコマンド付きで解説!

【初心者向け】 RailsでMySQLを使うための 手順をコマンド付きで開設!
記事内に商品プロモーションを含む場合があります

RailsでMySQLを使いたいけど変更方法が分からなくて困っている人

RailsでMySQLを使うようにしたいけど変更方法がわからない…。MySQLを先にインストールしなきゃいけないのかな…?

今回の記事ではこんな方に向けて記事を書きます。

本記事の対象読者
  • Macを利用してRailsの環境を構築した人
  • Railsで今までsqliteを使っていたけどMySQLに変更したい
  • MySQLのインストール方法がわからない

こんにちは、himakuro(@himanakuroneko)です!

以前このhimakuroブログでは【初心者向け】MacでRailsを使えるようにするための環境構築方法を徹底解説!と言う記事を書きました。

この記事ではRailsの初期ページを表示するための内容に特化しており、データベースについてはノータッチでした。

そこで今回の記事ではRailsのデフォルトで使用されているSqliteからMySQLに変更するための手順をコマンド付きで解説をして行きます。

SqliteはRailsの環境構築さえ終わればすぐに利用出来るというメリットはありますが、やはりデータベースと言えばMySQLでしょう。

Web開発を行なっている現場でもMySQLを使うことが殆どなので、今回の記事を読んで是非MySQLをあなたのRailsプロジェクトでも利用出来るようにして行きましょう。

RailsでMySQLを使うための流れ

今回はこの様な流れで作業をしていきます。

RailsでMySQLを使うための手順
  1. Homebrewのインストール
  2. MySQLのインストール
  3. MySQLの起動・停止・自動起動の方法
  4. Gemでmysql2の導入
  5. データベースの設定変更
  6. マイグレーションを実行して動作確認

Homebrewのインストール

今回はMySQLをHomebrewというパッケージ管理ツールでインストールして行きます。

当ブログではRailsの環境を構築する時にHomebrewの入れ方と、道入するメリットを解説しています。

もしまだHomebrewをインストールされていない場合は、下記の記事を参考にインストールしておきましょう。

MySQLのインストール

下記のコマンドをターミナルで実行してMySQLをインストールしていきます。

Console


# brewの更新
$ brew update

# mysqlのインストール
$ brew install mysql

# インストールされたmysqlのバージョンを確認
$ mysql --version

ちなみにbrewコマンドによってインストールされるパッケージは、決まったディレクトリに自動で入るようになっているので、brewコマンドはどのディレクトリで実行しても問題ありません。 

already installedと表示された場合

既にMySQLがインストールされている場合「already installed」と表示され、 brew upgrade mysqlコマンドでバージョン更新が出来ますと言われます。ここでバージョンを更新を行なっても既存のデータベースやテーブルのデータが消えることは無いので、バージョン更新を行なっておきましょう。

MySQLの起動・停止・自動起動

ここでMySQLの起動方法や停止方法を把握しておきましょう。

まずはbrewコマンドでmysqlの情報の確認です。

Console


# mysqlの情報を確認
$ brew info mysql

------- ここから実行結果 -------
mysql: stable 8.0.21 (bottled)
.
.
.
To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start

 

コマンドを実行するとバージョンが表示される他に、たくさんの英文が表示されると思います。

この内容で重要なのは下記の3つです

brew infoからわかるmysqlの情報
  • 接続方法
  • ログイン時に自動で起動させる方法
  • 手動で起動する方法

MySQLへの接続方法

MySQLをインストールした直後は、下記のようなコマンドを実行することで接続をすることが出来ます。

Console


$ mysql -uroot

 

上記のコマンドでmysqlに接続した後はターミナルに mysql> と表示されます。これはmysqlの中に入っている状態ですよというのを表しています。 またmysqlの接続を終了したい場合はexitと入力しましょう。

ログイン時に自動でmysqlを起動させる方法

パソコンを起動させるたびに、手動でmysqlを起動するのは手間だと思う人もいると思います。

その場合は下記のコマンドを実行して、起動時には自動でmysqlが起動する設定にしておきましょう。

Console


$ brew services start mysql

毎回手動でmysqlを起動させたい場合

mysqlは起動していても、特段負荷がかかるようなものではありません。

しかしやはり利用していない時に起動されているのは嫌な人もいると思います。その場合は下記のコマンドを実行して起動するようにしましょう。

Console


$ mysql.server start

mysql2をGemでインストールする

MySQLの準備が出来たら次はGemのmysql2をインストールして行きます。

Gemfileの編集

mysql2をインストールするためにはGemfileを編集する必要があるので、Gemfileファイルを開きmysql2の行を追加しましょう。

Gemfile


# Use sqlite3 as the database for Active Record
gem 'sqlite3', '~> 1.4'  # この行を削除する
gem 'mysql2' # この行を追加する

1点補足として、Railsをインストールしたタイミングによってsqlite3の行で記載されているバージョンが1.4とは異なります。

特に問題はないので、sqlite3の行を削除してmysql2の行を追加しましょう。

bundle installの実行

Gemfileの編集が終わったら、ターミナルでGemfileが存在するディレクトリでbundle installを実行します

Console


# ディレクトリの移動
$ cd ~/Documents/project/rails-practice

# ディレクトリの確認 (ユーザー名の部分は人によって異なる)
$ pwd
/Users/himakuro/Documents/project/rails-practice

# Gemfileがあることを確認
$ ls
Gemfile           README.md         app               bin               config.ru         lib               node_modules      postcss.config.js storage           tmp               yarn.lock
Gemfile.lock      Rakefile          babel.config.js   config            db                log               package.json      public            test              vendor

# bundle installでmysql2をインストール
$ bundle install

 

上記で利用しているcdコマンドやpwdコマンドの結果は、【初心者向け】MacでRailsを使えるようにするための環境構築方法を徹底解説!を参考にRailsの環境を構築された人向けのものとなっています。別の場所にRailsプロジェクトを作成した方は、作成したディレクトリを指定するようにしましょう。

bundle installでエラーが出た場合

bundle installが上手く行かずに下記のようなエラーがでる場合があります。

Console


2 warnings generated.
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/himakuro/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/himakuro/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/extensions/x86_64-darwin-19/2.7.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2

 

このエラーの対処法としては下記の3ステップとなります

エラーが出た時の解決方法
  • opensslをbrewでインストール
  • brew info opensslの実行
  • 必要な環境変数を書き出す

brewでopensslをインストール

brewを使いopensslをインストールします。

Console


$ brew install openssl

opensslの情報を表示

インストールが終わったらopensslの情報をbrew infoで表示します。

Console


$ brew info openssl

openssl@1.1: stable 1.1.1g (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl/1.0.2s (1,795 files, 12.0MB)
  Poured from bottle on 2019-07-21 at 16:04:36
/usr/local/Cellar/openssl@1.1/1.1.1g (8,059 files, 18MB)
  Poured from bottle on 2020-05-12 at 20:32:22
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@1.1.rb
License: OpenSSL
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@1.1/certs

and run
  /usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> /Users/himakuro/.bash_profile

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

For pkg-config to find openssl@1.1 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

==> Analytics
install: 586,594 (30 days), 1,906,939 (90 days), 6,842,127 (365 days)
install-on-request: 71,206 (30 days), 249,547 (90 days), 875,030 (365 days)
build-error: 0 (30 days)

 

大量の英語が表示されますが、ここで重要なのは下記の2行になります。

Console


  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

 

この2行に記載されている末尾の部分、下記で言うとXの部分がpathに相当するものになります。

export LDFLAGS=”XXXXXXXXXXXXX
export CPPFLAGS=”XXXXXXXXXXXXX

そして上記のpathの部分を下記のコマンドに当てはめていきます。

Console


# Xの部分を表示された内容がpath 
$ bundle config --local build.mysql2 "--with-ldflags=XXXXXXXXXXXXX"
$ bundle config --local build.mysql2 "--with-cppflags=XXXXXXXXXXXXX"

# 実際にpathを置き換えた場合の実行例
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib"
$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl@1.1/include"

 

himakuro

himakuro

pathは人によって異なる可能性があるから、しっかりとbrew info opensslで表示されたpathを指定するようにしよう!

bundle installでmysql2をインストール

ここまで出来たら、bundle installを実行してみましょう。

Console


$ bundle install
.
.
.
Bundle complete!

解決しなかった場合

上記の流れを行っても引き続きエラーが出てしまう場合は、下記のコマンドを実行してからbundle installを実行してみてください。

Console


$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

$ bundle install
himakuro

himakuro

bundle installは必ずGemfileが存在するディレクトリで実行しよう!

そして「Bundle complete!」と末尾に表示されれば実行完了!

Railsのデータベースをmysqlに変更

Gemのインストールが完了したら次はRails側のデータベースの設定を変更するためにconfig/database.ymlを編集します。

(変更箇所が多いので既存の内容を全て削除して、下記のコードをコピーして貼り付けることを推奨します)

config/database.yml


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

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

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

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

[アプリ名]の部分には開発しているアプリの名前を入れるのが一般的です。

例えば今回はrails_practiceと言う名前のリポジトリなので、development用のデータベース名はrails_practice_developmentのようにしていきます。test、productionも同様に設定しましょう。

データベースに接続するためのユーザー名とパスワードを変更されている場合は、defaultの項目のusernameとpasswordを正しいものに変更してください。

データベース名で単語を繋げる場合は「-」ではなく「_」で繋げるようにしましょう。

マイグレーションを実行して動作確認

以上で設定は全て完了しました。最後にマイグレーションの動作確認を行いましょう。

Console


# データベースの作成(初回のみ必要)
$ bundle exec rails db:create

------- ここから実行結果 -------
Created database 'rails_practice_development'
Created database 'rails_practice_test'

# テーブルの作成
$ bundle exec rails db:migrate

 

himakuro

himakuro

テーブル用のファイルをまだ1つも作成していない場合はmigrateを実行しても何も起きないよ!

ここではエラーが出ない事だけを確認しておこう!

Railsでmysqlを使えるように出来た

おつかれさまでした。

これであなたのRailsプロジェクトでMySQLが使えるようになりました。

Railsを扱っているようなWeb開発企業では、MySQLはほぼ必須のスキルとなっています。

もしまだsqliteで進めてしまっている場合は今回の記事を参考にMySQLに変更して、今のうちにMySQLのコマンドの使い方に慣れておくことを推奨します。

今回の記事は出来る限りわかりやすく書いたつもりではありますが、内容でここが分かりづらい・ここが間違っているなどあれば気軽にコメントをお願いします!

ABOUT ME
himakuro
新卒で入社したブラック企業から脱出して超ホワイトな会社に転職。エンジニア歴は7年で普段はウェブサービス作ったりブログを書いたり、MENTAで未経験者の方にプログラミングを指導しています。
PR
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール