【Rails】configのenvironments配下のファイルの意味と記述内容|development.rb, production.rb, test.rb, application.rbとは何か?(開発環境・本番環境・テスト環境の違い確認・変更方法)

rails-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

Railsアプリケーションを作成するとconfigディレクトリ配下に、application.rbとenvironmentsディレクトリが生成されます。

その中にはdevelopment.rb、 production.rb、 test.rbの3つのファイルが生成されています。

ここでは、そもそもこのconfigディレクトリとは何か?application.rbやその中にはdevelopment.rb、 production.rb、 test.rbの違いは何か?いつどうやって使うのかについてまとめています。

configディレクトリとは何か?

configディレクトリはrailsアプリケーションの設定に関するファイルを保存するディレクトリです。

ルーティングを記述するroutes.rbやDBの仕様書であるdatabase.ymlもこの中に作成されます。


application.rb

configディレクトリ直下にapplication.rbがあります。

これは、railsの環境は、開発環境(development)、テスト環境(test)、本番環境(production)のすべての環境に共通の設定を記述したファイルです。

なお、environments配下のファイルに同じ変数に対する設定がある場合は、そちらを優先します。


environmentsディレクトリとは何か?

environmentsディレクトリはプロジェクトの実行環境ごとの設定ファイルを保存しているディレクトリです。

railsの環境は、開発環境(development)、テスト環境(test)、本番環境(production)の3つがあります。


開発環境、テスト環境、本番環境の違い

rails srails cなどrailsコマンドを実行する際に環境の指定がない場合は、デフォルトで開発環境(development)となります。


開発環境(development)とは何か?

開発環境(development)においては、appディレクトリ配下のファイルに変更があった場合に自動で読み込みを行います。

webpack使用時はbin/webpack-dev-serveのコマンドを実行すると、jsやscssの変更を検知してコンパイルを自動で走らせることもできます。

変更点をすぐに確認できるので便利ですが、その分負荷が高く本番には向きません。(そもそも本番環境で頻繁に変更を加えることはしません)

開発環境の設定はconfig/environments/development.rbで行います。


テスト環境(test)とは何か?

テスト環境(test)とは、開発環境で作成した機能などをテストするための環境です。バグ検証のテスティングフレームワークであるRSpecなどを使う時に使用します。

テスト環境の設定はconfig/environments/test.rbで行います。

RSpecとは?

Ruby Specの略で、RubyやRuby on Railsでバグ検証を自動化するツールです。


本番環境(production)とは何か?

本番環境(production)とは、本番公開用の環境です。

開発環境に備わっていた、変更内容の自動検知・反映や自動コンパイルなどの機能がない軽量な環境になります。

本番環境の設定はconfig/environments/production.rbで行います。


現在の環境を確かめる方法

現在の環境を確かめるには、RailsコンソールでRails.envを実行します。すると現在の環境が表示されます。

実例

# rails c
Running via Spring preloader in process 178
Loading development environment (Rails 6.1.3.1)

irb(main):003:0> Rails.env
=> "development"


環境を変更する方法

環境を変更するには以下のコマンドを実行します。

Rails.env="環境"

実例

例えば、本番環境(production)に変更する場合は以下のようにします。

#環境をprodcutionに変更
irb(main):004:0> Rails.env = "production"
=> "production"

#確認
irb(main):005:0> Rails.env
=> "production"


環境を指定する方法

コマンド実行時に環境を指定することもできます。各コマンドによって指定方法が異なるので注意が必要です。

なお、デフォルトは開発環境(development)です。


rails sでサーバー起動時に環境を指定する方法

rails sでサーバー起動時に環境を指定するには以下のように「-e」オプションを使って環境を指定します。

rails s -e <開発環境>

-eは–environmentと同じです。

実例

rails s -e production


Railsコンソールの環境を指定する

Railsコンソール起動時に実行環境を指定する場合は以下のようにします。

・rails c <開発環境>

実例

rails c production


rails dbを実行する環境を指定する

rails dbコマンドで処理を実行するときに、どのDB環境に対してコマンドを実行するかを指定するときは以下のようにします。

rails db:<処理> RAILS_ENV=<開発環境>

実例

rails db:migrate RAILS_ENV=production


develompemt.rbの中身詳細

develompemt.rbとは、開発環境の設定を記述したファイルです。

require "active_support/core_ext/integer/time"

Rails.application.configure do
  #ここでの設定はconfig/application.rbよりも優先する。

  #キャッシュを使わず変更点を自動検知しリロードするかどうか(falseの場合キャッシュを使わないので反応速度は遅くなる)
  #prodcution環境などキャッシュを使う場合はtrueにっている
  config.cache_classes = false

  # eager loading用の名前空間を一括読み込するか
  config.eager_load = false

  # エラーが発生した場合に情報をHTTPレスポンスに出力するかどうか
  config.consider_all_requests_local = true

  # Action Controllerが提供するキャッシュ機能を使うかどうか
  if Rails.root.join('tmp', 'caching-dev.txt').exist?
    config.action_controller.perform_caching = true
    config.action_controller.enable_fragment_cache_logging = true

    config.cache_store = :memory_store
    config.public_file_server.headers = {
      'Cache-Control' => "public, max-age=#{2.days.to_i}"
    }
  else
    config.action_controller.perform_caching = false

    config.cache_store = :null_store
  end

  # アップロードしたファイルをローカルに保存する。オプションはconfig/storage.ymlを参照
  config.active_storage.service = :local

  # mailerが送信を失敗した時にエラー表示するかどうか
  config.action_mailer.raise_delivery_errors = false

  # mailerのテンプレートでフラグメントキャッシュを有効にするべきかどうか(指定がない場合はtrue)
  config.action_mailer.perform_caching = false

  # 環境に対する非推奨レポート出力をどこに出力するか(development環境は:log、production環境は:notify、test環境は:stderr)
  config.active_support.deprecation = :log

  # 非推奨のエラーを許可しないようにするか
  config.active_support.disallowed_deprecation = :raise


  # 非推奨の警告を許可しないようにするか
 config.active_support.disallowed_deprecation_warnings = []


  # マイグレーションがペンディングされているかどうかをチェックするミドルウェアを設定する
  config.active_record.migration_error = :page_load

  # ログのDBクエリをハイライトする
  config.active_record.verbose_query_logs = true

  #  デバッグ用にアセットの連結と圧縮をやめるかどうか
  config.assets.debug = true

  # アセットへのリクエストのログ出力を無効にするかどうか
  config.assets.quiet = true

  # i18n(internationalization: 国際化)ライブラリに沿って翻訳するかどうか
  # config.i18n.raise_on_missing_translations = true

  # レンダリングしているファイル名に注釈をつけるかどうか 
config.action_view.annotate_rendered_view_with_filenames = true

  # ファイル更新の自動検出に使われるクラスを指定
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker

  # Action Cableサーバーへのアクセスを許可するかどうか
 config.action_cable.disable_request_forgery_protection = true
end


test.rbの中身詳細

test.rbとは、開発環境の設定を記述したファイルです。

require "active_support/core_ext/integer/time"

#テスト環境は、テストスイートを実行するためにのみ使用する。
#テストスイートとは、テストの実行単位で目的や対象毎にテストケースをまとめたもの。

Rails.application.configure do
  #ここでの設定はconfig/application.rbよりも優先する。

  #キャッシュを使わず変更点を自動検知しリロードするかどうか(falseの場合キャッシュを使わないので反応速度は遅くなる)
  config.cache_classes = false
  config.action_view.cache_template_loading = true

  # eager loading用の名前空間を一括読み込するか
  config.eager_load = false

  #publicファイルサーバーのCache-Controlの設定
  config.public_file_server.enabled = true
  config.public_file_server.headers = {
    'Cache-Control' => "public, max-age=#{1.hour.to_i}"
  }

  # エラーをすべて表示する。キャッシュは使わない
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.cache_store = :null_store

  # 例外は読みまない(例外テンプレートを使用するため)
  config.action_dispatch.show_exceptions = false

  # CSRF対策をオフにする。
  config.action_controller.allow_forgery_protection = false

  # 一時ディレクトリのアップロードファイルを保存する
  config.active_storage.service = :test

  config.action_mailer.perform_caching = false

  # mailerのメール送信はテスト環境内のみ(実際にはメール送信しない)
  config.action_mailer.delivery_method = :test

  # 非推奨の通知を標準出力に出す
  config.active_support.deprecation = :stderr

  # 非推奨の例外を報告する。
  config.active_support.disallowed_deprecation = :raise

   # 非推奨の警告を許可しないようにするか

 config.active_support.disallowed_deprecation_warnings = []

  # i18n(internationalization: 国際化)ライブラリに沿って翻訳するかどうか
  # config.i18n.raise_on_missing_translations = true

  # レンダリングしているファイル名に注釈をつけるかどうか 
 config.action_view.annotate_rendered_view_with_filenames = true
end


production.rbの中身詳細

production.rbとは、開発環境の設定を記述したファイルです。

require "active_support/core_ext/integer/time"

Rails.application.configure do
  #ここでの設定はconfig/application.rbよりも優先する。

  #キャッシュを使う。変更点を自動検知しリロードしない
  config.cache_classes = true

  #eager loadを行う。コピーを作成することでパフォーマンスを上げる。
  # Rakeコマンドの時は無視する
  config.eager_load = true

  # フルのエラー報告行わない
  config.consider_all_requests_local       = false

  # キャッシュを使う
  config.action_controller.perform_caching = true

  # masterキーがENV["RAILS_MASTER_KEY"]かconfig/master.key.のどちらかに存在していること。このキーは暗号解読に使う。
  # config.require_master_key = true

  # /publicから静的ファイルを提供しない(ApacheかNGINXが代替)
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

  # CSSを圧縮する。
  # config.assets.css_compressor = :sass

  #プリコンパイルしたアセットがない場合代替に切り替えない
  config.assets.compile = false

  アセットサーバーから画像、スタイルシート、JSを提供する
  # config.asset_host = 'http://assets.example.com'

  # ファイル送信で使っているサーバーのヘッダーを指定する
  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX

  # 一時ディレクトリのアップロードファイルを保存する
  config.active_storage.service = :local

  # Action Cableをメインサーバープロセスの一部としてマウントする場所を文字列で指定する
  # config.action_cable.mount_path = nil

 # Action Cableサーバーがメインアプリケーション以外か別ドメインの場合に使うサーバーのURLを指定する
  # config.action_cable.url = 'wss://example.com/cable'
  # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]

  # SSLで通信を行うことを強制する
  # config.force_ssl = true

  # Railsのログ出力をどのぐらい詳細にするかを指定する。
  # :infoは有用なログのみ残す。個人を特定できる情報の公開は避ける
  config.log_level = :info

  # すべてのログの前に以下のタグをつける(:request_id)
  config.log_tags = [ :request_id ]

  # 本番環境用の別のキャッシュストアを使う
  # config.cache_store = :mem_cache_store

  # アクティブジョブには実際のキューイングバックエンドを使用する(または、環境ごとに個別のキューを使用)
  # config.active_job.queue_adapter     = :resque
  # config.active_job.queue_name_prefix = "rails6_docker_alpine_production"

  config.action_mailer.perform_caching = false


  # 不正なメールアドレスを無視し配信エラーを報告しない。
  # config.action_mailer.raise_delivery_errors = false

  # I18nのロケールフォールバックを有効にする(任意のロケールのルックアップをフォールバック)
  config.i18n.fallbacks = true

  # 登録済みのリスナーに非推奨通知を送信する
  config.active_support.deprecation = :notify

  # 許可されていない非推奨をログに記録
  config.active_support.disallowed_deprecation = :log

  # どの非推奨メッセージを禁止するかをActive Supportに伝える
  config.active_support.disallowed_deprecation_warnings = []

  # PIDとタイムスタンプが抑制されないように、デフォルトのログフォーマッターを使用
  config.log_formatter = ::Logger::Formatter.new

  # 分散セットアップには別のロガーを使用。"syslog/logger"をrequireで読み込む。
  # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')

  if ENV["RAILS_LOG_TO_STDOUT"].present?
    logger           = ActiveSupport::Logger.new(STDOUT)
    logger.formatter = config.log_formatter
    config.logger    = ActiveSupport::TaggedLogging.new(logger)
  end

  # マイグレーション後にスキーマを削除しない
  config.active_record.dump_schema_after_migration = false

  # ミドルウェアを挿入して自動接続切り替えを実行します。
  # `database_selector`ハッシュは、DatabaseSelectorにオプションを渡すために使用されます
  # ミドルウェアの`delay`は、書き込み後の待機時間を決定するために使用されます
  # 後続の読み取りをプライマリに送信します。

  # `database_resolver`クラスは、ミドルウェアがどれを決定するために使用します
  # データベースは、時間遅延に基づいて使用するのに適しています。

  # `database_resolver_context`クラスは、ミドルウェアが設定するために使用します
  # プライマリへの最後の書き込みのタイムスタンプ。リゾルバーはコンテキストを使用します
  # クラスのタイムスタンプは、から読み取る前に待機する時間を決定します

  # デフォルトでは、Railsはセッションに最後の書き込みタイムスタンプを保存します。
  # DatabaseSelectorミドルウェアは、独自に定義できるように設計されています
  # 接続スイッチングの戦略とそれをミドルウェアに渡す構成オプション。
  # config.active_record.database_selector = { delay: 2.seconds }
  # config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
  # config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
end


参考リンク

configの設定内容はRailsの公式ページに記載があります。

設定ファイル(config) | Railsドキュメント
設定ファイルの設定項目について。assets.enabled/after_initialize/asset_host/autoload_once_paths/cache_classes/action_view.cache_template_...
Rails アプリケーションの設定項目 - Railsガイド
Railsアプリケーションの基本的な設定方法(Config:コンフィグ)について解説します。
タイトルとURLをコピーしました