(2015年までの)odaillyjp blog

イベント参加記録とプログラミング系の雑記

パーフェクト Rails を読みました(4章)

この記事は『パーフェクト Rails を読みました』シリーズの4回目の記事です。
1回目の記事は『パーフェクト Rails を読みました(1章) - Programming log - Shindo200』です。
2回目の記事は『パーフェクト Rails を読みました(2章) - Programming log - Shindo200』です。
3回目の記事は『パーフェクト Rails を読みました(3章) - Programming log - Shindo200』です。

『パーフェクト Ruby on Rails』の4章を読み終えましたので、記録を残しておきます。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

4章の感想

4章では MVC に当てはまらない要素を管理することがあること、Rails のオートローディングの仕組み、active_decorator を使って decorator 層を作る方法、Sidekiq を使って非同期処理を実装する方法を学びます。実際に Rails アプリケーションを作っていると、MVC だけの構造では足りなくなってしまうことがあります。そんなときに役に立つテクニックがこの章に書かれています。(より深いことは9章で触れるそうです。)active_decorator はどの Rails アプリケーションにも使っていいのではないかと思いました。

備忘録

オートローディング

デフォルトでオートローディングするディレクトリは、以下のディレクトリです。

  • app/controllers
  • app/models
  • app/helpers
  • app/mailers
  • app/controllers/concerns(Rails 4 以降)
  • app/models/concerns(Rails 4 以降)

controllers と models の下にある concerns ディレクトリは ActiveSupport::Concern で使うモジュールを保存しておくためのディレクトリですね。オートローディングするディレクトリを追加したい場合は、config/application.rb に以下のように記述すればいいそうです。

class Application < Rails::Application
  # lib/autoload を追加する場合
  config.autoload_paths += %W(#{config.root}/lib/autoload)
end

active_decorator

モデルが持っているデータを表示するためのメソッドをモデル自身に定義してしまうのは、モデルの役割を超えてしまうのでやめたほうがいいです。だからといって、ヘルパーに定義すると、どこでも使えるメソッドになってしまうのでスマートではありません。では、どこに定義すればいいのでしょうか。そんなときはモデルでもビューでもヘルパーでもない新しいレイヤーを作って、そこに定義すればいいのです。active_decorator という gem を使うと、モデルが持っているデータを表示するためのメソッドを定義するレイヤーを作ることができます。ちなみに、このレイヤーを decorator 層と呼ぶそうです。

使い方は README.md の Examples を読むのが良さそうです。

Sidekiq

SidekiqRails で非同期処理を実装するための gem です。Sidekiq は Rails とは別プロセスで起動し、そのプロセスが Rails からメッセージを受け取り、ワーカークラスに引き渡して実行することで、非同期処理を実現しているそうです。

使い方は WikiRailsCast のガイドを読むのが良さそうです。

お疲れ様でした

次は5章「開発を効率化する gem」です。よろしくお願いします。