Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Play2/ScalaͰυϝΠϯۦಈઃܭΛར༻ͨ͠ େنWebΞϓϦέʔγϣϯͷ εΫϥϜ։ൃͷצॴ גࣜձࣾυϫϯΰ χίχίੜ์ૹ ٢ଜ ૯Ұ (@sifue)
Slide 2
Slide 2 text
٢ଜ ૯Ұ (@sifue) • ݩʑɺۀͷۀվֵΛϝ Πϯͱ͢ΔγεςϜίϯαϧ ςΟϯάͰಇ͘SE • झຯήʔϜ࣮گ (࠷ۙFF14) ͱϓϩάϥϛϯά • ͖ͳݴޠJava • 20124݄ɺझຯͷήʔϜ࣮گ ήʔϜ༻πʔϧ։ൃ͕ߴͯ͡ υϫϯΰ
Slide 3
Slide 3 text
ࠓχίχίੜ์ૹΛScalaͰॻ͖͍ͯ͠Δ
Slide 4
Slide 4 text
ͦͦͳͥॻ͖͞Ͷ ͳΒͳ͔ͬͨͷ͔ʁ
Slide 5
Slide 5 text
201212݄
Slide 6
Slide 6 text
ίʔυͷٕज़తෛ࠴ • PHPͷίʔυߦ 300ສߦʹର͠ • ίϐʔˍϖʔετ1ສϲॴ • જࡏతෆ۩߹(PMDܯࠂ)͕ 4500ϲॴ • ॥తෳࡶ600ϝιου͕͍͘ ͭଘࡏ • IDEαϙʔτ͕Ͱ͖ͳ͍จࣈྻͷϦ ϑϨΫγϣϯͷଟ͍ɺgrepෆೳͳ PHPͷίʔυ
Slide 7
Slide 7 text
॥తෳࡶ600ϝιου ྫ͑ΔͳΒऴ൫ͷδΣϯΨ • ਓྨͷӳΛ݁ूͯ͠ෆ۩ ߹ΛೖΕͣʹෆ۩߹վम͢Δ ͜ͱ͕ࠔͳϨϕϧ • ࠓղফ͞Ε͍ͯͳ͍ • ෆ۩߹मਖ਼Λ͢ΔΑΓͦ ΕʹΑͬͯൃݱ͢Δෆ۩߹ͷ ํ͕ଟ͘ͳͬͯ͠·͏ͱ͍ ͏ɺ·͞ʹෛ࠴ ॥తෳ ࡶ ෳࡶ͞ͷঢ়ଶ όάࠞೖ֬ 10ҎԼ 30ҎԼ 50ҎԼ 75Ҏ্ ඇৗʹྑ͍ߏ 25.00% ߏతͳϦεΫ ͋Γ 40.00% ςετෆՄೳ 75.00% ͍͔ͳΔมߋ ޡमਖ਼ΛੜΉ 98.00%
Slide 8
Slide 8 text
ͳͥ͜ͷΑ͏ͳࣄʹ ͳͬͯ͠·ͬͨͷ͔ʁ • اըͷཁ݅ͱక༏ઌͰɺιϑτΣΞͷ෦࣭ ϓϩηε࣭Λૄ͔ʹ͢Δ։ൃମ੍ • ଟ͘ͷਓһ͕Ճ͞Ε͍͕ͯͨɺࠜຊमਖ਼ΛڪΕΔ༨ ΓύονϫʔΫతͳमਖ਼͕ଟ࣮͘ࢪ͞Εͨ • ݁Ռɺίϐϖ͔Γͷ1ສߦͷΫϥε4000ߦͷϝ ιου͕ੜ·Εɺ300ສߦͷ͍ͨΔॴʹ҉ͷӨڹൣ ғΛ࣋ͭίʔυϕʔεʹͳͬͨ
Slide 9
Slide 9 text
͜ͷΑ͏ͳঢ়گʹରͯ͠ ଧͪग़ͨ͠ۓٸରԠ
Slide 10
Slide 10 text
1. ֤ਓͷλεΫΛݟ͑Δঢ়گʹͯ͠ɺޮΑ͘Ϧιʔ εΛͰ͖ΔΑ͏ʹ͢Δ 2. ͍Βͳ͍ػೳΛͬͯอकίετΛԼ͛Δ 3. ΧʔϘʔΠݸਓ։ൃ͔ΒΞδϟΠϧ։ൃମ੍Ҡߦ ͯ͠νʔϜͷརΛ׆͔ͤΔΑ͏ʹ͢Δ 4. ظҊ݅ɺಥൃରԠɺվળ׆ಈͷ3ͭͷνʔϜʹ ׂ͠ɺ҆ఆͯ͠վળ׆ಈΛߦ͑ΔΑ͏ʹ͢Δ
Slide 11
Slide 11 text
3ϲ݄ؒͷରԠͷ݁Ռ 1. େنͳোͱٳग़͕ࣾݮͬͨ 2. ίʔυߦͷ૿Ճ͕ࢭ·ͬͨ 3. ϝϯόʔ͕ٳΜͰνʔϜ͕ճΔΑ͏ʹͳͬͨ 4. ৬͕ݮͬͨ
Slide 12
Slide 12 text
ͱ͍͑ɺطʹऴ൫ͷδΣϯΨʹ ݱঢ়ҡ͕࣋ਫ਼Ұഋͩͬͨ
Slide 13
Slide 13 text
ͦͯ͠ɺχίੜΛॻ͖͢ χίੜ2ϓϩδΣΫτ͕ൃ
Slide 14
Slide 14 text
తܧଓతͳେن৴ʹ͑ΒΕΔΑ ͏ʹ͢ΔͨΊҎԼͷੑೳΛ୲อ͢Δ͜ͱ 1. εέʔϥϏϦςΟ 2. ҆ఆੑɾϑΥʔϧττϨϥϯτੑ 3. อकੑͱ֦ுੑ 4. ύϑΥʔϚϯε Ҏ্ͷॱ൪ͷ༏ઌॱҐͰඪΛઃఆ͢Δ͜ͱͱͳͬͨɻࠓͷઃܭͰ αʔόʔΛ͢ͷʹେ͖ͳγεςϜมߋίετ͕ඞཁͰ͋Γɺࠓ ޙ༰қʹεέʔϧΞτͰ͖Δ͜ͱʹओ؟Λ͓͍ͨɻ
Slide 15
Slide 15 text
20134݄ʹ4ਓͰϓϩδΣΫτελʔτ ࠨ͕୲෦ͷླܓҰ͞Μɺӈ4ਓ͕ϝϯόʔ
Slide 16
Slide 16 text
εϞʔϧελʔτ/εϞʔϧϦϦʔε ϓϩτλΠϓ։ൃ͔ྃΒ࣮ࡍͷϦϦʔε·ͰΛ6ϲ݄Ҏʹઃఆ͠ɺཁ݅ΛߜΔ ͨΊʹɺཁ݅ͷগͳ͍ࠂܕαΠζͷϓϨΠϠʔͱͯ͠։ൃ͢Δ͜ͱʹͨ͠
Slide 17
Slide 17 text
ϓϩτλΠϓ࡞Λ͠ͳ͕Βৗʹͦ͜·Ͱ ͷՌΛ̎िؒʹҰγϣʔέʔεͰհ • ৗʹશͯͷؔऀ͕ϓϩδΣΫτͷ͜͜·ͰͷՌΛ֬ ೝͰ͖ΔγϣʔέʔεڥΛ࡞ɻ্ͷεϥΠυͨͩ ͷֆ͕ͩɺ࣮ࡍʹ6݄ʹಈ͘ͷΛͦ͜Ͱհͨ͠ɻ
Slide 18
Slide 18 text
݁Ռ10݄தʹແࣄɺ ࠂܕϓϨΠϠʔͷϦϦʔεޭ • ه೦͖͢࠷ॳͷ൪νϯΞφΰͰͨ͠
Slide 19
Slide 19 text
࠷ऴతʹϝϯόʔ13໊·Ͱ૿͑ɺ 12݄ͷಛผ൪Λੜ2Ͱ࣮ࢪ • େنͷଓ͕ఆ͞Εͨͷখྛࢠ͞ΜͷΧϯτμϯ൪Ͱ ੜ2ͷϓϨΠϠʔΛར༻ͨ͠์ૹΛ࣮ࢪɺແࣄޭʹऴΘΔ
Slide 20
Slide 20 text
ࠓͷ͓͔͜͜Βɺ ͜ͷϓϩδΣΫτͷཪଆΛհ͠·͢ɻ
Slide 21
Slide 21 text
Play2/ScalaͰͷ େنWebΞϓϦέʔγϣϯ։ൃ
Slide 22
Slide 22 text
ͳͥScalaΛબͨ͠ͷ͔ʁ
Slide 23
Slide 23 text
• Java, Scala, PHP, Ruby͔Βͷબ • อकੑͷ؍͔Β੩తܕ͚ͷݴޠΛ͍͔ͨͬͨ • ύϑΥʔϚϯεͷݒ೦ϓϩτλΠϓ࡞ޙʹஅ͢ Δ͜ͱʹ • ͍ϓϩτλΠϓΛ࡞ͬͨϝϯόʔશһJava/Ruby/ؔ ܕݴޠͳͲͷܦݧ͕͋ΓɺScalaʹ߅ͳ͔ͬͨ • ͨͩ͠ɺ్த͔ΒՃΘͬͨPHP͔ͬͯ͜͠ͳ͔ͬͨϝ ϯόʔ͕ScalaΛΔʹ͋ͨͬͯਏ͍໘͕͋ͬͨ
Slide 24
Slide 24 text
PHP͔ͬͯ͜͠ͳ͔ͬͨϝϯόʔ͕ ScalaΛΔʹ͋ͨͬͯωοΫʹͳΔࣝ 1. ΞϧΰϦζϜͱσʔλߏ 2. ७ਮؔܕϓϩάϥϛϯά 3. valͱvar 4. implicit 5. ฒߦϓϩάϥϛϯάͷࣝ 6. JVMͱJavaϥΠϒϥϦͷΈ
Slide 25
Slide 25 text
1.ΞϧΰϦζϜͱσʔλߏ • PHPຊʹૉΒ͍͠ݴޠͰɺجຊશͯͷίϨΫγϣϯΛ arrayͰѻ͏ͨΊɺσʔλߏʹৄ͍͠ඞཁ͕ͳ͔ͬͨ • ࠓ·ͰPHPͷarray͔͠Θͳ͔ͬͨਓʹɺScalaͰྻͱ࿈ ݁ϦετͱπϦʔηοτͱϋογϡϚοϓ…·ͨ͜ΕΒͷෆ มɺՄมɺฒߦίϨΫγϣϯΛ͍͚ͤ͞Δͷ͍͠ • ରࡦͱͯ͠ϓϩάϥϛϯάίϯςετνϟϨϯδϒοΫΛར ༻ͯ͠ษڧձΛ։࠵ɻͰ20໊ʹ࣮ࢪͨ͠ɻ
Slide 26
Slide 26 text
ϓϩάϥϛϯάίϯςετνϟϨϯ δϒοΫॳڃฤͷษڧձ • ୈ1ճ ࠶ؼؔͱਂ͞༏ઌ୳ࡧ • ୈ2ճ ελοΫͱΩϡʔͱ෯༏ઌ୳ࡧ • ୈ3ճ ᩦཉ๏ • ୈ4ճ ಈతܭը๏ͱϝϞԽ • ୈ5ճ ϓϥΠΦϦςΟʔΩϡʔ • ୈ6ճ Union-Find • ୈ7ճ μΠΫετϥ๏
Slide 27
Slide 27 text
2. ७ਮؔܕϓϩάϥϛϯά • ແཧʹద༻͠ͳ͍ • ίʔυࣗମ΄ͱΜͲ͜ͷελΠϧͰॻ͔Ε͓ͯΒͣɺ ϕλʔJavaͱͯ͠ར༻͍ͯ͠Δଆ໘͕ڧ͍ • ͏ʹ؆ܿʹ͔͚Δ͜ͱ͋Γศར
Slide 28
Slide 28 text
3. valͱvar • valΛపఈ • ՄมίϨΫγϣϯجຊతʹΘͳ͍ • పఈ͔ͨ͠ΒͱݴͬͯͦΜͳʹࠔΔ͜ͱͳ͍ • αʔόʔͰϝϞϦϦʔΫ͕ൃੜͤͣૉΒ͍͠
Slide 29
Slide 29 text
4. implicit • ϥΠϒϥϦΛআ͍ͯۃྗར༻͠ͳ͍ • ಛʹimplicit converterΛΨϦΨϦͬͨ෦͕ෛ࠴ʹͳΓ ͍͢ • ͻͱ͙ͭΒ͍ͳΒྑ͍͕3~4ݸಡΈग़ͨ͠Γɺείʔϓ ͝ͱʹҧ͏ίϯόʔλʔݺͼ࢝ΊΔͱେม… • ͳهड़ݮΒͤͯྑ͍͕ɺଟ͘ͷ͕implicitͩͱpull requestͰͷίʔυϨϏϡʔͰΘ͔Γʹ͘͘ͳΔ
Slide 30
Slide 30 text
5. ฒߦϓϩάϥϛϯάͷࣝ • ActorͷτϥϒϧղܾʹͲ͏ͯ͠ඞཁʹͳΔ • ࠓ՝ͰɺࠓޙɺJavaฒߦॲཧϓϩάϥϛ ϯάͷษڧձΛ։࠵͍ͨ͠ • ࣮ࡍActorΛ७ਮͳࢄίϯϐϡʔςΟϯ άͷϑϨʔϜϫʔΫͱͯ͠Θͣɺϫʔ ΧʔεϨουύλʔϯΛ͏ϥΠϒϥϦͱ͠ ͍ͯͬͯΔଆ໘͕ڧ͍
Slide 31
Slide 31 text
6. JVMͱJavaϥΠϒϥϦͷΈ • ۀͷதͰগֶͣͭ͠OK • νʔϜʹ1ਓJavaͷΤΩεύʔτ͕͍Ε͍࣋ͬͯͳ ͯ͘େৎ
Slide 32
Slide 32 text
ϓϩτλΠϓ։ൃͰࡧͨ͠ χίੜ2ͷΞʔΩςΫνϟ
Slide 33
Slide 33 text
ΠϯϑϥϝϯόʔʹσΠϦʔελϯ υΞοϓʹࢀՃͯ͠Βͬͨ • Γίϛϡχέʔγϣϯ͕ॏཁ • ࠷ॳ͔ΒΠϯϑϥͷ੍ͳͲΛࡉ͔֬͘ೝ͍ͯͨ͘͠Ίʹ ίϛϡχέʔγϣϯίετΛͬͨ • υϫϯΰͰΠϯϑϥӡ༻ͱΞϓϦ։ൃͰ෦ॺ͕͔Εͯ ͓Γݱࡏ੮Λۙ͘ʹ͢Δͷӡ༻͞Ε͍ͯΔ • σεΫϨϏϡʔΛ࣮ࢪ͢ΔࡍʹؾܰʹΠϯϑϥϝϯόʔ ݺͯॿ͔͍ͬͯΔ
Slide 34
Slide 34 text
ΫϥυͰͳ͘ΦϯϓϨϛεͱ͍͏બ • IOύϑΥʔϚϯε • අ༻ • ࣾํͱͯ͠ • ͕ͩੈͷதͷྲྀΕతʹWebͷߏஙʹΫϥυΛར༻ͨ͠Γ͢ ΔΑ͏ʹͳ͓ͬͯΓɺσʔληϯλʔେنWebͷΠϯϑ ϥߏஙʹؔ͢Δϊϋ͕ϨΞʹͳΓɺਓࡐҭɺਓࡐ֬อ ͕՝ʹͳ͍ͬͯΔ
Slide 35
Slide 35 text
DBͷਫฏׂͱਨׂ • DBʹMySQLΛར༻ • ਫฏׂ • 64bitͷIDͷதʹγϟʔυID(12bit)σʔλλΠϓID(10bit)ͳ ͲΛΈࠐΜͰɺDBͷγϟʔσΟϯά͕༰қʹͳΔΑ͏ʹ͠ ͍ͯΔ • InstagramͷIDઃܭɺPinterestͷIDઃܭɺTwitterͷsnowflake ͳͲΛࢀߟʹͨ͠ • ਨׂɺαΠζ͕খ͘͞γϟʔσΟϯά͕ෆཁͳڞ༗DBʹ ͷΈద༻͍ͯ͠Δ
Slide 36
Slide 36 text
̎ͭͷΩϟογϡ தԝredisͱϩʔΧϧredis • ΩϟογϡͰར༻͢ΔϩʔΧϧredis܈ͱதԝͰෳͷwebΠϯε λϯε͔Βར༻͢Δ͍σʔλετΞͱͯ͠ͷதԝredis܈ͱͷ ͍͚ɻͨͩதԝredisσʔλ࠷খԽͷͨΊ͍ͯ͠Δɻ web redis redis redis redis twemproxy redis
Slide 37
Slide 37 text
Խํ๏ • MySQLMHAͰԽ • ॳɺGTIDΛ༻͍ͨํ๏ࡧ͕ͨ͠ϑΣΠϧΦʔόʔͷμ ϯλΠϜ͕MHAͷํ͕͔ͬͨͨΊ • ӡ༻ͱͯ͠ɺVIPΛར༻ͯ͠Γସ͑ͯରԠ • redisSentinelͰԽ • தԝredisͷΈ • Ϛελʔঢ֨ͷࡍʹશͯͷσʔλͷίϐʔ͕ΔͷͰμϯ λΠϜΛগͳ͘͢ΔͨΊʹσʔλΛখ͘͢͞Δ͕ඞཁ
Slide 38
Slide 38 text
֎෦ڥ͔ΒෛՙΛ͢Δ ΞϓϦέʔγϣϯߏ web༻ websocket༻ όον༻ ཧπʔϧ༻ ֎෦Ϧιʔεதܧ༻ σʔλ ετΞ ΫϥΠ Ξϯτ ৴ܥ ϝοηʔδαʔόʔ • ߴෛՙ࣌ɺweb͔websokcet͕ඇৗʹॏ͘ͳΔͨΊͦͷଞ ͷػೳΛͰ͖Δ͚ͩಀ͢ߏͱͳ͍ͬͯΔ
Slide 39
Slide 39 text
websocketΞϓϦ̍ΠϯελϯεͰɺ 5ສϢʔβʔͷࢹௌཧΛ࣮ݱ • nginxͱNettyαʔόʔͰඇಉظIOΛར༻͢Δ͜ͱͰ࠷େଓ͕վળ • REST API͔ΒWebsocketΛར༻͢Δ͜ͱʹΑͬͯଓίετ͕ݮ • ݁ՌɺCPUόΠϯυͷ෦Ͱطଘͷੜ์ૹͷ4ഒͷޮΛ࣮ݱ • ύϑΥʔϚϯεଌఆํ๏ • gatling͕ૉΒ͍͠ετϨεπʔϧɺϨϙʔτ͕៉ྷ • ͨͩ͠websocket෦ϓϥάΠϯͷύϑΥʔϚϯε͕ग़ͣɺ݁ہ node.jsͰετϨεπʔϧΛࣗ࡞ɻnode.jsૉΒ͍͠ɻ
Slide 40
Slide 40 text
υϝΠϯۦಈઃܭͷಋೖ
Slide 41
Slide 41 text
χίੜ2ͰDDDΛ͢Δʹ͋ͨͬͯ ࠷ݶపఈͨ͜͠ͱ 1. ϢϏΩλεݴޠ 2. ϞσϧΛͬͯٞ͢Δͱ͍͏͜ͱ 3. ϨΠϠʔυΞʔΩςΫνϟ 4. ਖ਼͍͠ϞδϡʔϧԽΛߦ͍ɺมߋ࣌ʹಡ· ͳ͖Ό͍͚ͳ͍ίʔυΛݮΒ͢ 1. ίΞͷৠཹ 2. ൚༻αϒυϝΠϯͷ 5. ΤϯςΟςΟͱΦϒδΣΫτͷ͍͚ UI ΞϓϦέʔγϣϯ υϝΠϯ Πϯϑϥ ґଘํ ґଘํ ґଘํ ਤ: ϨΠϠʔυΞʔΩςΫνϟ ※ DDD: Domain-Driven Design
Slide 42
Slide 42 text
Play2/ScalaDDDΛ࣮ફ͢Δʹ ͱͯྑ͍ϑϨʔϜϫʔΫ • CoC͕͖ͭ͘ͳ͖͘উखϑΥϧμ͕۷ΕΔ • ϚϧνϓϩδΣΫτػೳͰαϒϞδϡʔϧͷґଘؔΛ࡞ΕɺϨΠϠʔ υΞʔΩςΫνϟͷڧ੍Ͱ͖Δ • υϝΠϯɺΠϯϑϥplayʹґଘ͠ͳ͍ͨͩͷjar • case class͕ΤϯςΟςΟͱΦϒδΣΫτͷ࡞ͷίετΛԼ͛Δ • ྫ͑ɺΠϯϑϥORMͷϚοϐϯάΫϥεͱυϝΠϯͷΤϯςΟ ςΟΛ͚Δ͜ͱͳͲ͕ۤʹͳΒͳ͍ɻ • play2ΛࣺͯΒΕΔΑ͏ʹ։ൃ͢Δ͜ͱ͕Մೳɻ ※ CoC:ʮઃఆΑΓنʯʢCoC:Convention over Configurationʣ
Slide 43
Slide 43 text
ͱݴ͑ɺυϝΠϯۦಈઃܭ͕ࣗ ಋೖϋʔυϧ͕ߴ͍
Slide 44
Slide 44 text
ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ ʹೖΔલʹϝϯόʔʹಡΜͰΒ͍͍ͨຊ
Slide 45
Slide 45 text
ଟ͍͠ɺͲΕஈ͕ߴ͍ʂ खʹೖΓʹ͍͘ͷ͋Δ...
Slide 46
Slide 46 text
ํ͕ͳ͍͔ΒࣾͰߨशձ
Slide 47
Slide 47 text
ͦΜͳ࣌ͷڧ͍ຯํ
Slide 48
Slide 48 text
Youtubeʹ্͕͍ͬͯΔDevLoveͰ ݩ͞Μ͕DDDΛղઆͨ࣌͠ͷϜʔϏʔ • ࣾͰ͜ΕΛݟΔ্өձ͕3։͔ΕΔ΄ͲૉΒ͍͠ө૾ (42) • http://youtu.be/FNEfk-dlIKU
Slide 49
Slide 49 text
͕ͩϢϏΩλεݴޠͷৢʹɺʑϞσϧ֓ ೦ʹ͍ͭͯاըɺΠϯϑϥΛަ͑ͯͷ͕ٞඞཁ • ͍ۙ࠲੮ͱࡶஊ • ձٞମॏཁ • σΠϦʔελϯυΞοϓ • γϣʔέʔε • ʑࡉ͔֬͘ೝɺٞ
Slide 50
Slide 50 text
DDDΛ࣮ફ͢ΔՁͱ
Slide 51
Slide 51 text
DDDͰͳ͍ίʔυͷྫ • StreamModel.class.phpͷ͍ٞ͠... (1ສߦ) ൪Ͱ͋Γ ൪Λ࡞ΔͷͰ͋Γ ൪Λίϐʔͨ͠Γߋ৽ͨ͠ΓόοΫΞοϓΛͱͬͨΓ͢ΔͷͰ͋Γ ετϦʔϜͰ͋Γ ੜ์ૹͰ͋Γ λΠϜγϑτͰ͋Γ λΠϜγϑτ༧ͷϦετΛݟΕΔͷͰ͋Γ ϝοηʔδαʔόʔΛׂΓͯΔͷͰ͋Γ ଟࠃ੶ԽΛ͢ΔͷͰ͋Γ Ωϟογϡͱͷ௨৴Λ͢ΔͷͰ͋Γ DBͱͷ௨৴Λ͢ΔͷͰ͋Γ
Slide 52
Slide 52 text
ਆΫϥεʹ͍ͭͯͷ͍ٞ͠ It’s difficult to talk about a “God class”. ?
Slide 53
Slide 53 text
ϢϏΩλεݴޠ͕ಋೖ͞ΕΔͱɺ ෳͷνʔϜͰڞ௨ͷݴޠΛͬͯձ͕Ͱ͖Δ • ετʔϦʔͷ༰ʹ͍ͭͯɺνʔϜɺνʔϜؔऀͱͷ͕ٞ͘͢͠ͳΔ • ݁Ռͱͯ͠ɺγεςϜͷ࡞Γʹ͍ͭͯͷνʔϜશମͱཧղ͕ߴ·Δ • Programͱ͍͏Ϋϥε൪Ͱ͋Δ͚ͩͰ͋Δ • Streamͱ͍͏Ϋϥε͕ετϦʔϜͰ͋Δ͚ͩͰ͋Δ • Liveͱ͍͏Ϋϥε͕ੜ์ૹͰ͋Δ͚ͩͰ͋Δ • ੜ์ૹ͕͏·͘࡞Εͳ͍ͱ͔ɺετϦʔϜׂ͕ΓͯΒΕͳ͍ͱ͔ͦΕ͕ ίʔυ্ͷͲ͜ͷͳ͔͠Θ͔Γ͍͢ • ແϢϏΩλεݴޠ͕Ͱ͖Δࡍʹɺ·ͨIRCͰ͔ͬ͠Γ૬ஊ͢Δඞཁ ͋Γ
Slide 54
Slide 54 text
ίʔυͱීஈཁ݅ʹ͍͍ͭͯͯ͠Δݴޠͷ ဃ͕গͳ͘ͳΓɺϦϑΝΫλੑೳ͕͕͋Δ • ͨͩ͠ɺυϝΠϯ͚ͩ • υϝΠϯͷϏδωεϩδοΫͷूʹର͢Δҙ͕ࣝࠜ͘ • ݁ՌɺϏδωεϩδοΫͷมߋͷϦϑΝΫλʹڧ͘ͳΔ • Կ͔ੜ์ૹͷ৴Πϯϑϥϝοηʔδαʔόʔͷར༻ͷཁ͕݅มΘ ΔʹϦϑΝΫλϦϯάΛߦ͕ͬͨɺͳ͘ߦ͑ͨ • աڈ͜͏͍͏͜ͱΛΖ͏ͱͨ͠ࡍɺ͍Ζ͍ΖͳॴʹϏδωεϩ δοΫ͕ඈͼՐ͍ͯͯ͠ɺେࣄɺσάϨଟ͔ͬͨ • ͨͩɺ͏͔ͬΓ͢ΔͱϏδωεϩδοΫ͕υϝΠϯ͔Βಀ͛ͯɺΞϓϦ έʔγϣϯΠϯϑϥʹߦ͖͕ͪͳͷͰɺίʔυϨϏϡʔɺઃܭϨ ϏϡʔͰͷೖ೦ͳࢹͱܧଓతͳϦϑΝΫλϦϯά͕ඞཁͰ͋Δ
Slide 55
Slide 55 text
ΞϓϦέʔγϣϯͷӡ༻ͱ νʔϜ։ൃ
Slide 56
Slide 56 text
CapistranoʹΑΔσϓϩΠ • PlayͷઃఆͷςϯϓϨʔτԽΛerbͱymlͰ࣮ݱ • ͍ΖΜͳΠϯελϯεʹಉ͜͡ͱΛॻ͘ઃఆʹ༗ޮ • ઃఆϓϩύςΟ͕ྻʹରԠ͍ͯ͠ͳ͍͕ɺΛಈత ʹม͑Δඞཁ͕͋Δઃఆʹ༗ޮ • capistranoͷॲཧͷू • minaʹ͠Α͏ͱ͕ͨ͠ࢄσϓϩΠػೳ͕ͳͯ͘அ೦ • ଞʹྑ͍͕͋ΕҠߦ͍ͨ͠ͱߟ͍͑ͯΔ
Slide 57
Slide 57 text
ίʔυنͱͯ͠ͷ Scala Guide/ Effective Scala • Effective ScalaΛकΒͤΔScalastyleΛ࡞ͬͯgithubͰެ։த • https://github.com/dwango/scalastyle • CPD (Copy and Paste Detector)ʹΑΔίϐϖνΣοΫ࣮ࢪ
Slide 58
Slide 58 text
։ൃڥ IntelliJ IDEA Ultimateʹ౷Ұ • ࡉ͔͍࡞Γ͜Έ҆ఆੑ͕ྑ͍ • ձ͕ࣾνʔϜϝϯόʔʹಋೖ • ཧ্ͲΜͳιϑτΣΞͰϝϞாͰ࡞ΕΔ͕… • ։ൃڥΛ౷Ұ͢Δ͜ͱͰɺڥߏஙυΩϡϝϯτͳͲΛߴ ࣭ʹͰ͖Δྑ͕͋͞Δ • vimmerʹධͳideavim͕͋Δ
Slide 59
Slide 59 text
JenkinsͷCI/CDӡ༻ • ϝΠϯδϣϒɺϏϧυɺςετɺϝτϦΫεɺύοέʔ δ࡞ɺࣗಈσϓϩΠΛ͍ͯ͠Δ • Github:eʹ͓͚ΔϓϧϦΫΤετݩͷϒϥϯνͷࣗಈ νΣοΫ͍ͯ͠Δɻࣦഊͯ͠Δͱܯࠂ͕…
Slide 60
Slide 60 text
CI/CDͷՌ • ݱࡏ5ສߦͰɺScala ॏෳίʔυ0ɺscalastyleܯࠂ0ɺࣗ ಈςετͰͷߦϕʔείʔυΧόϨοδ52% • ͱ͍͑ͲɺΛৗʹΑ͘อͪଓ͚ΔʹϦʔμʔ CIͷϝϯςφʔͷܒ׆ಈ͕ॏཁ • ݕূظؒͷେ෯ͳݮ • ݕূظؒʹࣗಈϏϧυɺࣗಈςετɺࣗಈσϓϩΠͷ ݮޮՌ͕Θ͔Γ͍͢ɻϏϧυ৬ਓͱσϓϩΠ৬ਓΛͳ ͤ͘Δ͜ͱେ͖͍ɻ
Slide 61
Slide 61 text
Play2/Scala։ൃͷ 1. sbt͕͗͢Δ • proxyΛ࡞ͬͨΓɺྑ͍ϚγϯΛ͏͙Β͍͔͠ͳ͍ 2. Play2ͷscalaςϯϓϨʔτ͕ɺίϯύΠϧ͘ɺจ๏͕σβΠφʔ ʹ͘͞͠ͳ͍༷ • GroovyςϯϓϨʔτͰ࡞ɻ github/dwangoͰϑΥʔΫͨ͠ ͷΛެ։த 3. ςετͰࠔΔobjectͱtraitͱؔҾ • specs2ͷmockitoͷ੍ɻobjectͷϞοΫ࡞Εͳ͍ɺtraitmixin ͕ඞཁɺδΣωϦΫεύϥϝʔλʔ͕͍ͨؔҾͷϝιου Λ֦ுͰ͖ͳ͍ɻ
Slide 62
Slide 62 text
εΫϥϜͷಋೖ
Slide 63
Slide 63 text
ࣗͷΥʔλʔϑΥʔϧ։ൃͱΞδϟ Πϧ։ൃͷϓϩδΣΫτϚωʔδϟܦݧ 1. աڈ4ͷϑΥʔλʔϑΥʔϧ։ൃͱɺେࣦഊͷܦݧ • ཁٻ͕มߋ͞Εͯ͠·͏ͱࠈ • ෆ֬ఆཁૉʹରԠ͢ΔͨΊͷόοϑΝॏཁ • ࠷ޙͷ͠Θد࣭ͤʹ 2. ཁ͕݅֬ఆͰ͖ͳ͍ɺ·ͨɺཁٻͷ༏ઌॱҐ͕ʑมΘΔ߹ • ΞδϟΠϧͱεΫϥϜͷߟ͕͑ྑ͍ • ʑมΘΔνʔϜͷඪͷॊೈͳରԠ͕ඞཁͳWeb։ൃ
Slide 64
Slide 64 text
ΞδϟΠϧಋೖ·Ͱͷେม͞ • ΈΜͳΨϯτνϟʔτ͕Θ͔Γ͖ͯ͘͢ɺͱ͍͏ • ܒ׆ಈΓϑΣΠετΡϑΣΠε (εϥΠυ࡞ͬͨΓ) • ࣮ࡍͷݱʹ͋ΔϚωδϝϯτͷࠜຊɺΞδϟΠϧͱ͔ ΥʔλʔϑΥʔϧͱ͔ؔͳ͍͜ͱ͕ଟ͍ • ͷൃݟɺతඪͷઃఆΛ͠ɺνʔϜͰͷPDCAͷ࣮ߦ ͕Ͱ͖͍ͯΕྑ͍ͷ͕ͩͦΕ͕Ͱ͖ͯͳ͍͜ͱ͋Δ • ΧʔϘʔΠ։ൃʹྑ͕͋͞ΔͷͰڧཁ͠ͳ͍΄͏͕ྑ͍͜ͱ • ਐḿ֬ೝ͕ߴίετͰɺυΩϡϝϯτΒͳ͍͕ɺݸਓͷ ύϑΥʔϚϯεΛҾ͖ग़ͤΔ
Slide 65
Slide 65 text
εΫϥϜϦʔμʔΛҭͯΔͷʹ ૉΒ͍͠։ൃख๏ • ձٞମ͕ݻఆ • JIRA/GreenHopperͳͲͷαϙʔτπʔϧ • ॻ੶͕ॆ࣮͍ͯ͠Δ • ϓϥϯχϯάϙʔΧʔͰͷݟੵΓ͕ɺεΫϥϜϚελʔΛݽཱ ͤ͞ͳ͍ • શһ͕શͯͷࢠΛ͔ͿΔͷͰஈ֊తʹεΫϥϜϚελʔʹͤ͞ Δ͜ͱ͕Մೳ ਤ: GreenHopperͷը໘
Slide 66
Slide 66 text
ͱ͍͑ɺεΫϥϜϚελʔͱͯ͠ͷجૅ ࣝඞཁͰผ్࠲ֶͷߨ࠲Λ։͍͍ͯΔ • ϚωδϝϯτΛ௨ͯ͡ϝϯόʔΛ׆͔͢ɺͱ͍͏υϥο Χʔͷߟ͑ํɺΞδϟΠϧͱ૬ੑ͕ྑ͍ ର ڭՊॻ ϝϯόʔٴͼεΫϥϜϚελʔ εΫϥϜϚελʔ εΫϥϜϚελʔ ΞδϟΠϧαϜϥΠ ΞδϟΠϧͳݟੵΓ υϥοΧʔͷϚωδϝϯτ
Slide 67
Slide 67 text
εΫϥϜ։ൃͷ՝ • ίχϡχέʔγϣϯίετ͕ͱʹ͔͘ߴ͍ͷͰີͳίϛϡχέʔγϣϯ͕ෛ ୲ʹͳΒͳ͍Έ͕ඞཁ • ϝϯόʔͷཁ݅ఆٛͷೳྗ͕ʹ͖ͭʹ͍͘ • ཁ݅ఆٛͱ͍͏ࣄ͕ετʔϦʔͷཧͱͯ͠؆ུԽ͞Ε͍ͯΔ໘ɺ ֊Խ͕ෆेͩͬͨΓൈ͚࿙Ε͕ൃੜ͍͢͠ • ཁٻཁ͕݅ਂ͍ίϯςΩετ͖ͷυΩϡϝϯτʹ·ͱ·Δ͜ͱ͕গͳ͍ ͨΊ(ετʔϦʔ͍จॻ)ɺϢʔβʔͷཁٻͷཧղʹݸʑྗ͕ඞཁ • ཁٻ͕ʑมΘΔͷͰϦονͳυΩϡϝϯςʔγϣϯ͕มߋ࣌ʹෛ࠴ʹͳΓ ͕ͪ • ࢁͷࢠΛ͔ͿΕΔਓ΄ͲଟʹͳΓ͕ͪ
Slide 68
Slide 68 text
χίੜͰͷεΫϥϜͰ ॏࢹ͍ͯ͠Δ͜ͱ
Slide 69
Slide 69 text
Ϣʔβʔͷཁٻཧղʹରͯ͠ ࣌ؒΛ͔͚Δ • ετʔϦʔͷ࿙Εഎܠʹ͋ΔϢʔβʔཁ݅ͷݟམ ͱ͠Λࢭ͢ΔͨΊ • ۩ମྫ: • ϢʔβʔΠϯλϏϡʔ • twitterͷϞχλʔ • ཁܝࣔ൘ෆ۩߹ܝࣔ൘ͷ༰ͷڞ༗ • ձٞͷελοϑͰͷࢀՃ
Slide 70
Slide 70 text
ετʔϦʔͷϙΠϯτΛ େମ2~3ҎͰऴΘΔྔʹ͍ͯ͠Δ • 1εϓϦϯτͰୡϙΠϯτ͕0ͱ͍͏ঢ়گɺݸਓʹ γϣοΫ͕େ͖͍ • ແɺݸʑਓͷϙΠϯτΛ͓͓ͬͽΒʹग़ͨ͠ΓධՁ ͢Δ͜ͱͳ͍͚ΕͲ...
Slide 71
Slide 71 text
ΈΜͳͰ͓՛ࢠΛ৯ͨΓɺҰॹʹ ήʔϜΛͬͨΓ͢ΔΑ͏৺͕͚͍ͯΔ • ີͳίϛϡχέʔγϣϯͷετϨεΛͰ͖Δ͚ͩݮΒ͢ • ۩ମྫ: • ͓՛ࢠਆࣾ • ϘʔυήʔϜɺωτή • Ͱ͖Δ͚ͩIRC (ࣾνϟοτ) Ͱࡁ·͢ • ΄Μͱ୭ͱϑΣΠεɾτΡɾϑΣΠεͷίϛϡχέʔ γϣϯΛऔΒͣ։ൃ͍͍ͯͨ͠ਓ͍ΔͷͰ...·ͩ՝
Slide 72
Slide 72 text
εΫϥϜϚελʔ͕ৗʹϓϨΠϯά ϚωʔδϟʔͰ͋ΕΔΑ͏ʹ͢Δ • ετʔϦʔͷཧղׂͷͨΊʹٕज़എܠͷ͕ࣝॏ ཁɺͰ͖Δ͚࣮ͩػձ͕͋ΔΑ͏ʹ͢Δ • ઐεΫϥϜϚελʔ͕ඞཁͳ΄Ͳͷେ͖͗͢ΔνʔϜ ʹ͠ͳ͍ɻ҆4~7໊ɻ
Slide 73
Slide 73 text
ΏͱΓΛ࣋ͬͨ։ൃܭը • 1εϓϦϯτͷඪϙΠϯτΛΪϦΪϦʹ͢ΔͱνʔϜ ͕ർฐ͢Δ • ༨༟ͷͳ͍εέδϡʔϧୡ͞Εͳ͍
Slide 74
Slide 74 text
اըͱ૬ஊ͢Δͱ͖ʹɺෆ֬ఆͳ ࣌ظͱ༏ઌॱҐͱҰॹʹ࣋ͪࠐΉ • ʮ2ʙ3εϓϦϯτʹ։ൃྃ͢ΔΑ͏ͳ༏ઌॱҐ ͚ʹͳ͍ͬͯΔ͕Ͳ͏͢Δ͔ʁʯͱ͍͏Α͏ͳ࣋ͪࠐΈ ํΛ͢ΔΑ͏ʹ৺͕͚Δ • ॏཁͰͳ͘ৗʹཁ݅ͷ༏ઌॱҐͰٞ͢Δ
Slide 75
Slide 75 text
ΠϯϑϥνʔϜଞνʔϜͱͷڞಉ ࡞ۀ߹ྲྀόοϑΝΛߟྀ͢Δ • ετʔϦʔͷ߹ྲྀʹ͕͖ͭͷɺόοϑΝͷͳ͍ ͷίϥϘϨʔγϣϯۃྗ͠ͳ͍ • ݟੵΓͷࡍʹݟམͱ͕ͪ͠ͳίϛϡχέʔγϣϯίε τཁ݅࿙ΕͷൃݟͳͲͷϦεΫՃຯ͠ͳ͍͚ͯ͘ ͳ͍
Slide 76
Slide 76 text
χίੜͰͷεΫϥϜͰ ॏࢹ͍ͯ͠Δ͜ͱ 1. Ϣʔβʔཧղʹରͯ࣌ؒ͠Λ͔͚Δ 2. ετʔϦʔͷϙΠϯτΛେମ2~3ҎͰऴΘΔྔʹ͍ͯ͠Δ 3. ΈΜͳͰ͓՛ࢠΛ৯ͨΓɺҰॹʹήʔϜΛͬͨΓ͢ΔΑ͏৺͕͚ ͍ͯΔ 4. εΫϥϜϚελʔ͕ৗʹϓϨΠϯάϚωʔδϟʔͰ͋ΕΔΑ͏ʹ͢Δ 5. ΏͱΓΛ࣋ͬͨ։ൃܭը 6. اըͱ૬ஊ͢Δͱ͖ʹɺෆ֬ఆͳ࣌ظͱ༏ઌॱҐͱҰॹʹ࣋ͪࠐΉ 7. ΠϯϑϥνʔϜଞνʔϜͱͷڞಉ࡞ۀ߹ྲྀόοϑΝΛߟྀ͢Δ
Slide 77
Slide 77 text
·ͱΊ • Play2/ScalaେنWebαΠτͰे௨༻͢Δ • Scalaྑ͍ݴޠ͕ͩ͋Δఔͷٕज़ྗΛཁٻ͢Δ • Play2/ScalaͱυϝΠϯۦಈઃܭʹΑΔ։ൃ૬ੑ͕ྑ͍ • υϝΠϯۦಈઃܭอकੑʹߩݙ͢Δ • εΫϥϜ։ൃϦʔμʔΛҭ͢Δͷʹྑ͍։ൃख๏
Slide 78
Slide 78 text
Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
Slide 79
Slide 79 text
࣭ٙԠ