Tech Compass Vol.6 “Love Heroku?” の発表資料です http://techcompass.jp/study/06/
)FSPLVΛར༻ͨ͠2VJQQFSͷ։ൃࣄྫհ5FDI$PNQBTTl-PWF)FSPLV z/PWFNCFS ,FOTVLF/BHBF!LZBOOZ
View Slide
w2VJQQFSͷհw2VJQQFSϓϥοτϑΥʔϜͰͷ)FSPLVͷ׆༻ࣄྫհw)FSPLVͷ͍Ͳ͜ΖΛݟۃΊΔw·ͱΊຊͷΞδΣϯμ
!LZBOOZ͕͓ૹΓ͠·͢wӬ݈հ /BHBF,FOTVLFw݄d2VJQQFSw8FC%FWFMPQFS 3VCZIUUQLZBOOZNF
2VJQQFSɺϞόΠϧྖҬͷֶशϓϥοτϑΥʔϜΛఏڙ͍ͯ͠ΔڭҭܥελʔτΞοϓاۀͰ͢IUUQXXXRVJQQFSDPNKBQBODBSFFST
ຊࣾϩϯυϯͰ͕͢౦ژΦϑΟε͋Γ·͢χϡʔϤʔΫʹελοϑ͕ৗற͍ͯ͠·͢৬छʹΑͬͯϩϯυϯɾΞδΞॾࠃͷग़ு
IUUQHBLVNPTUVEZDPNதߴੜֶ͚शαʔϏεʮ(",6.0ʯ
IUUQXXXRVJQQFSTDIPPMDPNΞδΞֶ͚शαʔϏεʮ2VJQQFS4DIPPMʯ
$SFBUJPO$FOUFSίϯςϯπΛ࡞Δ2-JOLֶशঢ়گΛϞχλʔ͢Δ2-FBSO(",6.0ֶश͢Δ2VJQQFSϓϥοτϑΥʔϜࡾͭͷػೳΛ࣠ʹ֤छαʔϏεΛల։͍ͯ͠·͢
ಉ͡ΞϓϦέʔγϣϯΛผʑͷϒϥϯυͰల։͢Δ͜ͱ͋Γ·͢
ΞϓϦέʔγϣϯͷಈ࡞֬ೝͷͨΊʹςετ༻ͷڥඞཁͰ͢Ͷ5FTUJOH 5FTUJOH
ɾɾɾ͞ΒʹσϓϩΠલͷ࠷ऴνΣοΫ༻ʹεςʔδϯάڥ༻ҙ͠ͳ͍ͱ5FTUJOH 5FTUJOH4UBHJOH 4UBHJOH
Ӧۀͷਓʮ͋ɺ͓٬͞ΜʹݟͤΔσϞແ͍ͷʁʯ5FTUJOH 5FTUJOH4UBHJOH 4UBHJOH%FNP%FNP
5FTUJOH 5FTUJOH4UBHJOH 4UBHJOH%FNP%FNPαʔόʔ͕͍ͭ͋ͬͯ͘Γͳ͍Αʂ͍͍ͪͪηοτΞοϓͯ͠ΒΕͳ͍Αʂ͜Μͳʹͨ͘͞ΜཧͰ͖ͳ͍Αʂ
)FSPLVΛ͍·͠ΐ͏
ͯ͢)FSPLVͰӡ༻ͯ͠·͢
wαʔόʔͷηοτΞοϓ࡞ۀ͕ෆཁwΞϓϦέʔγϣϯͷઃఆ࡞ۀ͕؆୯wαʔόʔͷࢮ׆ࢹ͕ෆཁwαʔόʔͷεέʔϧΞτ͕؆୯w๛ͳΞυΦϯͰ֦ு؆୯)FSPLVͷڧΈʮӡ༻ͷෛ୲͕গͳ͍ʯʹ͋Γ·͢
IFSPLVDSFBUF".&>ηοτΞοϓίϚϯυҰ͚ͭͩΠϯετʔϧ࡞ۀෆཁͰ͢
HJUQVTIIFSPLVNBTUFSΞϓϦέʔγϣϯͷσϓϩΠʹ(JUΛ͍·͢
IFSPLVDPOpHTFU,&:7"-6&IFSPLVDPOpHڥมͷઃఆɾ֬ೝίϚϯυͰ
EJ⒎Va IFSPLVDPOpHBQQNZBQQQSPEVDUJPOa IFSPLVDPOpHBQQNZBQQTUBHJOH1SP5JQڥมͷࠩνΣοΫ
IFSPLVQTTDBMFXFCεέʔϧΞτίϚϯυҰ͚ͭͩʂαʔόʔػثͷखɾηοτΞοϓෆཁඵͰϦιʔεΛ૿ڧͰ͖·͢
IFSPLVGPSL&8/".&>ΞϓϦέʔγϣϯͷෳͰ͖·͢ςετ༻ɾσϞ༻ڥ͙͢࡞Ε·͢
IFSPLVDSFBUFBQQHJUQVTIIFSPLVNBTUFSIFSPLVGPSLBQQEFNPIFSPLVDPOpHTFU%&.0BQQBQQEFNPσϞ༻ͷڥΛ࡞Δͱͨ͠Β͜Μͳײ͡
๛ͳΞυΦϯ/FX3FMJD ύϑΥʔϚϯεܭଌ
๛ͳΞυΦϯ4FOE(SJE ϝʔϧ৴
ͦͷଞ͍͔ͭͬͯ͘·͢w.FNDBDIJFS Ωϟογϡw3FEJT5P(P ,FZ7BMVFετΞw)FSPLV4DIFEVMFS DSPOw44-
͋͑ͯΞυΦϯΛΘͳ͍͜ͱ
.POHP-BC .POHP%#ϗεςΟϯάwෳΞϓϦέʔγϣϯ͔Βڞ༗wݸผܖͷ΄͏͕ྉ͕͍ۚ҆wΞΫηεݖݶͷదͳ੍ݶwBEEPOTSFNPWFϛεࢭ
͔͜͜Β۩ମతͳϢʔεέʔεΛհ͠·͢wϩάهϛυϧΣΞw"1*αʔόʔͷϚΠάϨʔγϣϯw#J[%FW͕1VMM3FRVFTUΛςετ
ϢʔεέʔεϩάهϛυϧΣΞ
ϢʔεέʔεϩάهϛυϧΣΞwϦΫΤετɾϨεϙϯεΛͯ͢هwௐࠪతͰ࣌ؒͷར༻Λఆw3BDLϛυϧΣΞͱ࣮ͯ͠
ϢʔεέʔεϩάهϛυϧΣΞclass LoggingMiddlewaredef initialize(app)@app = appenddef call(env)ENV['ENABLE_LOGGING'] ? call_with_logging(env) : call_without_logging(env)enddef call_with_logging(env)request = Rack::Request.new envstatus, headers, body = call_without_logging(env)Log.create(request: request, response: [status, headers, body])[status, headers, body]enddef call_without_logging(env)@app.call envendend
ϢʔεέʔεϩάهϛυϧΣΞwڥมͰ༗ޮɾແޮͷΓସ͑wίʔυͷมߋɾσϓϩΠͱʹෆཁwτϥϒϧ࣌ʹ͙͑͢Δ
Ϣʔεέʔε"1*αʔόʔͷϚΠάϨʔγϣϯ
Ϣʔεέʔε"1*αʔόʔͷϚΠάϨʔγϣϯw(SBQF 3BDL͔Β3BJMTϕʔεwNBTUFSͱSBJMTϒϥϯνΛฒߦՔಇw༷ࢠΛݟͳ͕ΒΏͬ͘ΓΓସ͑Δ
αʔόʔߏ DatabaseAPI
αʔόʔߏ DatabaseAPI API (Rails)
"1*αʔόʔଆͷ࡞ۀIFSPLVGPSLBQJSBJMTBQQBQJIFSPLVEPNBJOTBEEBQJSBJMTRVJQQFSDPNHJUQVTIIFSPLVSBJMTNBTUFS
ΞϓϦέʔγϣϯଆͷ࡞ۀʢ˞ڥม"1*@63-ͰΤϯυϙΠϯτΛࢦఆʣIFSPLVDPOpHTFUa"1*@63-IUUQTBQJSBJMTRVJQQFSDPN
࠷খݶͷΦϖϨʔγϣϯͰҠߦྃʢ˞ΞϓϦέʔγϣϯͷ࣮ʹΑΓ·͕͢ɾɾɾʣwμϯλΠϜແ͠ɺʮΏͬ͘ΓʯҠߦw৽چαʔόʔΛฒߦՔಇwαʔόʔΛʮ෦ʯͱͯ͠ѻ͏w%JTQPTBCMF$PNQPOFOUT
wσϓϩΠɾ࠶ىಈɾઃఆมߋͷཤྺwʮ୭͕ʯʮ͍ͭʯʮԿΛ͔ͨ͠ʯw(JUͷίϛοτ͕ه͞ΕΔwෳਓͰͷӡ༻ʹඞਢ1SP5JQIFSPLVSFMFBTFT
Ϣʔεέʔε#J[%FW͕1VMM3FRVFTUΛςετඇ։ൃऀ(JU)VC'MPXʹר͖ࠐΜͰΈΜͳϋοϐʔʹͳͬͨIUUQCMPHNBEPSPPSHNO
։ൃऀ͕1VMM3FRVFTUʢςελʔ͚ͷνΣοΫϦετ͖ʣ
+FOLJOT͕1VMM3FRVFTUϒϥϯνΛςετ(SFFOͩͬͨΒ)FSPLVʹσϓϩΠ
ςελʔσϓϩΠ͞Εͨ63-Λ։͍ͯϒϥβͰಈ࡞νΣοΫ
ίʔυϨϏϡʔςελʔͷಈ࡞νΣοΫ྆ํ0,ͳΒଞͷ։ൃऀ͕Ϛʔδ
%FNPOTUSBCMF1VMM3FRVFTUTwϚʔδ͕શһʹͱͬͯͷʮྃʯʹwίϛϡχέʔγϣϯ͘͢͠ͳͬͨwνʔϜશମͷεϐʔυײ͕͕͋ͬͨwϦϦʔεɾσϓϩΠࣄނ͕ݮͬͨIUUQTCMPHIFSPLVDPNBSDIJWFTIFSPLVGPSL
˞࣮ࡍͷίϚϯυͬͱటष͍Ͱ͕͢ɾɾɾIFSPLVGPSLBQJGFBUVSF(*[email protected]#3"/$)BQQBQJHJUQVTIaHJU!IFSPLVDPNBQJGFBUVSF(*[email protected]#3"/$)HJUa(*[email protected]#3"/$)NBTUFS
ٯʹ)FSPLVͰΠϚΠνͳͱ͜Ζʁwڥมʹґଘ͗͢͠ΔϦεΫw)FSPLVʹ׳Ε͗ͯ͢ΨϥύΰεԽ͢ΔϦεΫwݸਓͰ͏ʹͪΐͬͱׂߴʢແྉআ͘ʣwʢਖ਼ͦΜͳʹෆຬແ͍ʂʣ
ڥมʹґଘ͗͢͠ΔϦεΫwಈతʹܾ·ΔڥมѲͮ͠Β͍ཁૉwຊདྷόʔδϣϯཧ͖͢ʢઃఆϑΝΠϧʣwΞϓϦέʔγϣϯ͕ڥมʹґଘ͗͢͠Δwʮਖ਼͍͠ʯΛΒͳ͍ͱಈ͔ͤͳ͍wυΩϡϝϯτͱίϛϡχέʔγϣϯͰΧόʔ
ʢ͕ࣗʣΨϥύΰεԽ͢ΔϦεΫw)FSPLVҎ֎ͷڥͰԿͰ͖ͳ͘ͳΔwྲྀߦͷ%FW0QTٕज़Λࢼ͢ػձ͕ແ͍wศར͗ͯ͢ΠϯϑϥͷτϨϯυʹૄ͘ͳΔw)FSPLVϓϥοτϑΥʔϜʹғ͍ࠐ·ΕΔw༨ՋΛར༻ͯ͠1BB4*BB4Λݚڀ͠·͠ΐ͏
ݸਓͰ͏ʹͪΐͬͱׂߴʢແྉআ͘ʣwʮ͘͞Βͷ714ʯ͕҆͗͢Δ͚ͩʁwࢿͱࢥͬͯదʹ՝ۚ͢Δͷ͕٢ʁw)FSPLV͕Ṷ͔ͬͯԼ͛͢ΔͱΈΜͳخ͍͠wզʑ։ൃऀ͕Γཱ͍͖ͯͯ·͠ΐ͏
·ͱΊw2VJQQFSͷ։ൃࣄྫΛհ͠·ͨ͠w)FSPLV༏ΕͨϓϥοτϑΥʔϜͰ͢wࣄʢϓϩμΫγϣϯ༻్ʣͰ͑·͢w)FSPLVΤίγεςϜΛཧղ͢Δͱ͞Βʹศར
5IBOLZPV