2017年7月20日に行われた Rails Developers Meetup #3 の発表資料です。
ݸਓ։ൃͷ͍͖͔ͬͯͨ@r7kamura
View Slide
ࣗݾհ• Ryo Nakamura• https://github.com/r7kamura• https://twitter.com/r7kamura• Cookpad→Increments→ϑϦʔϥϯε• Railsͷࣄͱ͔୳ͯ͠·͢
ࠓ͢͜ͱ• Կͭͬͨ͘Β͍͍ͷ͔• ਓखෆ• ۀͱͷؔΘΓํ• OSSʹ͢Δ͔Ͳ͏͔• ๏ͱܦཧ• ࣦഊࣄྫ• ΤλΒͳ͍ͨΊʹ
Կͭͬͨ͘Β͍͍ͷ͔
Կͭͬͨ͘Β͍͍ͷ͔ (1/2)• Hello, world!! ͷ͜͏ଆʹਐΊͳ͍• Կ͔ͭ͘Δͧͱߟ͑ͨͱ͖ʹ·ͣ͜ΕͰࠔΔ• ղ͖͘ΛઃఆͰ͖ͳ͍ͱ͍͏• దͳΛݟ͚ͭΔͷ͕Ұ൪͍͠…
Կͭͬͨ͘Β͍͍ͷ͔ (2/2)• →ࠜݯతͳཉٻʹࣖΛ͚Δͱྑ͍• ࣗͷΛղܾͰ͖Δͷ͕ྑ͍• খ࢝͘͞ΊΒΕΔͱྑ͍• ͘ଓ͚ΒΕΔͱྑ͍• ์ஔͰ͖Δͷ͕ྑ͍• ऩೖΛಘΒΕΔͱͳ͓ྑ͍
amakan.net ͷ߹• ແݶʹອըಡΈ͍ͨ…• →ອըͷແݶϦετ͕ཉ͍͠…• →͕ࣗ͡ΌͿ͡ΌͿߪೖͨ͘͠ͳΔΑ͏ͳɺࣹ৺ΛἤΓ·͘Δ৽ץϦετ͕…• →AmazonͷAPIͰΰχϣΰχϣΕ͍͚ͦ͏• →ऩೖͰແݶʹອըಡΊΔͣ
https://amakan.net/ಡॻཤྺ৽ץใΛཧ͢ΔαʔϏε
ͱ͍͑• ͭ͘Γ͍ͨͷ͕ͭ͘ΕΔͱݶΒͳ͍• ೳྗෆͰ࣮ݱͰ͖ͦ͏ʹͳ͍ͷ͕΄ͱΜͲ• ͭ͘Γ͍ͨͷͱΘΕΔͷͱͷଥڠΛ୳Δ• ඳ͖͍ͨͷͱചΕΔͷ͕ҧ͏ອըՈͷΑ͏ͳͷ• ͭ͘Γ͍ͨͷΛͭ͘ΔͨΊʹݚᮎ͢Δͱྑ͍
ਓखෆ
ਓखෆ (1/2)• ݸਓ։ൃͰਓతϦιʔε͕ಛʹෆ͢Δ• ٳͱ͔ʹยखؒʹΔͷͰ͕࣌ؒແ͍• 1ਓͰશ෦Δඞཁ͕͋ΔͷͰ͕࣌ؒແ͍
ਓखෆ (2/2)• →పఈతʹޮԽ͢Δ͜ͱͰରॲ• ۀͰ͏ٕज़Λڞ༻͢Δ• ݸਓͰ͑Δٕज़Λ͏৫ʹॴଐ͢Δ• εέʔϧ͢Δٕज़ΛΜͰ͍ͬͯ͘• ଞϓϩδΣΫτͱ෦Λڞ༻͢Δ
amakan.net ٕज़֓ཁ• JSONRubyͰɺHTMLJavaScriptͰੜ• t2.micro + db.t2.micro + cache.t2.micro• AWS ECS (Pumaίϯςφ + Sidekiqίϯςφ)• AWSϦιʔεTerraformͰཧ• σϓϩΠɾΤϥʔɾδϣϒ࣮ߦͳͲSlackͰ௨• The 12-Factor App ʹଇͬͨઃܭ
ۀͱͷؔΘΓํ
ۀͱͷؔΘΓํ (1/2)• ۀ৺ͷఈ͔Β͖ͰͬͯΔ༁Ͱͳ͍• ۀରՁʹ߹͏ಇ͖Λ͢Εྑ͍• ݸਓ։ൃࣗͰબΜͰ͖ͰͬͯΔ͜ͱ• ͖ͰͬͯΔ͜ͱ͙Β͍ຊؾͰΔ͖
ۀͱͷؔΘΓํ (2/2)• ݸਓ։ൃͰ৭ʑͱಥ͖٧ΊΔΑ͏ʹͳΔ• ݸਓͱۀͱͰٕज़Ϩϕϧ͕ٯసͯ͘͠Δ• ݸਓͰࢼٕͨ͠ज़Λۀʹద༻͢Δܗ• ྫ: TerraformɺECSɺReactOnRailsɺPumaͳͲamakanͰࢼ͔ͯ͠ΒQiitaʹಋೖ͍ͯ͠Δ
OSSʹ͢Δ͔Ͳ͏͔
OSSʹ͢Δ͔Ͳ͏͔ (1/2)• ͭͬͨ͘ΞϓϦΛOSSʹ͢Δ͔Ͳ͏͔• ެ։/ඇެ։ʹؔΘΒͣಉ͡Α͏ʹॻ͖͘• ऩӹϞσϧͱอଘ͞ΕΔσʔλ࣍ୈ• ྫ: ެ։ͭͭ͠༗ྉͰϗεςΟϯά• ྫ: ඇެ։ͰҰ෦ػೳΛOSSԽ
OSSʹ͢Δ͔Ͳ͏͔ (2/2)• amakanͰίΞػೳΛOSSԽͨ͠• github.com/amakan/amakanize• github.com/amakan/amakankan• ͯ͘͠ΕΔਓ͕ଟͯ݁͘Ռతʹॿ͔ͬͨ• ਓखෆղফͰ͖ΔՄೳੑ͕͋Δ
๏
ར༻نͷ࡞Γํ• άάΔͱδΣωϨʔλʔ͕ग़ͯ͘Δ (ศར)• ॻ੶: ྑ͍WebαʔϏεΛࢧ͑Δʮར༻نʯͷ࡞Γํ• ࣮ࡍΈΜͳΘΓͱίϐϖ͍ͯ͠Δ• 2લʹॻ͍ͨར༻نΛौ୩ͷͰ͔͍ձࣾʹίϐϖ͞Εͨ• ແྉαʔϏε͔༗ྉαʔϏε͔Ͱগ͠ܗ͕มΘΔ• ۀଶ͕ۙͦ͏ͳͭΛ*ࢀߟ*ʹ͢Δͱྑ͍
ϓϥΠόγʔϙϦγʔ• ར༻نͱҰॹʹͭ͘Ζ͏• ϒϥβ֦ுొ࣌ͳͲʹ͋Δͱศར• ࠂϓϩάϥϜར༻ਃͳͲͰ͑Δ
ܦཧ
ࢧग़• ҰൠతͳWebΞϓϦʹඞཁͳܦඅѲ͓͖ͯ͘͠• AWSͰ͋ΕجຊEC2, RDS, Elasticache, ELB͋ͨΓ͕ࢧత• AWSߴ͍ɺGCPͩͱֹఔͰࡁΉɺVPSͩͱͬͱ͍҆ɺΈ͍ͨͳنײͷѲେࣄ• amakanສϢʔβ͙Β͍·Ͱ݄1ສԁͰࣄΓΔ
ऩೖ• amakan1000ϢʔβͰ݄4ສԁఔͷऩೖ• େͷΞϑΟϦΤΠτར͕2%͔Β5%ఔ• αʔϏεͷ༰ࣗମ͕Λѻ͏ͷ͕ϕετ• AdSenseͷؔ࿈ࠂͰऩӹཱͯΔͷͦͦ͜͜ΞΫηεͷ͋ΔαʔϏε͡Όͳ͍ͱݫ͍͠…• ͜ͷลͷࣄΛ͍ͬͯΔͱαʔϏεߟ͑Δͱ͖ʹ༗ར
અ੫• ։ۀಧΛग़͓ͯ͘͠ͱ੨৭ਃࠂͰ͖Δ• ʹҰ෦ͷେਓୡ͕ᄆ͍͍ͯΔΞϨ• αʔόɺ࡞ۀεϖʔεͳͲΛܦඅʹ• ؒສ͔Βेສઅ੫Ͱ͖ΔՄೳੑ͕͋Δ
։ۀ ํ๏• 1. ։ۀfreeeͰ࣭߲ΛຒΊΔ• 2. ੜ͞ΕΔPDFΛ༣ૹ͢Δͱྃ• 3. ઐ༻ͷωοτۜߦޱ࠲Λ࣋ͭͱศར• 4. ઐ༻ͷΫϨΧ͋Δͱͳ͓ྑ͍
ࣦഊࣄྫ
ࣦഊࣄྫ• amakan݄ͷऩೖ 4ສɺࢧग़1ສͩͬͨ• AmazonΞιγΤΠτʹBAN͞Εͨ• վળͯ͠࿈བྷ͕ͨ͠औΓ߹ͬͯ͘Εͣ…• ࢧग़1ສ͚͕ͩͬͨ…• ͭΒ͍
ࣦഊ͔Βͷֶͼ• نղऍͷՄೳੑ·Ͱߟ͑ͯΑ͘ಡ͏• ࣦഊ͢ΔͱϞνϕʔγϣϯ͕ۃʹԼ͕Δ• ऩӹ͕ҙ֎ͱϞνϕʔγϣϯʹͳ͍ͬͯͨ• ์ஔͯͯ͠ಈ͘Α͏ʹͳͬͯͯྑ͔ͬͨ• Ұͭͷऩೖݯʹґଘ͖͢Ͱͳ͍• Ϟνϕʔγϣϯݸਓ։ൃʹ͓͍ͯ࠷وॏͳࢿݯ
ΤλΒͳ͍ͨΊʹ
ΤλΔ• ΤλʔφϧʢӬԕͷɺՌͯ͠ͳ͍ʣΛಈࢺԽͤͨ͞ޠɻπΫϥʔʢRPGπΫʔϧͷϢʔβʔʣͷؒͰੜ·Εͨɻ࡞ऀ͕ॾൠͷࣄʹΑΓ࡞Λ్தͰ์غ͢Δ͜ͱɺ·ͨͦͷঢ়ଶΛද͢ɻ
ΤλΒͳ͍ͨΊʹ• ͭ͘ΔҙຯΛࣦ͢ΔͱඞͣΤλͬͯ͠·͏• ͭ͘ΔҙຯೋͭҎ্͓࣋ͬͯ͘ͷ͕ྑ͍• ྫ: ࠷৽ͷRailsͷػೳΛࢼ͢ͱͯ͠͏• ྫ: స৬׆ಈͷͱ͖ʹ໊ΘΓʹ͏• ྫ: Podcastͷωλͮ͘Γͱͯ͠͏• ྫ: രྲྀߦΓΛເݟͯ։ൃΛଓ͚Δ• ์ஔͯ͠ಈ͘Α͏ʹ͓ͯ͘͜͠ͱॏཁ
ࠓͨ͜͠ͱ• Կͭͬͨ͘Β͍͍ͷ͔• ਓखෆ• ۀͱͷؔΘΓํ• OSSʹ͢Δ͔Ͳ͏͔• ๏ͱܦཧ• ࣦഊࣄྫ• ΤλΒͳ͍ͨΊʹ
͓ΘΓݸਓ։ൃͷ͍͖͔ͬͯͨ@r7kamura