Ruby on Rails

【Rails】development? production? 開発環境ごとに処理を切り分けたい時

Railsローカル環境ではテスト用にこんな処理を書いて
本番環境では別の処理をさせたい、みたいに
環境ごとに処理を切り分けたいなーって時ありますよね?

今回はRailsで環境ごとに処理を分岐させる方法を紹介します。

結論

Rails.env で今の環境が取得できます!

if Rails.env.production?
  # 本番環境のみの処理

elsif Rails.env.development?
  # 開発環境のみの処理

end

目次

  1. 結論
  2. 環境
  3. Railsで用意されている環境
    1. 環境を追加したい場合
    2. config/environments/staging.rb を作成
    3. config/database.yml にstagingを追加
    4. config/staging.yml.enc を作成
    5. staging用のmigrate実行
    6. RAILS_ENV=staging でアプリサーバーを起動
  4. まとめ

環境

Vagrant上にCentOSを入れ、Railsは6.0.3を使用しています。
他のバージョンのRailsでも同様の方法で分岐できますので、あんま気にしなくて大丈夫です。

OS: Mac
メモリ: 32GB

Dependents
Rails 6.0.3
Ruby 2.7.2
CentOS7 on Vagrant
Mysql 5.7

Railsで用意されている環境

Railsでアプリを作成すると
development、test、productionの3つの環境を切り分けて作ることができます

  • development – 開発環境
  • test – テスト環境
  • production – 本番環境

それぞれの細かい説明は省きますが
ゴリゴリ実装進めていく環境と、本番に近い状況でテストする環境と、デプロイして実際にユーザーが動かせる環境、という感じですね。

環境を追加したい場合

記事の本題と少しずれますが
これらの環境は任意の名前に変更・追加することも可能です。

例えば、stagingという名前でサーバーを実行したい時の例です。
順番に見ていきましょう。

  1. config/environments/staging.rb を作成
  2. config/database.yml にstagingを追加
  3. 必要に応じて、config/staging.yml.enc を作成
  4. staging用のmigrate実行
  5. RAILS_ENV=staging でアプリサーバーを起動

config/environments/staging.rb を作成

config/environments/ のディレクトリには環境ごとの設定ファイルが入っています。
デフォルトで、development.rb、production.rb、test.rbの3ファイルがあり
これが各環境に対応している設定ファイルです。

今回は新しくstaging という環境を追加したいので
どれかをコピーして、staging.rb を作成します。
※作成する環境に合わせて、staging.rbの内容は変更しましょう。

config/database.yml にstagingを追加

環境を追加するということは、その環境用のDBも作成する必要があります。
database.ymlにstaging用の設定を記述しましょう。

staging:
  adapter: postgresql
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: staging
  password: password
  host: localhost
  timeout: 5000
  database: staging_database

こちらも設定する項目自体は、developmentやdefaultに大体用意されているので、それをコピーしてきて設定値を変更します。

config/staging.yml.enc を作成

以下、Rails 6系を使用している場合です。
config/credentials.yml.enc というファイルをコピーして、staging.yml.enc を作成。
staging用のキーを作成して、中身を書き換えておきます。

※Rails5.1系ではsecrets.yml というファイル名、5.2系ではcredentials.yml というファイル名だったりと
この辺りはRailsのバージョンに応じて、設定方法が異なりますので詳しくは別の方の記事など参考にしてみてください。

staging用のmigrate実行

設定ファイルも用意できましたので、DBを作成します。
RAILS_ENVでstagingを指定してmigrateを実行します。

bundle exec rake db:create RAILS_ENV=staging
bundle exec rake db:migrate RAILS_ENV=staging

RAILS_ENV=staging でアプリサーバーを起動

DBも作成できたら、アプリサーバーを起動します。
こちらも同様に、RAILS_ENVオプションをつけて実行します。

rails s RAILS_ENV=staging

今回はVagrant上に、プライベートIPでRails環境を作成しているので
IPを指定して実行したりします。

rails s -b 192.168.50.10 RAILS_ENV=staging

以上で、環境の追加手順は終わりです。
簡単なメモになってしまいましたが、credential周りなどRailsのバージョンごとに設定方法が変わってきたりもしますので、注意してください。

まとめ

今回は、Railsの環境ごとに処理を切り分ける方法と
環境の追加方法を紹介しました。

実際書く時はこんな感じで、最後にelseを追加しておいてデフォルトの処理を入れておくとエンバグ防止にもなるかもしれません。

if Rails.env.production?
  # 本番環境のみの処理

elsif Rails.env.development?
  # 開発環境のみの処理

else
  # デフォルトの処理

end

環境の追加は、実際行う機会は少ないかもしれませんが
config/enviroments/ 配下に設定ファイルがあり
Rails.env で設定値を取ってこれる という関係性を覚えておくだけでも、何かと便利です。

ピックアップ記事

  1. 【CSS】おしゃれなラジオボタンを作る
  2. 【Blender】拡張機能(アドオン)の基本的な使い方
  3. 【Rails】findメソッドで連想配列から指定した値を検索する
  4. 【Blender】Bumpを使用した質感表現の方法
  5. 【Rails】railsでIndex name ‘xxx’…

関連記事

 
  1. railsをproductionモードで実行する

    Ruby on Rails

    【Rails】railsをproductionモードで実行する

    結論--environmentオプションを使用します。…

  2. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

    【Rails】オブジェクトの中身をログに出力する

    オブジェクトの中身をデバッグしたりする時に便利出力結果をみやすい形に…

  3. Ruby on Rails

    【Rails】レコードが保存済みか確認するpersisted?メソッド

    レコードが保存されているかどうかでUIの表示を切り替えたり、保存されて…

  4. Ruby on Rails

    【Rails】Factory already registered: エラー

    railsでアプリ開発中、最新のfeatureブランチでリベースして…

  5. Ruby on Rails

    【Rails】文字列からHTMLタグを取り除く方法

    Railsで、HTMLタグを取り除いて文字列を出力したい時があります。…

カレンダー

2025年4月
 123456
78910111213
14151617181920
21222324252627
282930  

最近の記事

  1. Blender

    【UE4】用語備忘録メモ
  2. Blender

    起動時の設定をカスタムする【Blender】
  3. WordPress

    【WPテーマ自作】UnderScoresの導入
  4. Blender

    【Blender】拡張機能(アドオン)の基本的な使い方
  5. gitでファイル変更の一部をコミットする

    git

    git add -p でファイルの一部をコミットする【Git】
PAGE TOP