Edited at

Rails でユーティリティ処理を書く

More than 3 years have passed since last update.


補足記事

Rails 4 が出たこともあり2016年版の記事を書きました。合わせてご参考下さい。


概要

Rails でユーティリティ処理を書く場合に気をつけるポイント等。


配置

おおむね #{config.root}/lib/ 配下に配置するパターンが多いように思う。


directories

lib/

assets/
tasks/
utils/ # <= here

以下を記述しておくと、lib/ 配下のディレクトリとファイルを autoload してくれるので楽。


config/application.rb

...

module YourAwesomeApp
class Application < Rails::Application
...
# Add this
config.autoload_paths += Dir["#{config.root}/lib/**/*"]
...
end
end


記述

class か module かは用途に応じて変わるので一概には決められないが、振る舞い中心でも構わないのであれば module で書いてもよいと思う。


lib/utils/common_util.rb

module CommonUtil

def self.today
DateTime.now.strftime("%Y-%m-%d")
end
end


注意点

class でも module でもクラス名・モジュール名がファイル名と一致していないと autoload に失敗する。


directories

lib/

assets/
tasks/
utils/
datetime_util.rb # <= here


lib/utils/datetime_util.rb

module CommonUtil # <= different module name

def self.today
DateTime.now.strftime("%Y-%m-%d")
end
end

このような場合、以下のようなエラーとなる。


error

uninitialized constant ActionView::CompiledTemplates::CommonUtil


上記のようなエラーが出る場合はユーティリティのファイル名がクラス名・モジュール名と一致しているかどうか確認する。