Railsのconfigurationを調べてみた(1)

9 min読了の目安(約8100字TECH技術記事

なに?

Railsのconfigurationはどんなものがあって、どういう挙動なのかを調べてみた。
調べたものはRailitiesに含まれるconfigだけで、ActionViewなどは別で調べる。

各項目の細かい挙動まで十分に調べきれてはいないが、よく設定する項目などは別途調べたい。

ばーじょん

  • Ruby ruby 2.7.2p137
  • Rails 6.1.2

いちらん

add_autoload_paths_to_load_path(boolean)

以下のautoload_pathを、$LOAD_PATHに含めるかをbooleanで指定する。
デフォルトは true

  • config.autoload_paths
  • config.eager_load_paths
  • config.autoload_once_paths

ちなみに、作成したRailsアプリケーションは、以下のディレクトリがデフォルトで$LOAD_PATHに設定される。

  • config.eager_load_paths
    • app/channels
    • app/controllers
    • app/controllers/concerns
    • app/helpers
    • app/jobs
    • app/mailers
    • app/models
    • app/models/concerns
  • config.paths.load_paths
    • lib
    • vendor

:zeitwerkモードでは、config/application.rbfalseにすべきとRails Guideに明記されている。

https://guides.rubyonrails.org/v6.1/configuring.html#rails-general-configuration

allow_concurrency(boolean/symbol)

  • nil (デフォルト)
    • InterlockHookミドルウェアを設定され、自動読み込みや再読み込みのみLockをかける
  • false
    • MutexHookRack::Lockミドルウェアを設定され、1つのスレッドでしか処理できなくなります
  • :unsafe
    • 何もしない
    • Do nothing, even if we know this is dangerous. This is the historical behavior for true.というコメントから分かるとおり、利用には十分な注意が必要

詳しくは、Rails Guideを参照。

https://guides.rubyonrails.org/v6.1/threading_and_code_execution.html

asset_host(string)

assetsを配信するhostを設定する。
デフォルトは 未設定 で、相対パスとなる。

CDNなど別のhostから配信する場合は、'cdn.provider.com'のように設定する。

autoflush_log(boolean)

logを自動で書き込むかをbooleanで指定する。
※デフォルトは true

自動で書き込まない場合は、loggerのバッファに格納され続けて、flushを呼び出したときに出力される。

Rails.logger.info('hoge') # ここでは書き込まれない
Rails.logger.info('fuga') # ここでは書き込まれない
Rails.logger.flush        # ここで、hogeとfugaが書き込まれる

beginning_of_week(symbol)

週のはじめの曜日を指定する。
※デフォルトは :monday

ActiveSupport::TimeWithZone#next_weekなどで利用される。

time = Time.current # => Thu, 11 Feb 2021 23:42:48.806187116 UTC +00:00
time.next_week      # => Mon, 15 Feb 2021 00:00:00.000000000 UTC +00:00

cache_classes(boolean)

Railsアプリケーションのクラスをキャッシュするかどうかをbooleanで指定する。
通常は、productionではtrue、それ以外ではfalseにする。

cache_store(symbol)

キャッシュストアの方法を指定する。
デフォルトは:file_storeで、#{Rails.root}/tmp/cache/に保存される。

Rails標準のStoreは、Rails Guideにも記載されている。

https://guides.rubyonrails.org/v6.1/caching_with_rails.html#cache-stores

consider_all_requests_local(boolean)

例外発生時に、例外の詳細を表示するかをbooleanで指定する。
通常は、productionではfalse、それ以外ではtrueにする。

なお、trueのとき、よくある↓の画面が表示される。

console(class)

rails consoleを実行したときのクラスを指定する。
デフォルトではIRBが指定されている。

Pryなどが有名。

https://github.com/pry/pry

content_security_policy_nonce_generator(Proc)

Content Security Policy用のnonceを生成するための設定する。
デフォルトはnil

テンプレートではconfig.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }と出力される。

content_security_policy_nonce_directives(array<string>)

Content Security Policy用のnonceを付与するディレクティブを指定する。
デフォルトはnil

テンプレートではconfig.content_security_policy_nonce_directives = %w(script-src)と出力される。

content_security_policy_report_only(boolean)

Content Security Policyに違反していたとき、リクエストをブロックするのではなく、レポートだけに留めるかどうかをbooleanで指定する。
デフォルトはfalse

credentials(class)

credentialsの設定を格納するクラスを指定する。
デフォルトはActiveSupport::OrderedOptions.new

このクラスのcontent_pathcredentials.yml.encが, key_pathmaster.keyが設定されることになる。

詳しくは、Rails Guideを参照。

https://guides.rubyonrails.org/v6.1/security.html

disable_sandbox(boolean)

sandboxでの起動を制限するかをbooleanで指定する。
デフォルトはfalse

rails c --sandboxのように、sandboxモードで起動できるのだが、本プロパティをfalseにしていると、起動できないようになる。

eager_load

config.cache_classesとほぼ同じ役割。
デフォルトはnilで、nilの場合はconfig.cache_classesの値がセットされる。

enable_dependency_loading(boolean)

config.cache_classes == trueの場合でも、オートロードさせたいかどうかをbooleanで指定する。
デフォルトはfalse

exceptions_app(class)

config.consider_all_requests_local == trueのときに、エラーを表示するためのクラスを指定する。
デフォルトはnilで、ActionDispatch::PublicExceptionsが設定される。

file_watcher(class)

config.reload_classes_only_on_change == trueの場合に、ファイル更新検知をするクラスを指定する。
デフォルトはActiveSupport::FileUpdateChecker

filter_parameters(array<string>)

ログに出力したくないパラメータのkeyを指定する。
デフォルトは[]

テンプレートで、以下のようなファイルがgenerateされる。

# config/initializers/filter_parameter_logging.rb
# Be sure to restart your server when you modify this file.

# Configure sensitive parameters which will be filtered from the log file.
Rails.application.config.filter_parameters += [
  :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]

filter_redirect(array)

ログに出力したくないリダイレクト先を指定する。
デフォルトは[]

文字列だけでなく、正規表現も指定が可能。

force_ssl(boolean)

httpでの接続を禁止するかどうかをbooleanで指定する。

httpでアクセスしようとすると、以下のようになる。

helpers_paths(array<string>)

helpersを配置しているディレクトリのパスを指定する。
デフォルトは[]で、app/helpersが設定される。

hosts(array<string>)

アプリケーションを実行するサーバのhostを指定する。
デフォルトは[]だが、developmentでは".localhost", IPAddr.new("0.0.0.0/0"), IPAddr.new("::/0")が設定される。

[]の場合はActionDispatch::HostAuthorizationのチェックがスキップされるが、設定がずれていると、以下のようなエラーが発生する。

host_authorization(Hash)

ActionDispatch::HostAuthorizationのオプションを指定する。
デフォルトは{}

指定できるのは以下の2つ。

logger(object)

Rails.loggerで利用するロガーを指定する。
デフォルトはActiveSupport::LoggerをベースにActiveSupport::TaggedLoggingが設定される。
ActiveSupport::TaggedLoggingは、logger.formatterを拡張するだけのwrapper class

ログファイルではなく、標準出力に出力する場合は、以下のように設定する。

logger = ActiveSupport::Logger.new(STDOUT)

log_formatter(object)

ロガーのフォーマッターを指定する。
デフォルトはActiveSupport::Logger::SimpleFormatter.new

log_level(symbol)

ログファイルに出力するレベルを指定する。
デフォルトは:debugで、デバッグレベル以上のログが出力される。

ログのレベルは以下の通り

  • debug(0)
  • info(1)
  • warn(2)
  • error(3)
  • fatal(4)
  • unknown(5)

log_tags(array<Proc, symbol, object>)

タグ付けに対応したロガーの場合に、デフォルトで付けるタグを指定する。
デフォルトは[]

production用のテンプレートでは、以下のように設定される。

config.log_tags = [ :request_id ]

example

config.log_tags = [ :request_id, 'HOGE' ]

# [88e2dd56-08ce-4e38-a4ab-6bc571a765dc] [HOGE] Started GET "/" for 127.0.0.1 at 2021-02-13 09:16:49 +0900

public_file_server

public_file_serverの設定を格納するクラスを指定する。
デフォルトはActiveSupport::OrderedOptions.new

public配下のファイルをRailsアプリケーションでの配信に関する設定で、NGINXなどで配信する場合はconfig.public_file_server.enabled = falseにする。
Railsアプリケーションで配信する場合はconfig.public_file_server.headersCache-Controlなどのヘッダーの設定を行うことができる。

railties_order(array<symbol, class>)

Railtiesの読み込み順序を指定する。
デフォルトは[:all]

rake_eager_load(boolean)

Rake実行時にRailsアプリケーションをeager loadするかをbooleanで指定する。
デフォルトはfalse

read_encrypted_secrets(boolean)

config/secrets/*.encファイルを読み込むかをbooleanで指定する。
デフォルトはfalse

relative_url_root(string)

Railsアプリケーションをサブディレクトリにデプロイする場合に、/からの相対パスを指定する。
デフォルトはENV["RAILS_RELATIVE_URL_ROOT"]

詳しくは、Rails Guideを参照。

https://guides.rubyonrails.org/v6.1/configuring.html#deploy-to-a-subdirectory-relative-url-root

reload_classes_only_on_change(boolean)

config.cache_classes == falseの場合に、変更があったクラスのみ再読込するかをbooleanで指定する。
デフォルトはtrue

変更があったかどうかはconfig.file_watcherを通して検知する。

require_master_key(boolean)

master_key(ENV["RAILS_MASTER_KEY"] or config/master.key)を必須とするかをbooleanで指定する。
デフォルトはfalse

secret_key_base(string)

秘密鍵。
デフォルトはnil

development, testモードでは、指定されていなければ、自動的に発行される。
それ以外のモードでは、設定されているかをチェックし、なければエラー終了する。

なお、秘密鍵はconfig以外にも以下の設定方法がある。

  • ENV["SECRET_KEY_BASE"]
  • credentials.secret_key_base
    • config.credentialsで読み込まれたプロパティ

ssl_options(Hash)

SSLオプションを指定する。
デフォルトは{}

session_options(Hash)

セッション管理のためのオプションを指定する。
デフォルトは{}だが、config.session_storeをオプション付きで指定した場合は、オプションが本プロパティに設定される。

time_zone(string)

タイムゾーンを指定する。
デフォルトはUTC

x

何も使われてはいなさそう。