読者です 読者をやめる 読者になる 読者になる

Rubyで指定ディレクトリ以下のファイルを全てrequireする方法

プログラムを書いていて、指定ディレクトリ以下のファイルをまとめてrequireするのに、うまい書き方ないかなーと思っていたのですが、pryのソースコード中にお手本になりそうな部分があったので、紹介します。

こんな感じのディレクトリ構成です。
とあるディレクトリに、commands.rbとcommandsというディレクトリがあります。commandsの中にはいくつかのrubyのファイルが入っています。

├── commands.rb
├── commands
    ├── amend_line.rb
    ├── bang.rb
    ├── bang_pry.rb

commands.rbでcommandsディレクトリ内のファイルを全てrequireするようになっています。
これを実現するために、commands内の全てのファイルをrequireしてもよいのですが、それだとファイルを追加する度に追記しないといけなくなってしまうので、pryでは次のように実装されていました。

Dir[File.expand_path('../commands', __FILE__) << '/*.rb'].each do |file|
  require file
end

すっきりしていていいですね。
自分も同じような場面に遭遇した時に、真似してみようと思います。