Herokuのデータベース設定と開発に便利なgemを導入する
  • 2019.08.19に公開
  • 2019.10.12に更新
  • SPA開発
  • 3. RailsをHerokuにデプロイする
  • No.1 / 3
「SPA開発」では、Nuxt.js v2.14未満が使用されています。 Nuxt.jsはv2.13~14で大きなバージョンアップがありました。それに伴い、書き方も大きく変化しています。 v2.14以上で書かれた「SPA開発」の続編は、カテゴリー「 Udemy 」 で公開しています。

追記(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という名前の変数に、下のような値を入れる場合の切り替えを簡単に実行できます。

  • 開発環境 = http://localhost:3000/
  • 本番環境 = http://公開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

あなたの力になれること
私自身が独学でプログラミングを勉強してきたので、一人で学び続ける苦しみは痛いほど分かります。そこで、当時の私がこんなのあったら良いのにな、と思っていたサービスを立ち上げました。周りに質問できる人がいない、答えの調べ方が分からない、ここを聞きたいだけなのにスクールは高額すぎる。そんな方に向けた単発・短期間メンターサービスを行っています。
独学プログラマのサービス
SPA開発の投稿
1
  • 更新情報
  • /
  • #01
「Rails apiとNuxt.jsでSPA開発」のデモアプリを開発中...。【2020/05/19追記: このカテゴリーの更新を一旦終了といたします】
1
  • 今回作るアプリケーション
  • /
  • #01
Railsアプリの完成イメージ画像と作ろうと思った経緯
2
  • 今回作るアプリケーション
  • /
  • #02
今回作るRailsアプリの全体像と機能の整理
1
  • 開発環境を整える
  • /
  • #01
macにRailsをゼロからインストールする
2
  • 開発環境を整える
  • /
  • #02
Rails apiモードのプロジェクトを作成し、Gitにコミットする
3
  • 開発環境を整える
  • /
  • #03
Bitbucketに公開鍵を追加し、Railsプロジェクトをpushする
4
  • 開発環境を整える
  • /
  • #04
HerokuCLIのインストールとherokuアプリケーションの作成
1
  • RailsをHerokuにデプロイする
  • /
  • #01
Herokuのデータベース設定と開発に便利なgemを導入する
2
  • RailsをHerokuにデプロイする
  • /
  • #02
HerokuにPumaを導入するためのRailsセットアップ
3
  • RailsをHerokuにデプロイする
  • /
  • #03
Railsに"Hello"を表示してHerokuへデプロイする
1
  • RailsとNuxt.jsを共存させる
  • /
  • #01
【RailsとNuxt.jsの共存】Rails上にNuxt.jsのプロジェクトを構築しよう
2
  • RailsとNuxt.jsを共存させる
  • /
  • #02
Nuxt.jsからRailsへ、初めてのapi通信でHelloを表示しよう
3
  • RailsとNuxt.jsを共存させる
  • /
  • #03
Nuxt.jsにVuetify2.0を導入してFont Awesomeもインストールするぜ
4
  • RailsとNuxt.jsを共存させる
  • /
  • #04
初めてのRailsApiアプリの公開。Herokuにデプロイする準備と実際のデプロイまで
1
  • データベース設計
  • /
  • #01
データベースを正規化する前に、会計システムの勘定科目データを整理する
2
  • データベース設計
  • /
  • #02
会計システムのデータベース設計に挑む
1
  • バージョンアップ情報
  • /
  • #01
【ご報告】Nuxt.jsを2.10.2にバージョンアップしました
2
  • バージョンアップ情報
  • /
  • #02
【ご報告】Railsを6.0.0にバージョンアップしました
1
  • Userモデル開発
  • /
  • #01
本番環境と開発環境でRailsのSeedデータを切り替える
2
  • Userモデル開発
  • /
  • #02
Railsにユーザーテーブルを作成する【テーブル確認コマンド】
3
  • Userモデル開発
  • /
  • #03
【Rails】EachValidatorクラスを使ったEmailカスタムバリデーション【lib以下読み込み】
4
  • Userモデル開発
  • /
  • #04
【Rails】エラーメッセージの日本語化【i18nとja.ymlのセッティング】
5
  • Userモデル開発
  • /
  • #05
【Rails】開発・テスト・本番環境の全てにユーザーSeedデータ投入する
6
  • Userモデル開発
  • /
  • #06
【Rails】ユーザーモデルのバリデーションをテストする
1
  • ログイン周りのレイアウト設計
  • /
  • #01
【Nuxt.js】ログインフラグでレイアウトを切り替えるテクニック【2019/12/07追記あり】
2
  • ログイン周りのレイアウト設計
  • /
  • #02
【Nuxt.js】ウェルカムページのレイアウト構築【sassの導入】
3
  • ログイン周りのレイアウト設計
  • /
  • #03
【Nuxt.js】ログイン周りの入力フォームコンポーネント設計【2019/12/07追記あり】
4
  • ログイン周りのレイアウト設計
  • /
  • #04
【Nuxt.js】会員登録フォームを構築してサインアップページを完成させる
独学プログラマ
独学でも、ここまでできるってよ。
CONTACT
Nuxt.js制作のご依頼は下記メールアドレスまでお送りください。