追記(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プロジェクトを表示するための第一歩として、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' # コンソール文字の表示を補正する
こんな感じに。
gem 'knock' => User認証機能
token認証を実行するためのgemです。
gem 'bcrypt' => passwordを暗号化
パスワードを暗号化して保存するためのgemです
下の画像は、userのログインパスワードを暗号化してデータベースに保存しています。
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
を実行すると、テストの実行結果に色をつけてくれます。
テスト成功
テスト失敗
あらら、真っ赤っか。
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未満をインストール -
記入無し
... 最新のものがインストールされる
参考