tDiary ͷ Ruby1.9 ରԠͷաఔͱࠓޙͷϩʔυϚοϓࣲా തࢤ (tDiary.org)SHIBATA Hiroshi (tDiary.org)Our tDiary's policy and strategies to support Ruby1.9 and our future plan.120097݄19༵
View Slide
ࣗݾհ220097݄19༵
• SHIBATA Hiroshi a.k.a hsbt (hsbt.org)• ιϑτΣΞΤϯδχΞ• 1981ੜ·Ε ւಓࡏॅ320097݄19༵
RubyͱͷؔΘΓ• ߴઐ4ͷ࣌ͷԠ༻ֶͰ id:gotoken ͔Βڭ͑ͯΒ͏• tDiary Λ͍࢝ΊͯओʹWebؔ࿈ͷϥΠϒϥϦΛ͍࢝ΊΔ420097݄19༵
• Administrator of developer team fortDiary.org520097݄19༵
RubyKaigi2009ςʔϚʮมΘΔ/ม͑Δʯ620097݄19༵
ΑΖ͓͘͠ئ͍͠·͢ɻ720097݄19༵
Agenda• ·ͣ͡Ίʹ• tDiary-2.3.2ϦϦʔεܭը(Ruby 1.9 αϙʔτ)• Ruby 1.9 ରԠͷৄࡉ• tDiary-2.3.3~ future820097݄19༵
·ͣ͡Ίʹ920097݄19༵
tDiaryͬͯΔਓ͍·͔͢?1020097݄19༵
tDiary1120097݄19༵
tDiaryͱݴ͑…1220097݄19༵
tDiary• feed reader ͰίϝϯτεύϜ͕(ry• tDiaryͷιʔείʔυಡ·ͳ͍ํ͕(ry• ςετίʔυ͕ͳ͍యܕతϨΨγʔίʔ(ry1320097݄19༵
tDiary• Tsukkomi oriented Diary system• before Rails͔Β։ൃܧଓத(25ܭը)• Rubyͱڞʹ• ϨϯλϧαʔόʔʹRubyΛೖΕͤ͞Δ࡞ઓ1420097݄19༵
tDiaryRubyͱڞʹ1520097݄19༵
2009/01/30Ruby 1.9 Release!1620097݄19༵
Ruby 1.9ͬͯΔਓ͍·͔͢?1720097݄19༵
RubyKaigi2009ςʔϚʮมΘΔ/ม͑Δʯ1820097݄19༵
ʮม͑ΔʯtDiary ʹΑΔ Ruby1.9 ීٴ࡞ઓ1920097݄19༵
tDiary ʹΑΔRuby 1.9 ීٴ࡞ઓ• Ruby 1.9͍͔ͭΘͳ͚ΕͳΒͳ͍• tDiaryΛRuby 1.9ීٴͷΩϥʔΞϓϦʹ͢Δ• ͱΓ͋͑ͣಈ͔͘ΒRubyΛ1.9ʹόʔδϣϯΞοϓͯ͠͠·͏2020097݄19༵
Agenda• ·ͣ͡Ίʹ• tDiary-2.3.2ϦϦʔεܭը(Ruby 1.9 αϙʔτ)• Ruby 1.9 ରԠͷৄࡉ• tDiary-2.3.3~ future2120097݄19༵
tDiary-2.3.2ϦϦʔεܭը(Ruby 1.9 αϙʔτ)2220097݄19༵
ͱΓ͋͑ͣಈ͔ͯ͠ΈΔ2320097݄19༵
orz2420097݄19༵
ͰΔΜͩΑby kakutani2520097݄19༵
ͱΓ͋͑ͣԿ͔Β࢝Ίͨͷ͔…2620097݄19༵
·ͣܭը2720097݄19༵
200812݄ਆಸݝॴ2820097݄19༵
࡞ઓձٞ2920097݄19༵
Ruby 1.9 ͰͷओͳରԠ•աڈόʔδϣϯͱͷඇޓ෦•จࣈΤϯίʔσΟϯάͷมߋ3020097݄19༵
Ruby 1.9 ରԠܭը•1.8ͱ1.9ʹଘࡏ͢Δ༷ʑͳඇޓΛͲ͏͢Δ͔•magic comment ΛͲ͏͢Δ͔3120097݄19༵
Ruby 1.9ରԠܭը•ruby ࣮ߦ࣌ͷ --encodingͲ͏͢Δ͔•ΤϯίʔσΟϯάपΓͷࡉ͔͍मਖ਼Ͳ͏͢Δ͔3220097݄19༵
Agenda• ·ͣ͡Ίʹ• tDiary-2.3.2ϦϦʔεܭը(Ruby 1.9 αϙʔτ)• Ruby 1.9 ରԠͷৄࡉ• tDiary-2.3.3~ future3320097݄19༵
Ruby 1.9 ରԠͷৄࡉ3420097݄19༵
ͦͷ1ޓੑରԠ(core/misc/lib/compatible.rb)3520097݄19༵
compatible.rb• ϓϩτλΠϓ machu ͞Μ͕࡞• 1.8ͱ1.9ͱͷඇޓΛٵऩ• for 1.9: String.each_line, String.to_a ...• for 1.8: String.force_encoding,String.bytesize ...3620097݄19༵
ͦͷ2ϚδίϝΔ(magic comment ru)3720097݄19༵
ϚδίϝΔ•*.rb ͷ1ߦʹจࣈΤϯίʔσΟϯάΛ໌ࣔ•shebang ͕ΘΕ͍ͯΔͷ2ߦ3820097݄19༵
͓1ߦʹҙͷจࣈྻΛૠೖ͢ΔϫϯϥΠφʔΛॻ͖ͳ͍͞3920097݄19༵
gsed -i "1s/.*/# -\*- coding: utf-8; -\*-\n&/" **/*.rbsed Λ͏Μͩ!4020097݄19༵
ͦͷ3ruby --encoding=utf-84120097݄19༵
ruby --encoding=utf-8• ruby ࣮ߦ࣌ʹ --encoding ΦϓγϣϯΛ͚ͭΔ͜ͱͰΤϯίʔσΟϯάΛڧ੍Ͱ͖Δ• tDiaryͷ߹ͩͱindex.rbupdate.rbͷshebangʹՃ• Ϣʔβʔʹ༏͘͠ແ͍ͷͰҙࣝ͠ͳͯ͘ಈ͘Α͏ʹ͢Δ4220097݄19༵
ͦͷ4֎෦ΤϯίʔσΟϯάͷࢦఆ4320097݄19༵
֎෦ΤϯίʔσΟϯάͷࢦఆ•࠷ॳopen( file, ‘r:utf-8’) Λ͍ͬͯͨ•Ruby 1.8.6 ͩͱ͑ͳ͍ٕ•٫Լ4420097݄19༵
Encoding::default_external = ‘UTF-8’default_externalΛ͏Μͩ!4520097݄19༵
ؔऀ࿈བྷRUBY_VERSIONΘͳ͍4620097݄19༵
ͦͷଞࡉ͔͍मਖ਼4720097݄19༵
ࡉ͔͍मਖ਼• cgi.cookies ͕ ASCII-8BIT ͱೝࣝ͞ΕΔͷͰencodingΛݸผʹࢦఆ͢Δ• ϒϩοΫΛ͚ͭͳ͍ map Enumerator Λฦ͢Α͏ʹͳͬͨͷͰ to_a ͢Δ• get ͷୈೋҾ͕ nil ڐ༰͠ͳ͘ͳͬͨͷͰԿΒ͔ͷΛࢦఆ4820097݄19༵
͜͜·ͰରԠ͢Δͱ…4920097݄19༵
ͻͱ·ͣಈ࡞֬ೝྃ5020097݄19༵
ͱ͜Ζ͕…5120097݄19༵
eval࣮ߦ࣌ʹSecurityError5220097݄19༵
eval࣮ߦ࣌ʹSecurityError5320097݄19༵
[BUG]ͩͬͨ• $SAFE= 1ͷ࣌ͷevalʹ[BUG]• Δ·Ͱ͜Μͳײ͡ͰରԠ5420097݄19༵
ruby-1.9.1p129 Ͱ bug fix5520097݄19༵
ࢣᐌ͘• Ruby ͷ [BUG] Λ౿ΜͩΒتͼͳ͍͞• Ruby ͷ [BUG] Λ౿ΉΑ͏ʹͳ͔ͬͯΒҰਓલͷΞϓϦέʔγϣϯ• ͨͩͷϨΨ(ry5620097݄19༵
2009/05/08tDiary-2.3.2 ϦϦʔε5720097݄19༵
ΊͰͨ͠ΊͰͨ͠5820097݄19༵
hsbt.org5920097݄19༵
Agenda• ·ͣ͡Ίʹ• tDiary-2.3.2ϦϦʔεܭը(Ruby 1.9 αϙʔτ)• Ruby 1.9 ରԠͷৄࡉ• tDiary-2.3.3~ future6020097݄19༵
ʮมΘΔʯtDiary-2.3.3~ future6120097݄19༵
tDiary-2.3.3~ future• testing frameworkͷ࠾༻• rspec• cucumber• CGI͔ΒRackͷࡌͤସ͑• ػೳՃͱෆ۩߹मਖ਼6220097݄19༵
testing framework• ࢣ(ϚΠέϧɾCɾϑΣβʔζ)ᐌ͘:• ࣗ৴Λ࣋ͬͯมߋ͕Ͱ͖ͳ͍• ೩ྉ: rspecͱcucumberʮςετ͕ແ͍ίʔυϨΨγʔίʔυʯ6320097݄19༵
rspec•pluginͷڍಈΛςετ•contribͷՌΛcoreʹϚʔδ༧ఆ6420097݄19༵
cucumber•γφϦΦΛςετ•testable_tdiary ͷՌΛϚʔδࡁ6520097݄19༵
testable_tdiary!!6620097݄19༵
͓͞Β͍6720097݄19༵
SapporoRubyKaigi016820097݄19༵
ৄ͘͠…• ࡳຈtDiaryձٞ01ͷ֯୩͞ΜͷεϥΠυΛࢀর• http://kakutani.com/20081025.html#p016920097݄19༵
testable_tdiary ͷϚʔδ7020097݄19༵
githubͰ࡞ۀதhttp://github.com/hsbt/tdiary/tree/testable_merge7120097݄19༵
࡞ۀεςʔλε•script/server (pure webrick)•rackup -s webrick tdiary.ru•cucumber -l ja features•Ұ෦ͷγφϦΦͷΈಈ͘7220097݄19༵
tDiaryձٞใࠂ7320097݄19༵
ເͷ͋ΔੈքtDiary cgi.rbwebrickrackcgi.rbwebrickpassenger7420097݄19༵
Ϣʔβʔ/ίϛολͷ• cacheϑΥϧμʹcache͡Όͳ͍σʔλ͕͋Δ• XMLRPC͕ಈ͔ͳ͍··์ஔ͞Ε͍ͯΔ• mod_rubyո͍͔͠ΒfcgiΛऔΓࠐΈ͍ͨ• Ruby 1.9 Ͱಈ͔͢ͱඍົʹ͍7520097݄19༵
ΒͷಓͷΓ·ͩ·͍ͩ7620097݄19༵
·ͱΊ7720097݄19༵
·ͱΊ• tDiaryRubyͱڞʹ͍ͯ͠·͢• ʮม͑Δʯ: tDiary͕Ruby1.9ʹରԠͨ͠ͷͰօ͞Μ͍·͠ΐ͏• ʮมΘΔʯ: tDiary2.3.3ͰϨΨγʔίʔυ͔Βଔۀ͠·͢7820097݄19༵
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠7920097݄19༵
Q&A8020097݄19༵