Gemfileで度々でてくるrequire: false
。ざっくり理解はしているけど、ちゃんと公式ドキュメントを読んでいなかったので、思い出しついでに読んでいく。
まずrequire: false
のそもそもの意味はBundler: gemfileに記載があって、
false to prevent any file from being autorequired.
つまり、自動でrequiredしないようにするには、require: false
と書くことになる。
Bundlerを使用していない場合、通常require
を各ファイルで各gemに対して書く必要があるが、Bundlerにはロードを行うパスの解決を行うBundler.setup
とそこで指定されたGemを自動的にrequireするBundler.require
という機能があり、これによりGemfile記載のgemは全て自動でrequireされる。
これを無効にするのがrequire: false
である(デフォルトがtrue)
どういう場面で使用するかというと、「依存関係は管理したいが、アプリでは使用しない」といったケースで使用する。
例えばRakeタスクで自動的にデータを取得するのに使用しているけれども、アプリで使うのはデータであって、そのgem自体は使用しない、みたいな場合にrequire: false
を指定してあげるといった例がある。
「Bundler.setup
とかBundler.require
とかあまり使ったことないんだけど…」となるものそのはずで、Railsの場合はフレームワーク側でそれが組み込まれているので普段は意識しない。
Bundker.setup
はconfig/boot.rb
に記載されている。
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require "bundler/setup" # Set up gems listed in the Gemfile.
Bundler.require
はconfig/application.rb
に記載されている。
require_relative "boot"
require "rails/all"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
...