Gemfileにある`require: false`ってなんでしたっけ?

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.setupconfig/boot.rbに記載されている。

ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)

require "bundler/setup" # Set up gems listed in the Gemfile.

Bundler.requireconfig/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)
...

Buy Me A Coffeeikuma-tにお恵みを!