PHP5.5+ リソース指向フレームワークBEAR.Sundayの紹介です。 第89回PHP勉強会@東京で発表。 Ray.Di, Ray.Aop, BEAR.Resource などについて ブログ→ http://blog.madapaja.net/entry/2015/04/30/200000
BEAR.Sunday ͷͳ͠ؠ࡚ߊ࢘ʢ@madapajaʣ2015-04-28 ୈ89ճ PHPษڧձˏ౦ژ
View Slide
Who am I?• ؠ࡚ߊ࢘ @madapaja• Symfony Ϣʔβʔձ• ϦδϣϒͰΤϯδχΞͯ͠·͢ʂ• ࠷ۙͷۀͰ Rails ͕ଟ͍• PHPษڧձ@౦ژͷࢀՃٱ͠ͿΓ• 1μΠΤοτͯ͠ΔͷʹҰʹݮΒͳ͍ମॏʂʢ͔ͯ૿͑ͨ……ʣ
͔ͤͬ͘ϦδϣϒͰPHPษڧձ@౦ژ Λ͢Δ͜ͱʹͳͬͨͷͰൃදͯ͠Έ·͢ʂ
ͰɺࢿྉΛ࡞ΔͨΊʹ͍Ζ͍ΖړͬͯͨΒ
ʮୈ61ճPHPษڧձ@౦ژʯͰͬͯͨɻ
ࠓࣅͨΑ͏ͳΛ͠·͢m(__)m
BEAR.Sundayͬͯ·͔͢ʁ
BEAR.Sunday• ܊ࢁ͞Μʢ@koriymʣͷ࡞͍ͬͯΔϑϨʔϜϫʔΫ• PHPNW 2013 ͰϓϨθϯςʔγϣϯ͞Εͨ• PHP 5.5+ ϦιʔεࢦϑϨʔϜϫʔΫ• ͜ΜͳαΠτ͕BEAR.SundayͰ࡞ΒΕ͍ͯ·͢• Woman.exciteϚϚʢhttp://mama.woman.excite.co.jp/ʣ• Project Zuluʢhttp://www.pen-online.jp/ʣ• Pen Onlineʢhttp://www.projectzulu.org/ʣ• ͬͯΔਓɺΒͳ͍ਓ BEAR.Sunday ৮ΕͯΈ·͠ΐ͏
BEAR.Sunday =DI + AOP +REST(Hypermedia)
BEAR.Sunday =Ray.Di + AOP +REST(Hypermedia)
BEAR.Sunday =Ray.Di + Ray.Aop +REST(Hypermedia)
BEAR.Sunday =Ray.Di + Ray.Aop +BEAR.Resource
BEAR.Sunday =Ray.Di + Ray.Aop +BEAR.Resource2.1.0ࡢϦϦʔε
BEAR.Sunday =Ray.Di + Ray.Aop +BEAR.Resource2.1.0ࡢϦϦʔε2.1.0
BEAR.Sunday =Ray.Di + Ray.Aop +BEAR.Resource2.1.0ࡢϦϦʔε2.1.01.0.2
Ұͭͣͭઆ໌͠·͢
DI = ґଘੑͷೖʢDependency injectionʣ
ϧʔϧΛهड़͢Δͱ
ϧʔϧΛهड़͢ΔͱΦϒδΣΫτ͕ೖ͞ΕΔ
ϧʔϧΛهड़͢ΔͱΦϒδΣΫτ͕ೖ͞ΕΔར༻ͷࡍʹInjector͔ΒPostΠϯελϯεΛऔಘͯ͠ߦ͏
Ray.DiΛར༻͢Δͱ• ڥʹΑΓDBΛม͑ͨΓɺCacheγεςϜΛม͑ͨΓ͢ΔʹɺModule͚ͩมߋ͢Εྑ͍• PostΫϥεΠϯελϯεΛऔಘͨ࣌͠ͰඞཁͳΦϒδΣΫτ͕ೖ͞Εͨʢ֎͔Βࣗಈతʹηοτ͞Εͨʣঢ়ଶ• PostΫϥε͕ DBͱ͔Cacheͷ࣮Λ͍ͬͯΔඞཁ͕ͳ͍ʢநΫϥεʹͷΈґଘʣ
DIͰಘΒΕΔ͜ͱ• ੜͱར༻ͷ• ґଘੑΛೖ͢Δ͜ͱͰɺΫϥεؒͷີ݁߹ΛݮΒ͢
Ray.Di 2.x• hhvm ରԠ• Qualifier ΞϊςʔγϣϯͷରԠ• toConstructor όΠϯσΟϯάʹΑΔ3rdύʔςΟΫϥεͷ όΠϯσΟϯάʹରԠ• ScrutinizerΫϦʔϯίʔυΠϯσοΫε10.00ɺςετΧόϨοδ100%• ίʔσΟϯά͕OOPʹ• Ray.CompilerʹΑΔύϑΥʔϚϯε্ͱΠϯελϯεੜίʔυͷ ࣗಈੜʹରԠ(v2.1)• ͳͲ……
AOP = ΞεϖΫτࢦϓϩάϥϛϯάʢAspect Oriented Programmingʣ
AOP = ΞεϖΫτࢦϓϩάϥϛϯάʢAspect Oriented Programmingʣ• ΞεϖΫτʢʹԣஅతؔ৺ࣄʣͷॲཧ• ؔ৺ࣄͷʢSoC: Separation of Concernsʣ
• Ωϟογϡͷॲཧ Post Ϋϥεͷຊ࣭తؔ৺ࣄͰͳ͍• Post ΫϥεશͯͷϙετΛฦ͢ࣄʹઐ೦Ͱ͖ΕɺͬͱͤʹͳΕΔ
Ray.Aop Λ༻͢Δͱ
Ray.Aop Λ༻͢ΔͱPostͰຊ࣭తؔ৺ࣄʹઐ೦
Ray.Aop Λ༻͢Δͱ• ΩϟογϡͷॲཧΛ͠ɺଞͷΩϟογϡͷඞཁͳՕॴͰ࠶ར༻Ͱ͖ΔΑ͏ʹͳͬͨ
Ray.Aop Λ༻͢ΔͱCacheInterceptor Ͱԣஅతؔ৺ࣄΛॲཧ• ΩϟογϡͷॲཧΛ͠ɺଞͷΩϟογϡͷඞཁͳՕॴͰ࠶ར༻Ͱ͖ΔΑ͏ʹͳͬͨ
Ray.Aop Λ༻͢ΔͱModule ͰΠϯλʔηϓλʔΛద༻
ΠϯλʔηϓλλΠϚʔόϦσʔγϣϯτϥϯβΫγϣϯ࣮ϝιου• ࣮ϝιουΛแΈࠐΉΑ͏ʹԣஅతؔ৺ࣄΛڬΈࠐΉ͜ͱ͕Ͱ͖Δ
Ray.Aop 2.x• ΞϊςʔγϣϯॱʹΑΔΠϯλʔηϓλͷ࣮ߦ• ΞεϖΫτΫϥεͷΦʔτϩʔμʔొ• ΧελϜϚονϟʔͷରԠ• ScrutinizerΫϦʔϯίʔυΠϯσοΫε10.00ɺςετΧόϨοδ100%• ΑΓޮతͳίʔυࣗಈੜͷΈ͕ಋೖʢ2.1ʣ• ͳͲ……
ROP= ϦιʔεࢦϓϩάϥϛϯάʢResource Oriented Programmingʣ
Ϧιʔεࢦϓϩάϥϛϯά• MVCͷΑ͏ʹController͕Model͔ΒσʔλΛड͚औͬͯViewʹ͢ͷͰͳ͘ɺBEARͰ֤Ϧιʔε͕ϨϯμϥʔΛ࣋ͪϦιʔεΛදݱ͢ΔRequest RepresentationResourceRenderer
ϦιʔεΦϒδΣΫτ• 1ͭͷURIͷϦιʔε͕1ΫϥεʹϚοϓ͞ΕΔ
ϦιʔεΦϒδΣΫτ• @Link λάͷΑ͏ʹϦιʔεಉ࢜ΛϦϯΫ͢Δ• @Embed λάͷΑ͏ʹϦιʔε͕ଞͷϦιʔεΛຒΊࠐΊΔ
ϦιʔεΦϒδΣΫτ• @Link λάͷΑ͏ʹϦιʔεಉ࢜ΛϦϯΫ͢Δ• @Embed λάͷΑ͏ʹϦιʔε͕ଞͷϦιʔεΛຒΊࠐΊΔ@Link ΞϊςʔγϣϯʹΑΔϦιʔεಉ࢜ͷଓ
ϦιʔεΦϒδΣΫτ• @Link λάͷΑ͏ʹϦιʔεಉ࢜ΛϦϯΫ͢Δ• @Embed λάͷΑ͏ʹϦιʔε͕ଞͷϦιʔεΛຒΊࠐΊΔ@Link ΞϊςʔγϣϯʹΑΔϦιʔεಉ࢜ͷଓ@Embed ΞϊςʔγϣϯʹΑΔϦιʔεͷຒΊࠐΈ
URIͱΫΤϦʔʹΑΔϦιʔεϦΫΤετ
BEAR.Resource• ΦϒδΣΫτ͕ϦιʔεͷৼΔ͍Λ࣋ͭHypermediaϑϨʔϜϫʔΫ• URIͱΫΤϦʔʹΑΔϦιʔεΦϒδΣΫτͷΞΫηε• ϋΠύʔϦϯΫʹΑΔϦιʔεΦϒδΣΫτؒͷ࿈ܞʢදݱʣ
DI ͰߏΛɺAOPͰԣஅతؔ৺ࣄΛɺROPͰϦιʔεಉ࢜Λ݁ͼ͚ͭΔConnecting Framework
BEAR.Sunday ͱ• PHP5.5+ʹରԠͨ͠WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ• RESTͷྗΛҾ͖ग़͠ɺHTTPΛΞϓϦέʔγϣϯϓϩτίϧͱͯ͠ѻ͏ϦιʔεࢦϑϨʔϜϫʔΫ• DIʹΑΔΦϒδΣΫτಉ࢜ɺAOPʹΑΔϨΠϠʔԣஅɺRESTʹΑΔใؒΛଓ͢ΔConnecting ϑϨʔϜϫʔΫ• ͍͜ͳ͢ʹઃܭྗ͕ࢼ͞ΕΔɻ• ͚Ͳɺ։ൃऀͱຊޠͰձͰ͖ΔͷͰɺੵۃతʹνϟϨϯδͯ͠Έͯʁ• ͱΓ͋͑ͣ http://bearsunday.github.io/manuals/1.0/ja/ ͔Β࢝ΊͯΈΑ͏ʂ
Madapaja.TwigModule• https://github.com/madapaja/madapaja.twigmodule• BEAR.Sunday ͰͷϦιʔεΛTwigΛ༻͍ͯHTMLͱͯ͠දݱʢϨϯμʔʣ͢ΔͨΊͷΞμϓλΛ࡞Γ·ͨ͠ʂ• ͍Ζ͍ΖΓͯͳ͍ͷͰɺͪ͜ΒͷϓϧϦΫ͓͍ͪͯ͠·͢ʂ• Α͔ͬͨΒࢼ͍ͯͩ͘͠͞ʂ• BEAR.Sunday ͷϚχϡΞϧʹͪΒͬͱهࡌ͞Ε͍ͯ·͢ʢhttp://bearsunday.github.io/manuals/1.0/ja/html.htmlʣ• Have fun!
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ