Rubyでファイル名と同名のフォルダを用意するのはどういう意図があるのでしょうか？


<https://github.com/rails/rails/tree/7-1-stable/railties/lib>

たとえば上記では「rails.rb というファイル」と「rails というフォルダ」があります。

また  
<https://github.com/rails/rails/tree/7-1-stable/actionpack/lib>  
では、

  * abstract_controller.rb
  * action_controller.rb
  * action_dispatch.rb
  * action_pack.rb

というファイルとそれに対応するフォルダが用意されています。

どういった意図があるのでしょうか？  
もしくは単にRails自体のなにかの慣習でしょうか？

[![画像の説明をここに入力](https://i.stack.imgur.com/yotatm.png)](https://i.stack.imgur.com/yotatm.png)

* * *

[![画像の説明をここに入力](https://i.stack.imgur.com/xjEZ4m.png)](https://i.stack.imgur.com/xjEZ4m.png)




ファイルの中で定義されているクラスやモジュールの名前とそのファイル名を合わせるという慣習があり、Ruby のプロジェクトで採用されていることがあります。また
Rails では自動ロードの仕組みと掛け合わせることで必須の慣習になっています。

たとえば hora.rb で `Hora` モジュールを定義して、hora/translator.rb で `Hora::Translator`
クラスを定義するといった次第です。

Rails では、定数、特にクラスやモジュールを読み込む際にディレクトリ名やファイル名を参照します。このため Rails
のプロジェクトでは必ず定数名とファイル名を意識します。参考:
<https://railsguides.jp/autoloading_and_reloading_constants.html>

Rails とは関係がない Ruby のプロジェクトでも似たようなディレクトリ構成がとられることがあります。RubyGems のドキュメントには
<https://guides.rubygems.org/patterns/#consistent-naming> や
<https://guides.rubygems.org/make-your-own-gem/#requiring-more-files>
のあたりで類似のルールが説明されています。また、rubocop にもこの慣習をチェックするためのルールとして
[Naming/FileName](https://docs.rubocop.org/rubocop/cops_naming.html#namingfilename)
の ExpectMatchingDefinition が存在します。




ファイルの中で定義されているクラスやモジュールの名前とそのファイル名を合わせるという慣習があり、Ruby のプロジェクトで採用されていることがあります。また
Rails では自動ロードの仕組みと掛け合わせることで必須の慣習になっています。

たとえば hora.rb で `Hora` モジュールを定義して、hora/translator.rb で `Hora::Translator`
クラスを定義するといった次第です。

Rails では、定数、特にクラスやモジュールを読み込む際にディレクトリ名やファイル名を参照します。このため Rails
のプロジェクトでは必ず定数名とファイル名を意識します。参考:
<https://railsguides.jp/autoloading_and_reloading_constants.html>

Rails とは関係がない Ruby のプロジェクトでも似たようなディレクトリ構成がとられることがあります。RubyGems のドキュメントには
<https://guides.rubygems.org/patterns/#consistent-naming> や
<https://guides.rubygems.org/make-your-own-gem/#requiring-more-files>
のあたりで類似のルールが説明されています。また、rubocop にもこの慣習をチェックするためのルールとして
[Naming/FileName](https://docs.rubocop.org/rubocop/cops_naming.html#namingfilename)
の ExpectMatchingDefinition が存在します。

