Golang meetup in Sapporo 2015/01/21 #sapgolang
7PJDF5FYU8FC"1*Ͱͷ(PMBOHར༻ࣄྫͷ͝հ!UNBFEB͑ʹ͠ςοΫ(PMBOHNFFUVQJO4BQQPSP
View Slide
!UNBFEBw ג͑ʹ͠ςοΫͰΤϯδχΞΛ͍ͯ͠·͢ɻw3VCZͷࣄ͕ଟ͍Ͱ͢ɻw࠷ۙ5ZQF4DSJQUͱ͔3FBDUͱ͔JQZUIPOQBOEBTͱ͔ʹڵຯ͕͋Γ·͢ɻwԑ͋ͬͯɺ͙͜͜Β͍গ͚ͩ͠(P͍ͬͯ·͢ɻ
ຊͷ͓w7PJDF5FYU8FC"1*ͷ͝հw(PΛͬͯΈͯͷײ
7PJDF5FYU8FC"1*w)0:"αʔϏεגࣜձ༷͕ࣾӡӦ͍ͯ͠Δߴ࣭Ի߹αʔϏεͰ͢ɻw8FC"1*ͷΠϯλʔϑΣʔε෦ฐࣾͰ։ൃͷ͓ख͍Λ͖ͤͯ͞·ͨ͠ɻ
7PJDF5FYU8FC"1*curl "https://api.voicetext.jp/v1/tts" \ -o "test.wav" \ -u "YOUR_API_KEY:" \ -d "text=͓Α͏͍͟͝·͢" \ -d “speaker=hikari" \ -d “emotion=happiness” \ -d “emotion_level=2”
7PJDF5FYU8FC"1*ͷߏPortal(Rails)Wrapper (Go)!ར༻ऀVoiceTextEngineԻ߹αʔόʔHerokuPostgre!SQLɾϩάɾϢʔβʔೝূɺϩάॻࠐϢʔβʔ!ొϢʔβʔొLoadBalancerAPIར༻
গ͠ͷؒɺσϞ͔ͶͯɺVoiceTextͰ͠·͢ɻshowͰ͢ɻςϨϏ౦ژܥྻʮϞϠϞϠ͞·͊ʙͣ2ʯͱ͍͏൪ͷφϨʔγϣϯΛ୲͍ͯ͠·͢ɻ
ͳͥ(Pʁwͱฒྻੑw$ͷϥΠϒϥϦͱͷੑw։ൃޮhikariͰ͢ɻ
ͳͥ(Pʁwͱฒྻੑw$ͷϥΠϒϥϦͱͷੑw։ൃޮtakeruͰ͢ɻ
ͳͥ(Pʁwͱฒྻੑw$ͷϥΠϒϥϦͱͷੑw։ൃޮharukaͰ͢ɻ
ͳͥ(Pʁwͱฒྻੑw$ͷϥΠϒϥϦͱͷੑw։ൃޮbearͰ͢ɻ
σϞ͓͠·͍santaͰ͢ɻ
ྑ͔ͬͨͱ͜ΖGoΛͬͯΈͯ
࣮ߦw$΄ͲϝϞϦཧϙΠϯλͷཧʹؾΛΘͳͯ͘ࡁΉ͕ɺ$ͱಉఔͷ͕ͰΔɻwHPSPVUJOFͱDIBOOFMΛར༻ͯ͠ɺൺֱత؆୯ʹϚϧνίΞΛ׆͔͢ฒྻϓϩάϥϛϯά͕Ͱ͖Δɻ
$ͱͷੑwඞཁ࠷খݶͷखଓ͖Ͱɺ$Ͱॻ͔Εͨ֎෦ϥΠϒϥϦͷؔΛݺͼग़ͤΔɻpackage rand !/* #include */ import "C" !func Random() int { // Cͷੈքͷrandom()ؔΛݺͼग़ͯ͠ // ݁ՌΛgoͷੈքͷintʹมͯ͠ฦ͢ return int(C.random()) } !func Seed(i int) { // goͷੈքͷintܕͷiΛCͷੈքͷuintʹมͯ͠ɺ // CͷੈքͷsrandomؔʹҾͱͯ͢͠ C.srandom(C.uint(i)) }
੩తνΣοΫwίϯύΠϧ࣌ʹ੩తܕνΣοΫ͕ಇ͘ͷͰɺ͠ΐʔͳ͍ϛείϯύΠϧ࣌ʹ͛Δɻwͦͷଞɺએݴͨ͠ͷʹͬͯͳ͍มͱ͔ɺͬͯͳ͍ύοέʔδͱ͔ࢦఠͯ͘͠Εͯɺ݁ߏɻ
ॆ࣮ͷϥΠϒϥϦwඞཁ࠷ݶͷϥΠϒϥϦඪ४Ͱଗ͍ͬͯΔɻwɺจࣈྻɺਖ਼نදݱɺྻNBQͳͲͷίϯςφɺ࣌ؒɺύʔαʔɺ04ɺωοτϫʔΫɺ҉߸ɺѹॖɺϩάͳͲͳͲɻwΦʔϓϯιʔεͷϥΠϒϥϦ͍Ζ͍Ζ͋Δɻ
γϯϓϧͳݴޠ༷wΫϥεͳ͍͚ͲɺܕʹϝιουΛੜͤΔͷͰࠔΒͳ͍ɻwྫ֎ॲཧػೳͳ͍͚ͲɺෳฦΓͰͦΜͳʹࠔΒͳ͍ɻw(FOFSJDTͳ͍͚ͲɺྻͱNBQͰཁૉͷܕΛࢦఆͰ͖ΔͷͰɺଟ͘ͷέʔεͰࠔΒͳ͍ɻ
HPGNUwݴޠඪ४ͷίʔσΟϯάن͕͋ͬͯɺHPGNUίϚϯυΛ͏ͱܗͰ͖ΔͷͰɺίʔσΟϯάنʹ·ͭΘΔफڭઓ૪͕ى͖Δස͕গͳ͍ɻ
ݴޠ༷͕҆ఆw݁ߏසൟʹ(PͷόʔδϣϯΞοϓ͕ߦΘΕΔ͕ɺେ͖͘ڍಈ͕มΘͬͯޓੑͷ͕ى͖Δɺͱ͍͏͜ͱ͕͋·Γͳ͔ͬͨʢগͳ͘ͱ͜Ε·Ͱʣɻ
ͪΐͬͱෆຬͳͱ͜Ζ
දݱྗ͕গͳΊw(FOFSJDTཉ͍͠wతσʔλܕͱύλʔϯϚονཉ͍͠
ϥΠϒϥϦͷػೳ࣭w͍ظؒɺଟ͘ͷਓʹ͍ࠐ·Εͨڥ +BWBͱ͔3VCZͱ͔ͱൺֱ͢ΔͱɺϥΠϒϥϦͷػೳ࣭͕·ͩख़͍ͯ͠ͳ͍ײ͡ɻwࣗಈςετڥwจࣈίʔυมʢ͍ΘΏΔʮμογϡʯͱ͔ʣwGPSLFYFDඇޮ
·ͱΊ
·ͱΊwଟগͷෆຬ͋ΔͷͷɺશମతʹඇৗʹόϥϯεͷऔΕͨྑ͍ݴޠɾڥͰେม࣮༻తͳͷͰେม͓͢͢ΊͰ͖·͢ɻw7PJDF5FYU8FC"1*ΛͲ͏ͧ͝ርʹɻͬͯgolang