【Rails】ENV[]とENV.fetch() {}の違い【Ruby】


はじめに

 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

ENV[]ENV.fetch() {}の違い

ENV[]ENV.fetch() {}の違いは指定した環境変数が存在しない場合にnilを返すかデフォルト値を返すかの違いです。

例えば、以下の場合には、RAILS_MAX_THREADSDB_USER_NAMEDB_USER_PASSWORDが存在しない場合にはnilとなります。

detabase.yml

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV["RAILS_MAX_THREADS"] %>
  username: <%= ENV["DB_USER_NAME"] %>
  password: <%= ENV["DB_USER_PASSWORD"] %>
  host: db

以下のように記述するとRAILS_MAX_THREADSDB_USER_NAMEDB_USER_PASSWORDが存在しない場合には{}内に記述したデフォルト値となります。

detabase.yml

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch("DB_USER_NAME") { root } %>
  password: <%= ENV.fetch("DB_USER_PASSWORD") { rootpass } %>
  host: db