|
|
|
|
¤³¤ì¤Ï¡¢¤«¤Ä¤Æ Ruby ¤¬¤Þ¤À¿ÀÏäÀ¤Ã¤¿»þÂ塢ŷ»Èã¤Î´Ö¤Çή¹Ô¤Ã¤¿²Î(Å·¾å³¦¥ª¥ê¥³¥ó13°Ì)¤Ç¤¢¤ë¡£
¡Öautoload¡×¤È¸À¤¦¥³¥È¥Ð¤Ë¡¢¤Ê¤ó¤«¤¢¤³¤¬¤ì¤Æ¤¿¡¼¡£ ¼ÂºÝ²¿¤ò¤¹¤ë¤Î¤«¡¢¤¤¤Þ¤À¤Ë¤ï¤«¤ó¤Ê¤¤¡¦¡¦¡¦(¥è¥í¥·¥¯)¡£ ưŪ¸Æ½Ð¤µ¤ì¤Æ¤¦¤ì¤·¤¯»×¤¤(¥è¥í¥·¥¯)¡£ module ÈóÂбþ¤ÇÎÞ¤¬½Ð¤¿¤ê¡£Ë»¤·¤¤¤Ê¡£
LoadingModule ¤ÏưŪ¤Ê¥¯¥é¥¹»²¾È¤òÄ󶡤¹¤ëµ¡Ç½¤Ç¤¹¡£Ä̾Rails ¤ò»È¤Ã¤Æ¤¤¤ë¤È°Õ¼±¤·¤Ê¤¤¤Þ¤Þ¤½¤Î²¸·Ã¤ò¼õ¤±¤Æ¤¤¤Þ¤¹¤¬¡¢¥â¥Ç¥ë¤ä¥Ó¥å¡¼¤Î¥¯¥é¥¹ÄêµÁ¥Õ¥¡¥¤¥ë¤Ê¤É¤¬²¿¤Î½àÈ÷¤â¤Ê¤·¤Ë¼«Æ°Åª¤Ë»²¾È¤µ¤ì¤ë¤Î¤Ï¤³¤Îµ¡Ç½¤Î¤ª±¢¤Ç¤¹¡£Æ±Íͤε¡Ç½¤Ç¤¢¤ë Ruby ÁȤ߹þ¤ß¤Î autoload ¤è¤ê¤â°Ê²¼¤ÎÅÀ¤ÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£
¥¯¥é¥¹¤ò¼«ºî¤¹¤ë¾ì¹ç¡¢ÈÆÍÑÀ¤ò°Õ¼±¤¹¤ë¤È¾¥â¥¸¥å¡¼¥ë¤È¤Î̾Á°¾×ÆÍ¤Î´í¸±À¤«¤é¥Í¡¼¥à¥¹¥Ú¡¼¥¹Åª¤Ë¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢Å·»È¤Ê¤é¤º¤È¤â autoload ¤¬¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤ËÂбþ¤·¤Æ¤¤¤Ê¤¯¤ÆÈᤷ¤¤ÁÛ¤¤¤ò¤·¤¿¿Í¤Ï¿¤¤¤Ç¤·¤ç¤¦¡£¤½¤³¤Ç¿Í´Öã¤Ï¹Í¤¨¤Þ¤·¤¿¡£¥â¥¸¥å¡¼¥ëÁ´ÂΤòÆÉ¤ß¹þ¤à¤¿¤á¤Î¥Õ¥¡¥¤¥ë¤òÍѰդ·¡¢¤½¤Î¥Í¡¼¥à¥¹¥Ú¡¼¥¹Åª¤Ê¥â¥¸¥å¡¼¥ë̾¤À¤±¤ò autoload ¤Î¥È¥ê¥¬¤ËÀßÄꤷ¤Æ¤½¤Î¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¤Î¤Ç¤¹¡£°ìÈÌŪ¤Ë¤Ï¡¢¤³¤¦¤¤¤¦¾ì¹ç
(¥â¥¸¥å¡¼¥ë̾).rb
(¥â¥¸¥å¡¼¥ë̾)/(¥¯¥é¥¹£±).rb # (¥â¥¸¥å¡¼¥ë)::(¥¯¥é¥¹£±)¤òÄêµÁ¤·¤¿¥Õ¥¡¥¤¥ë
/(¥¯¥é¥¹£²).rb
/...
¤È¤¤¤¦¤è¤¦¤Ë¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤È¥Ç¥£¥ì¥¯¥È¥ê³¬ÁؤòÂбþ¤µ¤»¤¿¹½Â¤¤ÇÇÛÃÖ¤·¤Þ¤¹¡£¤³¤Î·Á¼°¤ò¡ÖRuby¥¹¥¿¥¤¥ë¤Ê¥â¥¸¥å¡¼¥ë¡×¤È¸Æ¤Ó¤Þ¤¹¡£(¾¯¤Ê¤¯¤È¤â¤³¤³¤Ç¤Ï)¡£LoadingModule ¤Ï¤³¤¦¤¤¤Ã¤¿¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤Þ¤ÇÂбþ¤·¤¿Æ°Åª¤Ê¸Æ¤Ó½Ð¤·¤ò¼Â¸½¤·¤Ä¤Ä¤â¡¢¤½¤ì¤é¤òÍøÍѤ¹¤ë¤¿¤á¤ÎÀë¸À¤âɬÍפʤ¤¡¢¤È¤¤¤¦ÂçÊÑÊØÍø¤Ê¤â¤Î¤Ç¤¹¡£¤½¤Î¥á¥«¥Ë¥º¥à¤òÃΤé¤Ê¤¯¤Æ¤â»È¤¨¤ë¤Î¤Ç¤¹¤¬¡¢¥â¥¸¥å¡¼¥ë̾¤Î¥Ð¥Ã¥Æ¥£¥ó¥°¤äưŪ»²¾È¤ËÌäÂ꤬ȯÀ¸¤¹¤ë¤È¸¶°øµæÌÀ¤Ë»×¤ï¤Ì»þ´Ö¤òÈñ¤ä¤¹¤³¤È¤¬¤¢¤ê¤Þ¤¹¤·¡¢²¿¤è¤ê Rails °Ê³°¤ÇÍøÍѤ¹¤ë¾ì¹ç¤Î¤¿¤á¤Ë¤â¡¢¤½¤Îµóư¤òÇİ®¤·¤Æ¤ª¤¤Þ¤·¤ç¤¦¡£
Ruby ¤Î¥í¡¼¥É¥Ñ¥¹($:)¤ËÆþ¤Ã¤Æ¤¤¤ë¤â¤Î¤Ï¼«Æ°Åª¤ËÆÉ¤ß½Ð¤·¤ÎÂоݤˤʤê¤Þ¤¹¤Î¤Ç¡¢active_support ¤ò require ¤¹¤ë¤À¤±¤ÇưŪ¸Æ¤Ó½Ð¤·¤Î²¸·Ã¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£¤Þ¤¿¡¢Ruby¥¹¥¿¥¤¥ë¤Î¥â¥¸¥å¡¼¥ë¤òưŪ¤Ë¸Æ¤Ó½Ð¤¹¾ì¹ç¤Ï¡¢LoadingModule.root ¥á¥½¥Ã¥É¤Ç¤½¤Î¥Ñ¥¹¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
Controlloers = LoadingModule.root(*load_paths)
°ú¿ô¤Ç¥Ñ¥¹(Ê£¿ô²Ä)¤òÅϤ·¤Æ¡¢Ìá¤êÃÍ(RootLoadingModule¤Î¥¤¥ó¥¹¥¿¥ó¥¹)¤ò Controllers ¤È¤¤¤¦Äê¿ô¤ËÆþ¤ì¤Þ¤¹¡£(Äê¿ô̾¤â¸ÇÄê¤Ê¤éÃæ¤Ç¾¡¼ê¤Ë¤ä¤Ã¤Æ¤¯¤ì¤ì¤Ð¤¤¤¤¤Î¤Ë)¡£¶ñÂÎŪ¤Ë¤Ï¡¢Rails ¤Ç¤Ï config/environment.rb ¤Ë°Ê²¼¤Î¤è¤¦¤Êµ½Ò¤¬¤¢¤ê¤Þ¤¹¡£
Controllers = Dependencies::LoadingModule.root( File.join(RAILS_ROOT, 'app', 'controllers'), File.join(RAILS_ROOT, 'components') )
¤³¤ì¤Ë¤è¤ê¡¢app/controllers/ ¤È components/ °Ê²¼¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï¡¢Ruby¥¹¥¿¥¤¥ë¤Ê¥â¥¸¥å¡¼¥ë¤È¤·¤Æ¤âưŪ¤Ë¸Æ¤Ó½Ð¤¹¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£´ÉÍý¾å¡¢¥¯¥é¥¹Ì¾¤Î¥È¥Ã¥×¥ì¥Ù¥ë¤Ë Controllers ¤È¤¤¤¦¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤¬¤Ä¤¤Þ¤¹¤¬µ¤¤Ë¤·¤Ê¤¯¤ÆÂç¾æÉפǤ¹¡£¤³¤Î environment.rb ¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥¡¥¤¥ë¤«¤é¡¢lib ¤Ë¤ÏÄ̾ï¥â¥¸¥å¡¼¥ë(¥é¥¤¥Ö¥é¥ê)¡¢components ¤Ë¤Ï Ruby¥¹¥¿¥¤¥ë¤Ê¥â¥¸¥å¡¼¥ë¤òÃÖ¤¯¡¢¤È¤¤¤¦ÍøÍÑË¡¤¬ Rails ¤Ç´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬ÆÉ¤ß¼è¤ì¤Þ¤¹¡£
Â绨ÇĤ˸À¤¦¤È¡¢°Ê²¼¤Îή¤ì¤ÇưŪ¤Ê¥¯¥é¥¹(Äê¿ô)¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
¤Þ¤º¡¢const_missing ¤¬»²¾È¤Î¥È¥ê¥¬¤Ë¤Ê¤ê¤Þ¤¹¡£¼¡¤Ë Rails ¥æ¡¼¥¶¤Ë¤Ï¤ªÆëÀ÷¤ß¤Î¥Õ¥¡¥¤¥ë̾ÊÑ´¹¤¬Æþ¤ê¤Þ¤¹¡£¤³¤ì¤ÏÂç¶Ú¤Ç¥¯¥é¥¹Ì¾(Äê¿ô̾)¤ÎÀèÆ¬°Ê³°¤ÎÂçʸ»ú¤ÎÁ°¤Ë'_'¤òÄɲä·¤ÆÁ´Éô¾®Ê¸»ú¤Ë¤¹¤ëÊÑ´¹¤Ç¤¹¡£(Ϣ³¤¹¤ëÂçʸ»ú¤È¤«¤¬°ã¤¦¤±¤É¾Êά)¡£LoadingModule ¤¬ÍøÍѤµ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤Þ¤Ç¹Í褵¤ì¤Þ¤¹¡£
Inflector.underscore('AccessLog')
=> "access_log"
Inflector.underscore('HelloProject::Units::BerryzKobo')
=> "hello_project/units/berryz_kobo"
Î㤨¤Ð¡¢lib/*.rb ¤Ë¥é¥¤¥Ö¥é¥ê¡¢modules/* ¤ËŬÅö¤Ê¥â¥¸¥å¡¼¥ë¤¬¤¢¤ë¾ì¹ç¡£
# lib/db_adapter.rb:
module DBAdapter
def load
# modules/hello_project/units/berryz_kobo.rb:
module HelloProject
module Units
class BerryzKobo
include HelloProject::DBAdapter
# include DBAdapter ¤À¤È lib/db_adapter.rb ¤¬»²¾È¤µ¤ì¤Æ¤·¤Þ¤¦
# modules/hello_project/db_adapter.rb:
module HelloProject
module DBAdapter
def load
¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ç¤¹¡£
# test.rb:
#!/usr/bin/ruby
require 'active_support' # ưŪ¸Æ¤Ó½Ð¤·¤ÎÀßÄê
$: .unshift 'lib' # lib/*.rb ¤ÏÄ̾ï¤ÎưŪ¸Æ¤Ó½Ð¤·
Controllers = Dependencies::LoadingModule.root('modules') # modules/* ¤Ï¥Í¡¼¥à¥¹¥Ú¡¼¥¹ÉդưŪ¸Æ¤Ó½Ð¤·
berryz = HelloProject::Units::BerryzKobo.new
berryz.load
...
к ¡Çw¡Ç) ¡ãView ¤Ë¤Ï Helper ¤¬¤¢¤ë¤±¤É¡¢Controller ¤Ë¤Ï²¿¤Ç¤Ê¤¤¤ó¤À¤í¤¦¡©
ŽÙ üý-üýŽØ ¡ãLoadingModule ¤ò¥Þ¥¹¥¿¡¼¤·¤¿¤³¤Î²Ä°¦¤¤Åí»ÒÍͤˤ«¤«¤ì¤Ð´Êñ¤è¢ö
# config/environment.rb:
$: .unshift('app/presenters')
# app/presenters/berryz_presenter.rb
module BerryzPresenter
def members
Berryz.find_all
end
# app/controllers/berryz_controller,rb
class BerryzController < ApplicationController
include BerryzPresenter
end
ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¤½¤â¤½¤â¡¢app/models ¤È¤«¤Ï¥é¥¤¥Ö¥é¥ê°·¤¤¤Ç¡¢app/controllers/ ¤¬¥â¥¸¥å¡¼¥ë°·¤¤(LoadingModule)¤Æ¤³¤È¤Ï¡¢¡¢¡¢
½£*¡Æ o¡Æ¥ê ¡ãapp/controllers/helpers/berryz.rb ¤ËÃÖ¤¤¤Æ¡¢include Helpers::Berryz ¤¬´üÂÔ¤µ¤ì¤Æ¤ë¤Î¤«¤·¤é¡©
¡Ê¡(Ž´)¡®¡Ë޲ ¡ã¤Ç¤â¡¢Berryz¤¬¥â¥Ç¥ë¤È¾×ÆÍ¤·¤Æ¤ë¤«¤éÉݤ¤¥¯¥Þ¡¼¡£
Àî¡¡¦_¡¦¡®Àî¡ãBerryzHelper ¤â View ¤Î¤È¤«¤Ö¤Ã¤Á¤ã¤¤¤Þ¤¹¤Í¡£
к¡¢à¡®Ðº ¡ãBerryzControllerHelper ... ¤Ï¡¢Ä¹¤¤¤Ç¤¹¤·¡¼¡£
кoŽß¡¼Žßк ¡ã·ë¶É¡¢¤è¤¤Ì¾Á°¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤«¤é Controller ¤Ë¤Ï¥Ø¥ë¥Ñ¤¬¤Ê¤¤¡¢¤È¤æ¤¤¤¿¤¤¤Ç¤¹¡£
к ¡Çw¡Ç) ¡ã¤È¤ê¤¢¤¨¤º¡¢Åí¤Á¤ã¤ó¤Î¤¬¤¤¤¤¤«¤Ê¡©(presenter ¤«¤É¤¦¤«¤Ï¤ª¤¤¤È¤¤¤Æ)
ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¤¢¤È¤Ï¡¢Controller ¤ò°µÇ÷¤¹¤ëÊ£»¨¤ÊSQL¤È¤«¤ò¥ê¥½¡¼¥¹¤ËÄɤ¤½Ð¤¹¤Î¤â³Ú¤·¤¤¤«¤â¤Í¢ö
# config/environment.rb:
File.join(RAILS_ROOT, 'resources'), # LoadingModule.root ¤ÎÃæ¤ËÄɲÃ
# resources/sql/berryz.rb
module Sql
module Berryz
SELECT_MEMBER = <<EOF
SELECT * FROM ...
SELECT_CONCERT = ...
# app/controllers/berryz_controller,rb
class BerryzController < ApplicationController
def information
@members = Berryz::find_by_sql(Sql::Berryz::SELECT_MEMBER)
@concerts = Berryz::find_by_sql(Sql::Berryz::SELECT_CONCERT)
end
½£*¡Æ o¡Æ¥ê ¡ã¤³¤¦¤·¤ÆÅ·»Èã¤ÏÈîÂç²½¤·¤¬¤Á¤Ê Controller ¤ò¥¹¥ê¥à¤Ë¤·¤¿¤Î¤Ç¤·¤¿¡£
к¡Çw¡Ç) ¡ã¥Ç¥ì¥Ç¥ì!!¥·¥ó¥Ç¥ìLOVE!!
| JRuby | Rails | Berryz | ¡î-ute | ¥¨¥Ã¥° | jQuery |
| Á° | 2005ǯ 8·î |
¼¡ | ||||
| Æü | ·î | ²Ð | ¿å | ÌÚ | ¶â | ÅÚ |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||