
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: ActionController::Parameters.to_hにブロックを渡せるようになった(翻訳)
The post Rails 7.1: Rails.env.local?で環境がdevelpment/testかどうかをチェック(翻訳) first appeared on TechRacho.
概要
元サイトの許諾を得て翻訳・公開いたします。
参考: 週刊Railsウォッチ20230125:
Rails.env.local?
でdevelopmentとtestの環境変数をまとめて扱えるようになった参考: 週刊Railsウォッチ20230131:
Rails.env.local?
を最適化