Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 7.1: Rails.env.local?で環境がdevelpment/testかどうかをチェック(翻訳)

Rails 7.1: Rails.env.local?で環境がdevelpment/testかどうかをチェック(翻訳)

Rails 7.1で新メソッドRails.env.local?が導入されました(#46786)。このメソッドは、環境がdevelopmentまたはtestの場合にtrueを返します。development環境やtest環境でのみ実行したいコードがある場合に便利です。

🔗 改修前

Railsアプリケーションのdevelopment環境やtest環境でのみ動かしたいコードパスはいろいろあります。Railsにはdevelopment、test、staging、productionに加えて、マルチプルstaging環境やアプリケーションレビュー環境といったさまざまな環境がある場合もあります。

そのような場合、たとえば以下のようにコードで環境名をチェックする必要が生じます。

unless Rails.env.development? || Rails.env.test?
  # 外部APIを呼び出す
  ExternalAPI.call
end

または

if Rails.env.development? || Rails.env.test?
  # development/test環境用のテストデータを作成する
end

🔗 改修後

Rails.env.local?メソッドが導入されたおかげで、上のコードを以下のように書けます。

unless Rails.env.local?
  # 外部APIを呼び出す
  ExternalAPI.call
end

または

if Rails.env.local?
  # development/test環境用のテストデータを作成する
end

🔗 IRB/Railsコンソールのオートコンプリート無効化

Rails 7.1では、production環境のRailsコンソールでオートコンプリートをデフォルトで無効にする機能も導入されました(#46656)。

この機能は、大規模なRailsアプリケーションでオートコンプリートが遅くなる場合(特にコンソールにリモート接続している場合)に便利です。

従来のproduction環境では、Rails.env.production?チェックによってオートコンプリートが無効になっていました。

しかしこれでは、stagingなど他の環境では引き続きオートコンプリートが有効になり、動作が遅くなったり問題が生じたりすることになります。

#47818によって、development環境またはtest環境であるかどうかが新しいRails.env.local?メソッドでチェックされるようになり、それ以外の場合はデフォルトでオートコンプリートが無効になるように変更されました。

🔗 まとめ

Rails.env.local?Rails.env.development? || Rails.env.test?チェックのショートハンドであり、development環境やtest環境でのみ動かしたいコードがある場合に有用です。

訳注

Rails 7.1リリース後に以下のツイートを見つけました。

関連記事

Rails: PostgreSQLアダプタでenumのリネーム、enum値の追加とリネームが可能になった(翻訳)

Rails 7: ActionController::Parameters.to_hにブロックを渡せるようになった(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。