🦎
Zeitwerk を単体で使う方法
Rails でのみ重宝されている感がある Zeitwerk を普段使いしたいので方法を調べたら記事にするのをためらうほど簡単だった。
require "pathname"
Pathname("xxx/foo/bar").mkpath
Pathname("xxx/foo.rb").write("module Foo; end")
Pathname("xxx/foo/bar.rb").write("class Foo::Bar; end")
Pathname("xxx/foo/bar/baz.rb").write("class Foo::Bar::Baz; end")
puts `eza -Tr xxx`
# > xxx
# > ├── foo.rb
# > └── foo
# > ├── bar.rb
# > └── bar
# > └── baz.rb
として、次のようにすると、
require "zeitwerk"
loader = Zeitwerk::Loader.new
loader.push_dir("xxx")
loader.setup
Foo::Bar::Baz # => Foo::Bar::Baz
require なしで読み込めているのがわかる。
Discussion