SPA開発 3. RailsをHerokuにデプロイする #01
2019年10月12日に更新

Herokuのデータベース設定と開発に便利なgemを導入する

追記(2019/08/19)

Rails6へバージョンアップする場合は、「config/application.rb」を以下のように書き換えてください。

config/application.rb
...
config.load_defaults 6.0   # 5.2を6.0へ書き換え
...

フロントのNuxt.jsからRailsへapiをリクエストする際に、キャッシュが残ったJSONデータが取得され、挙動がおかしくなりました。

直接的な要因はわかりませんが、上の変更をしたところ正常な挙動になりました。

Rails アップグレードガイド - Rails ガイド - Ruby on Rails ガイド

追記終了。

この記事で達成すること

今回はインターネット上にRailsプロジェクトを表示するための第一歩として、gemファイルの設定を行っていきます。

Gemfileを編集して以下の設定を行っていきます。

  • herokuのデータベース設定
  • rails6へのアップデート
  • その他、必要なGemのインストール

はじめに結論、最終的なGemfile

最終的なGemfileはこのようになります。

コメントが付いているgemが新たに追加したgemとなります。

Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.3'

gem 'rails', '~> 6.0.0.rc1'
gem 'puma', '~> 3.11'
gem 'bootsnap', '>= 1.1.0', require: false
gem 'hirb'                # コンソール出力結果を表にする
gem 'hirb-unicode'        # コンソール文字の表示を補正する
gem 'knock', '~> 2.1.1'   # JWT認証機構
gem 'bcrypt', '~> 3.1.11' # password暗号化
gem 'aws-ses', '~> 0.6'   # 本番環境 mailer

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'dotenv-rails', '~> 2.5.0', require: 'dotenv/rails-now' # 環境変数の管理
  gem 'pry-byebug'             # binding.pry
  gem 'sqlite3', '~> 1.4'      # development DB
end

group :development do
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  gem 'minitest-reporters', '~> 1.1.9'  # test色付け
end

group :production do
  gem 'pg', '~> 0.18.4' # heroku DB
end


# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

最初のbundle install

bundle installはgemをインストールするためのコマンドです。

初めてのbundle installには本番環境用のgemをインストールしない、--without productionオプションをつけます。

このオプションコマンドは最初の一回だけ実行すれば OKです。

本番環境用のgemとは 「group :production do ~ end」の間に記入してるgemのことです。

ここでは 「gem pg, ‘~> 0.18.4’」のことですね。

Gemfileを編集したらターミナルでコマンドを実行しましょう。

$ bundle install --without production

コマンドを実行すると、Railsプロジェクト直下に**.bundle/config**ファイルが作成されます。

このファイルが作成されることで、以後のbundle installコマンドは自動的に--without productionオプションが付いた状態で実行されることになります。

.bundle/config

タイトルなし

それでは、順にgemの説明をしていきますね。

gem ‘pg’ => heroku用のデータベース

herokuではRails標準装備のデータベース、SQLiteがサポートされていません。

そこでheroku用にPostgreSQLを導入します。

  • group :development, :testにgem sqlite3を移動し、
  • group :productionを追記しgem pgを導入します。

この設定は開発環境と本番環境でgemを使い分けるために行います。

Gemfile
...
group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'sqlite3', '~> 1.4'      # development DB
end

...

group :production do
  gem 'pg', '~> 0.18.4' # heroku DB
end
...

これはRailsチュートリアルと同じ設計ですが、おすすめはしません。

できれば開発環境でもPostgreSQLを利用することを推奨します。

なぜかというと、出来る事に若干の違いがあり、開発環境で動くコードが本番環境では動かないという事態が起こるためです。

  • 例えばPostgreSQLは配列データが扱えるが、sqlite3は扱えない。
  • sqlite3はマグレーションファイルの順序は気にしなくて良いが、PostgreSQLはマグレーションファイルの順序でエラーを引き起こす事がある。など

このような場合、開発環境では正常に動いているためエラーの特定が難しくなってきます。

ただデメリットばかりではなく、開発が楽に素早く行えるというメリットもあります。

今回は後者のメリットをとって開発を進めていきます。

gem ‘rails’ => Rails6へバージョンアップ

gemファイル編集のついでにRailsを6へバージョンアップしました。

Gemfile
gem 'rails', '~> 6.0.0.rc1'

現状(2019年8月)の安定版は5.2.3なので、不安な方はバージョンアップしないでください。

以下のコマンドでバージョンアップの確認が行えます。

$ rails -v

Rails 6.0.0.rc2

gem ‘hirb’ => コンソール結果を見やすくする

Rails console コマンドでデータベースを表示する際に見やすく表示してくれます。

Gemfile
gem 'hirb'                # コンソール出力結果を表にする
gem 'hirb-unicode'        # コンソール文字の表示を補正する

こんな感じに。

2019-08-08 12-53-20

gem ‘knock’ => User認証機能

token認証を実行するためのgemです。

gem ‘bcrypt’ => passwordを暗号化

パスワードを暗号化して保存するためのgemです

下の画像は、userのログインパスワードを暗号化してデータベースに保存しています。

2019-08-08 12-59-56

gem ‘aws-ses’ => 本番環境のメーラー

userメール認証の際に、確認メールを送信するためのgemです。

本番環境では、Amazon SESを使ってuserにメールを送信します。

gem ‘dotenv-rails’ => 環境変数を扱いやすくする

環境変数とは、環境ごとに扱える変数のことです。

変数とは、値が入った箱のことです。

開発環境と本番環境で、それぞれ違う値の入った同じ名前の箱(変数)を用意する場合に、切り替えを楽に実行できます。

例えばBASE_URLという名前の変数に、下のような値を入れる場合の切り替えを簡単に実行できます。

gem ‘pry-byebug’ => デバッグを実行

プログラミングの途中にbinding.pryという命令文を差し込むことで、実行を一時停止し、デバッグを取ることができます。

これにより、ブラックボックスになりがちなプログラミングの中身を確認することができます。

gem ‘minitest-reporters’ => test環境を鮮やかにする

ターミナルでrails testを実行すると、テストの実行結果に色をつけてくれます。

テスト成功

2019-08-08 16-34-39

テスト失敗

あらら、真っ赤っか。

2019-08-08 16-33-09

gitにコミットしておこう

gemのインストールと、gemの確認が取れたらgitにコミットしておきましょう。

$ git add -A
$ git commit -m "initial_installation_gemfile"

おわります

Gemfileのversionの表記が気になった方は下のコラムもご覧ください。

次回は、herokuにpumaのセットアップを行っていきます。

(コラム)ruby Gemのversion指定方法

  • '1.0.0' … version1.0.0をインストール

  • '~> 1.0.0' … 1.0.0以上、1.0.9までのversionをインストール。1.1.0以上はインストールされない

  • '~> 1.0' … 1.0以上、1.9までのversionをインストール。2.0以上はインストールされない

  • '>= 1.0' … 1.0以上かつ、最新のものをインストール。2.0があればインストールされる

  • '>= 1.0, < 2.0' … 1.0以上、2.0未満をインストール

  • 記入無し … 最新のものがインストールされる

参考

Rails チュートリアル 1.6.1

【Rails】Gemfileのバージョン指定の書き方 - Yohei Isokawa

現在、カテゴリー「Rails apiとNuxt.jsでSPA開発」のデモアプリを構築中です。記事になるまでもう少々のお時間が必要です。ブログの更新が止まって申し訳ありません。デモアプリの進捗状況は こちらの記事 で随時お伝えしてまいります。
スポンサー広告
次の記事はこちらです
SPA開発
今日のTweet
スポンサー広告