2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

🔍 Zeitwerkとは?Railsのオートローダーを「分かりやすく」解説

2
Posted at

🌟 ZeitwerkはRailsの振る舞いを支えるローダー

Zeitwerk (ツァイトヴェルク) は Rails 6 以降のデフォルトローダで、
名前空間とファイル構成をベースにclass/moduleをオートロードする機構 です🚀

これがあるからRailsは

  • require しなくても class/module を自動読み込む
  • MVCの分離がきれい
  • ファイル名やパスの要求が明確

などの魅力を持っています。


🔎 Zeitwerkがどんなことをしているの?

一言で言うと、Zeitwerkはファイル名からクラス名を判断してrequireしてくれるローダーです。

# app/models/user.rb
class User < ApplicationRecord
end

なら User を見たとき Rails は:

require "/path/to/app/models/user.rb"

を自動で行ってくれます📊


🏢 Zeitwerkに合わせたファイル名 / 配置ルール

Zeitwerk は「ファイル名ベースでclass/moduleを読む」という他のRubyフレームにはないルールを持ちます。

例:Userクラス

クラス名 ファイルパス
User app/models/user.rb
Admin::User app/models/admin/user.rb
Api::V1::BaseController app/controllers/api/v1/base_controller.rb

名前空間はパスで表現する必要があります!


🚨 関連トラブル:Zeitwerkの誤判「使われてる名前だよ!」

Rails の generator (例: rails g controller home index) で

The name 'HomeController' is either already used in your application or reserved by Ruby on Rails.

などと言われたら、それは Zeitwerk がクラス名の重複を誤判している可能性が高いです。

例:

  • 過去に同名のクラスを作って削除した
  • root "home#index" などが\uroutes.rb に書かれている
  • app/controllers/home/ みたいな名前空間がある

このような場合に、Zeitwerkは誤判して警告を出します。


🚀 Zeitwerkを上手に使うTips

  • 名前は CamelCase にする
  • ファイル名は snake_case にする
  • 配置は class/module の名前に合わせる
  • 名前空間を使うときは パス構成に注意

🤖 まとめ

テーマ 解説
Zeitwerk は名前空間ベースのオートローダー Rails6以降の機構
require が不要 自動読み込みスマート
名前による誤判もある routesや分割に注意

Railsのコードベースは思ってるより「名前」に依存しています。
Zeitwerkを理解すればRailsが「なぜここにこのファイルを組み込んでるのか」が理解できます💡

少しでもどなたかのお役に立てば幸いです☺️

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?