🦎

Zeitwerk を単体で使う方法

2022/11/15に公開

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 なしで読み込めているのがわかる。

https://github.com/fxn/zeitwerk

Discussion