IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Ruby on Rails 海外事情コラム

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第10回 Rails5 改善されるdevelopmentモード (野田貴子) 2016年3月

Ruby on Railsの公式ブログ記事『Snappier Development Mode in Rails 5(http://weblog.rubyonrails.org/2015/11/11/snappier-development-mode-in-rails-5/)』にて、Rails 5で改善されるdevelopmentモードについて紹介されていました。

この改善には、先日行われたGoogle Summer of Codeでのプロジェクトが貢献したようです。このような事例を見ると、オープンソースであるRuby on Railsの利点を感じることができますね。

以下に日本語訳を載せます。

---

『Rails5 改善されるdevelopmentモード』

Rails5のdevelopmentモードは、大きなコードベースにとって少し改善される予定です。

ご存知の通りdevelopmentモード(注2)では、リクエストが入ってきたとき何か変更されていれば、Railsはアプリケーションをリロード(注1)します。この実装方法は長年にわたって進化してきました。

長い間、Railsはすべてのリクエストにおいて単純に無条件でリロードしていました。

Rails 3.2ではリクエスト毎にアプリケーションツリーを探索し、mtime(変更日)をチェックするモニター機能が実装され、改善されました。

ツリー探索はページビューごとではなく、リクエストごとに行われました。とりわけ、各アセットの提供ごとに発生したので、アプリケーションツリーを一度歩く ことは大きな問題ではないとはいえ、アセット数やコードベースの大きさによってはどんどん負荷が大きくなることがありました。

Rails5はファイルシステムのイベントモニターを備えてリリースされる予定です。何かが変化すると、オペレーティングシステムがRailsを非同期に呼び出し、フラグが切り替えられます。そしてリクエストが入ってくると、そのフラグがチェックされます。

このモニターはデフォルトでは無効になっているため、Gemfileでlisten gemをロードして使用します。

group :development do
gem "listen", "~> 3.0.4"
end

LinuxやMac OS Xでは依存するものは他にありませんが、BSDやWindowsには必要になります。未サポートの組み合わせもあります。

このモニターを有効化していても、コンソールでは手動リロードが必要です。すでにインスタンス化したオブジェクトのクラスの変更は不整合を起こします。そのため明示的なリロードを行います。

この機能の最初のパッチを今年のGoogle Summer of Codeの一部として書いてくれたPuneet Agarwalに感謝します。

また、listenの作者やメンテナンス者にも敬意を。これは可搬的な方法で限りなく簡単に実行できました。

(注1)リロードの技術的な定義についてはAutoloading and Reloading Constants ガイド (http://guides.rubyonrails.org/autoloading_and_reloading_constants.html)をご覧ください。

(注2)config.cache_classesがfalseであるときリロードします。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes