Rails の自動読み込みを支える技術
Upcoming SlideShare
Loading in...5
×
 

Rails の自動読み込みを支える技術

on

  • 6,511 views

ActiveSupport::Dependencies のソースを読むので簡単に紹介しました。 ...

ActiveSupport::Dependencies のソースを読むので簡単に紹介しました。

文章で説明したバージョンはこちらに用意しました。

http://blog.eiel.info/blog/2013/09/07/autoload-rails/

Statistics

Views

Total Views
6,511
Views on SlideShare
1,287
Embed Views
5,224

Actions

Likes
3
Downloads
9
Comments
0

9 Embeds 5,224

http://blog.eiel.info 5172
http://localhost 24
https://twitter.com 8
http://webcache.googleusercontent.com 8
http://cloud.feedly.com 7
http://translate.googleusercontent.com 2
https://www.google.co.jp 1
https://www6.tjk.gr.jp 1
https://moneyforward.com&_=1400589155120 HTTP 1
More...

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Rails の自動読み込みを支える技術 Rails の自動読み込みを支える技術 Presentation Transcript

  • Rails の 自動読み込み を支える技術 2013-09-07 広島Ruby勉強会 #034 13年9月7日土曜日
  • Rails の読み込み規約 •Hoge -> hoge.rb •HogeMogu -> hoge_mogu.rb •Hoge::Mogu -> hoge/mogu.rb 13年9月7日土曜日
  • 名前の変換 •ActiveSupport::Inflector.underscore •Core Extention •String#underscore 13年9月7日土曜日
  • 関連モジュール •ActiveSupport::Dependencies •ActiveSupport::Autoload 13年9月7日土曜日
  • ActiveSupport::Dependencies 13年9月7日土曜日
  • 自動読み込み •Rails 用のコードはクラス名から自動読 み込みできる •RAILS_ROOT/app/models/... •RAILS_ROOT/app/helpers/... •... 13年9月7日土曜日
  • RAILS_ROOT/lib など自動は読み込みできない 13年9月7日土曜日
  • Rails を使わない場合 require 'active_support/dependencies.rb' ActiveSupport::Dependencies.autoload_paths << 'lib' 13年9月7日土曜日
  • lib から自動読み込みが できるようになります 13年9月7日土曜日
  • ライブラリなどでは使わない •自作ライブラリで規約に沿った読み込み は ActiveSupport::Autoload を使う •アプリケーションの記述をシンプルにす るために使う? 13年9月7日土曜日
  • Rails での初期値 • RAILS_ROOT/app/assets • RAILS_ROOT/app/controllers • RAILS_ROOT/app/helpers • RAILS_ROOT/app/mailers • RAILS_ROOT/app/models • RAILS_ROOT/app/controllers/concerns • RAILS_ROOT/app/models/concerns 13年9月7日土曜日
  • 仕組み •ConstMissing に処理を追加 •autoload_paths の中にあるか確認 •あれば読み込み •なければ ConstMissing 発生 13年9月7日土曜日
  • 動作をみたいなら •Logger を設定 •log_activity = true に設定 •Rails の場合は Logger は設定済み 13年9月7日土曜日
  • Logger を使う require 'active_support/dependencies.rb' require 'logger' ActiveSupport::Dependencies.logger = Logger.new($stderr) ActiveSupport::Dependencies.log_activity = true 13年9月7日土曜日
  • require するだけで使える • 読み込み時に呼んでるメソッドがある • ActiveSupport::Dependencies.hook! • 止めたい場合は • ActiveSupport::Dependencies.unhook! 13年9月7日土曜日
  • 知ってると便利かも 13年9月7日土曜日
  • ActiveSupport::Dependencies .warnings_on_first_load •はじめて読み込みしたクラス •ログに出力 •二度目は出力しない 13年9月7日土曜日
  • ActiveSupport::Dependencies .history •読み込みしたクラスが格納 •Set で格納 •順番はわからない 13年9月7日土曜日
  • ActiveSupport::Dependencies .loaded •読み込みしたクラスがわかる •History との違い •clear されることがある •これも Set 13年9月7日土曜日
  • ActiveSupport::Dependencies .mechanism •読み込みする時 に •load を使うか (デフォルト) •require を使うか •環境変数 NO_RELOAD を設定で •require に 13年9月7日土曜日
  • ActiveSupport::Dependencies .explicitly_unloadable_constants •自動読み込みの対象にしない名前を登録 13年9月7日土曜日
  • ActiveSupport::Autoload 13年9月7日土曜日
  • ライブラリで規約を利用 •Rails のコードではよく使われている •lib/active_support.rb •lib/active_record.rb 13年9月7日土曜日
  • autoload を拡張 •Kernel.autoload(module, filename) •Module.autoload(module, filename) •引数が2つ必要 13年9月7日土曜日
  • autoload を拡張 • ActiveSupport::Autoload • #autoload(const_name, path = @@at_path) • 第2引数が オプションに 13年9月7日土曜日
  • autoloadについて •あるクラスが必要になった時にはじめて ファイルを読み込みする •第1引数 あるクラスの名前 •第2引数 読み込みするファイル 13年9月7日土曜日
  • 第2引数は 規約から推測可能 13年9月7日土曜日
  • Kernelのほうはそのまま 13年9月7日土曜日
  • Module のほうだけ拡張 13年9月7日土曜日
  • 例 require 'active_support/dependencies/autoload' module Hoge extend ActiveSupport::Autoload autoload :Mogu end Hoge::Mogu # > LoadError: cannot load such file -- hoge/mogu 13年9月7日土曜日
  • eager_autoload と autoload! 13年9月7日土曜日
  • よくある光景 eager_autoload do autoload :Hoge autoload :Mogu end 13年9月7日土曜日
  • auto_load! •eager_autoload の中にかいておくと auto_load! でまとめて読み込みできる •利点がはっきりとわからないです •知ってたら教えて 13年9月7日土曜日
  • ご清聴ありがとうございます 13年9月7日土曜日