Step by Step Ruby on Rails

Ruby on Railsで実際にWebサイトを構築する手順をまとめています。

Rails4のキャッシュの概要

Rails4のキャッシュ機能の概要をまとめました。
 
(1)全体の概要
 
・Railsは、オブジェクトから、ページ、パーシャルまでほとんどのものをキャッシュ出来る。
 
・Railsが提供する主なキャッシングテクニックは以下の3つ。
ページキャッシング、アクションキャッシング、フラグメントキャッシング
 
デフォルトはfragmentキャッシュで、page、actionキャッシュを使用する場合は、下記Gemを追加する必要がある。
actionpack-page_caching
actionpack-action_caching
 
・環境ファイルでキャッシュを有効にする。
production環境ではデフォルトで有効になっているが、開発、テスト環境では有効になっていない。下記設定で有効にする。
$ vi config/environments/development.rb
config.action_controller.perform_caching = true
 
(2)ページキャッシングの概要
 
・ページキャッシュは、生成されたページのリクエストをApacheやnginxなどのWebサーバーによって処理するRailsの機能の一つ。Railsを全く介さないのでとても速い。
 ただし、認証を必要とするページなどには利用できない。
 
・Webサーバーはファイルシステム上のファイルを提供しているのでキャッシュの有効期限を処理する必要があるという問題がある。
 
・ページキャッシングはRail4からRails本体から除去された。別途actionpack-page_caching gemを導入する必要がある。
https://github.com/rails/actionpack-page_caching
 
※キーに基づいたキャッシュ有効期限については下記参照。
https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works
 
(3)アクションキャッシングの概要
 
・ページキャッシングは認証などbefore filterを定義しているアクションでは使用できない。このような場合にアクションキャッシュが有用。
 
・アクションキャッシングはRailsの機能を使用するようなリクエストに対しても動作するのでbefore filterが定義されていても利用できる。
 
・認証やその他の制約が実行されてもキャッシュされたコピーを出力結果として供給することが出来る。
 
・アクションキャッシングはRail4からRails本体から除去された。別途actionpack-action_caching gemを導入する必要がある。
https://github.com/rails/actionpack-action_caching
 
※キーに基づいたキャッシュ有効期限については下記参照。
https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works
 
(4)フラグメントキャッシング
 
・一つのページまたは一つのアクションでコンテンツ全体をキャッシュできれば話は簡単だが、動的Webアプリケーションでは、それぞれキャッシュの仕組みが異なる様々なコンポーネントを組み合わせてページを構成しているので、それだけでは対応が難しい。
 
・上記のような動的ページのそれぞれのコンポーネントに対してキャッシュしたり有効期限を管理する仕組みとしてフラグメントキャッシングを提供している。
 
・フラグメントキャッシングでは、ビューロジックのある部分単位にキャッシュしたり、取り出したりする事が出来る。
 
(5)キャッシュストアの設定
 
・アクション、フラグメントキャッシュによって生成されたキャッシュデータのストアは様々な方法で設定できる。
 
・ページキャッシュはディスク上にのみ保存される。
 
1)設定方法
 
①設定するファイル
 
・config/application.rb
・環境固有の設定ファイル(config/environments/*.rb)内のApplication.configureブロック内。
※configurationブロック外でActionController::Base.cache_storeを呼び出す事も出来る。
 
②設定方法
 
・メモリストアの場合
config.cache_store = :memory_store, { size: 64.megabytes }
 
・ファイルストアの場合
config.cache_store = :file_store, "/home/user/rails_projects/sample_app/public"
 
・最初の引数がどのキャッシュストアを使用するか指定し、残りの引数はキャッシュストアのコンストラクタの引数として渡される。
 
・明示的に設定していない場合のキャッシュストアはファイルストアで、
tmp/cache/ディレクトリ内にキーの名前でキャッシュファイルが作成される。
 
2)キャッシュへのアクセス
 
Rails.cacheをコールすることによってキャッシュにアクセスできる。