Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スタートアップ立ち上げの 主力言語にgo言語を 採用してみた話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shuji OCHI
February 24, 2018
Programming
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スタートアップ立ち上げの 主力言語にgo言語を 採用してみた話
umeda.go#3での発表
Shuji OCHI
February 24, 2018
More Decks by Shuji OCHI
See All by Shuji OCHI
「ハッカーズ」の紹介・IT技術書のオススメLT会 #03
ponpoko1968
0
440
ハイブリッドアプリを支える ネイティブ技術
ponpoko1968
0
940
Other Decks in Programming
See All in Programming
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
340
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.3k
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
460
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
180
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.7k
メールのエイリアス機能を履き違えない
isshinfunada
0
220
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
Foundation Models frameworkで画像分析
ryodeveloper
1
590
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
580
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
370
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
590
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
580
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
We Are The Robots
honzajavorek
0
290
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Practical Orchestrator
shlominoach
191
12k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.2k
Transcript
ελʔτΞοϓ্ཱͪ͛ͷ ओྗݴޠʹHPݴޠΛ ࠾༻ͯ͠Έͨ VNFEBHP ӽஐम࢘
·ͣࣗݾհ
ӽஐम࢘ʢ͓ͪ͠Ύ͏͡ʣ w ϑϦʔΤϯδχΞ w ϞόΠϧιϦϡʔγϣϯͱιʔ γϟϧήʔϜͷձࣾΛܦͯ ಠཱ w J04ΞϓϦ։ൃ w
4XJGU0CKFDUJWF$ w σʔλੳ w 1ZUIPO
ຊͷ͓
w ͜Ε·ͰͷܦҢ w ٕज़ͷ w ͍·ͷͱ͜Ζͷ݁
͖͔͚ͬ
None
None
None
ాଜ݈ଠࢯ .*/5גࣜձࣾ$&0ˍϑΝϯμʔ ݩɾγφϓεʢגʣ$&0ˍϑΝϯμʔ ࿈ଓىۀՈ
ΦϯϥΠϯαϩϯ 4ZOBQTF ༗໊จԽਓΛଟ༴͠ɺΦϯϥΠϯα ϩϯͷᅘͱͳΔαʔϏε J04ΞϓϦͷ෦Λ։ൃ ʢ݄4PVUʣ ϦϦʔεݩגࣜձࣾγφϓε
ఆ$50ʢతͳͷʣ ΛΔ͜ͱʹ w ։ൃϦʔυతͳࣄͿΓ w αʔόαΠυ։ൃͦͷ͘Β͍ w ࠓӜౡɻɻɻ
ͳʹΔͷ
None
None
None
ͱ͍͏ͷɻɻɻ
લճͷল
ΦϯϥΠϯαϩϯ 4ZOBQTF ༗໊จԽਓΛଟ༴͠ɺΦϯϥΠϯα ϩϯͷᅘͱͳΔαʔϏε J04ΞϓϦͷ෦Λ։ൃ ʢ݄4PVUʣ ϦϦʔεݩגࣜձࣾγφϓε
RJJUBDPN ʮϨΨγʔ։ൃڥΛࠓ෩ͷ։ൃʹ͚ۙͮΔͨΊʹҰ͖ͬͯͨ͜ͱʯΑΓ
ٕज़తෛ࠴ͷࢁ w ։ൃνʔϜϝϯόʔθϩ w όʔδϣϯཧ͞Εͯͳ͍ w ϩʔΧϧ։ൃڥ͕ଘࡏ͠ͳ͍ w ࣌ຊ൪ڥ͕։ൃڥ w
ຊ൪ͷ&$ͷίʔυΛͦͷ··मਖ਼ w ̍ͭͷ&$Πϯελϯεʹશ෦͍ͬͯΔ w -".1͕̍ͭͷ&$Πϯελϯεʹશ෦ೖ͍ͬͯΔ w FUD RJJUBDPN ʮϨΨγʔ։ൃڥΛࠓ෩ͷ։ൃʹ͚ۙͮΔͨΊʹҰ͖ͬͯͨ͜ͱʯΑΓ
࠾༻ w ໊͕ͳ͍ʢ͋ͨΓ·͚͑ͩͲʣதɺͲ͏ͬ ͯ༏लͳٕज़ऀΛ͋ͭΊΔ͔ w ͳʹ͔Θ͔Γ͍͢ັྗ͕ͳ͍ͱɻɻɻɻ
ಥͰ͕͢
αϐΤϯεશ࢙
ਓؒʹग़དྷͯଞͷಈʹग़དྷͳ͍͜ͱ ਓྨͷൃలͷ伴ɺ Βͳ͍ਓಉ͕࢜ ڞ௨ͷཧ೦ཧΛ৴͡Δ͜ͱ͕Ͱ͖ɺ Ұகஂ݁Ͱ͖͔ͨΒ
lΤϯδχΞʹͱͬͯɺ ʮڞ௨ͷཧ೦ཧΛମݱ͢Δͷʯ ͱԿ͔ʁz
ϓϩάϥϛϯάݴޠ
ൺֱݕ౼ͯ͠ΈΔ
ٕज़ͷ࠾༻ج४ ௨ৗ͜ͷ͕ॏࢹ͞ΕΔ w Ϣʔβਓޱ w ଟ͍ํ͕ྑ͍ͱ͞ΕΔ w ߹తੑʢػೳʣ w ࠷ݶΈͨ͞ͳ͍ͱ
w ϑΟϩιϑΟʔ w ։ൃɾઃܭࢥ
ٕज़ͷ࠾༻ج४ w Ϣʔβਓޱ w ଟ͍ํ͕ྑ͍ͱ͞ΕΔ w ߹తੑʢػೳʣ w ࠷ݶΈͨ͞ͳ͍ͱ w
ϑΟϩιϑΟʔ w ։ൃɾઃܭࢥ ຊʹେࣄͳͷͬͪ͜
ٕज़͕·ͱ͍ͬͯΔࢥ͕৫Λࢧ͢Δ
8FC։ൃͷఆ൪Ͳ͜Ζ w 1)1ɺ3VCZɺ+BWBͱ͔ w ΤϯδχΞ͕ް͍ w τϨʔυΦϑ w ਓଟ͗͢ w
ັྗతͳڝ߹ଟ͍ʢͣʣ w ͭ·Γ4/ൺখ͍͞ w ˠ࠾༻ίετʢखؒͱ࣌ؒʣߴ͍ w ˠ͕࣌ؒͳ͍
+BWB4DSJQU w ࡢ 3FBDU3FEVY ͬͯͨ w 3FBDU3FEVYͦͷͷ͍͍͕ɻɻ w ͍ΘΏΔ+BWB4DSJQUർΕʹͳͬͨ w
ڝ૪͕ܹ͍͠ɺ৺తɾ݂ؾΜͳจԽ w จԽ͕ͪ͝Όͪ͝Ό w มԽ͕͍ͷͰɺͬͯ͘ϦϓϨʔεͮ͠Β͍αʔόαΠ υʹਖ਼Ͳ͏͔
ؔܕݴޠ w FMJYJS͋ͨΓڵຯ͋Δ͚Ͳɺɺɺ w Ϣʔβ͕ബ͗͢ΔͷͰ w पΓʹ͍ͳ͍ͷͰΠϝʔδΘ͔ͳ͍ w ϋΠϒϩ͗͢Δਓ͕ೖͬͯϋϯυϦϯάͰ͖ ͳ͔ͬͨΒͲ͏͠Α͏
4XJGU w ݸਓతʹҰ൪ಘҙ w αʔόαΠυ͚։ൃͷ༻్͕͖ͬͯͨΒ ͍͠ w ͱ͍͑લ్ෆಁ໌ w ࣌ظঘૣ͔
1ZUIPO w ΘΓͱܦݧ͍ w ݸਓతʹҰ൪ॱͳબ w Ϣʔβ૿Ճத w ͪΐͬͱݥͯ͠Έ͍ͨؾ͢Δ
HPݴޠ
पΓͰɺHPΛ͡ΊͨΑɺ ͍ͬͯͬͯΔਓͰɺ HPΛ͚ͳ͍ͯ͠ΔਓΛݟͨ͜ͱ͕ͳ͍ Γ߹͍ͷ1ZUIPOJTUB͕ ͡Ίͨͱ͍͏Λྑ͘ฉ͘
ͪΐͬͱௐͯΈΑ͏
ຊΛങ͖ͬͯͨ
͜ͷਓͬͯɻɻɻ
લʹษڧͨ͠
͜ͷຊͷɻɻ
Χʔχϋϯઌੜʂ
Ͳ͏Β ͓ͬ͞Μʹ༏͍͠ ݴޠΒ͍͠
͓ͬ͞Μʹ༏͍͠ݴޠʢ̍ʣ w ϓϩάϥϛϯά$ݴޠͰ͡Ίͨ w ϙΠϯλͷ֓೦͕͋ΔʢΑΓચ࿅͞ΕͨܗͰʣ w +BWB4DSJQUർΕͰ͏ମྗ͕ͳ͍ w 1ZUIPOಉ༷ɺόοςϦʔಉࠝ w
४උɾڥߏஙָ͕ w γϯάϧόΠφϦ w Ϋϩε։ൃ͕σϑΥ w ˠΫϥυίϯϐϡʔςΟϯά࣌ʹ͍ͯͦ͏
͓ͬ͞Μʹ༏͍͠ݴޠʢ̎ʣ w &NBDTʢ4QBDFNBDTʣͷαϙʔτ͕ߦ͖ಧ͍͍ͯΔ w ՃΧελϚΠζ΄ͱΜͲແ͠Ͱɺ w ϦΞϧλΠϜͰHPMJOUνΣοΫ w อଘ࣌ͷHPGNU w
BVUPDPNQMFUF ࣗಈิɾαδΣετ w HPEPDදࣔ
ืूͯ͠Έͨ ాଜ͞Μ͕֤छ4/4Ͱݺͼ͔͚·ͨ͠
݁Ռ w ԠืͦΕ΄Ͳଟ͘ͳ͔ͬͨʢఆ௨Γʣ w ͔͠͠ԠืऀͲͷํϋΠεϖοΫʂ w &ࢯʢαʔό։ൃ୲ʣ w HPܦݧ w
5ࢯʢΫϥυΠϯϑϥ୲ʣ w "84ͷΤΩεύʔτߴෛՙαΠτͷܦݧ w HPܦݧ͋Γ w ͱΘ͔ͣिؒऑͰແࣄܖͰ͖·ͨ͠ʂ
ܦҢ Ԡื ΩοΫΦϑ ̍ ̌ ̍
̎ ϝϯόʔืू ٕज़ௐࠪɾॳظ։ൃ ։ൃຊ֨Խ ݱࡏʹࢸΔ ։ۀ४උ ࣄۀܭըมߋ ̍ ̎
ମ੍ w ݄͔Β࢝ಈ w ϑϧϦϞʔτ ؔ౦ ؔ &ࢯ 5ࢯ 4ࢯ
݄δϣΠϯ༧ఆ
w ݄͔Β࢝ಈ w ϑϧϦϞʔτ w υΩϡϝϯτڞ༗FTBJP w ৗͷ࿈བྷ w 4MBDL
w (JU)VCνέοτˍϨϏϡʔ ίϛϡχέʔγϣϯ
ٕज़ͷ
ઃܭํ w ૿ాږஶʮݱͰཱͭγε ςϜઃܭͷݪଇʯ w υϝΠϯۦಈΛҙࣝ
ߏཧ w %PDLFSʹΑΔίϯςφϕʔεͷӡ༻ w 'BDUPS"QQ w %PDLFS$PNQPTFʹΑΔ݁߹ࢼݧ w $*ɿ$JSDMF$* w
σϓϩΠɿ"NB[PO&$4
ߏཧʢ̎ʣ w औΓΈத w GBDUPS"QQͷߟ͑ํ w ͬ͘͟Γ͍͏ͱɺɺ w ԿͰίʔυԽͯ͠ཧ w
ԿͰࣗಈԽ w ڥґଘ͢Δಈ࡞ઃఆʹΑͬͯ֎෦ʹ͍ग़͢ w ϩʔΧϧʹͷΛ࣋ͨͳ͍ w ֎෦αʔϏεʹग़དྷΔ͚ͩͤΔ
γεςϜߏਤ $MPVEJOBSZ
ϥΠϒϥϦɾϑϨʔϜϫʔΫ w ϥΠϒϥϦɾϑϨʔϜϫʔΫ w HPB w WJQFS w EBUBCBTFTRM YPˡ/FX
w 03ϚούʔͰͳ͘ w %#εΩʔϚɾ42-͔ΒHPͷΞΫηείʔυΛੜ
HPB w 8FC"1*αʔϏεΛ࡞ΔͨΊͷแׅతͳΈ w ಠࣗܗࣜͷ%4-ʢHPݴޠʣ w ίʔυδΣωϨʔλɾϑϨʔϜϫʔΫ
HPBWTTXBHHFS HPB 4XBHHFS %4- HP :".- +40/ ੜ͢Δίʔυ HP TXBHHFS
ෳݴޠ
HPBͷར w શ෦ೖΓ w ίϯτϩʔϥʢͷTDB⒎PMEJOH w σʔλఆٛ w Τϯίʔμɾσίʔμ
w ϩΨʔ w ϧʔλ w ΫϥΠΞϯτίʔυ w %4-ͷϑΝΠϧׂ͕͍͢͠ w 4XBHHFS TXBHHFSDPEFHFOͩͱ ංେ͕ͪ͠ w ΠϯΫϦϝϯλϧʹඞཁͳ෦ͷίʔυ͚ͩ࠶ੜͯ͘͠ΕΔ w ΫϥΠΞϯτίʔυ·Ͱు͍ͯ͘ΕΔͷͰɺ&&ͷςετ·ͰHPBͱHPݴޠͷதͰ͍݁ͤ͢͞
&&ςετ ςετ ର ςετ ϓϩάϥϜ "1* ༰ νΣοΫ
HPB%4- package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl" )
var _ = Resource("bottle", func() { BasePath("/bottles") DefaultMedia(BottleMedia) Action("show", func() { Description("Get bottle by id") Routing(GET("/:bottleID")) Params(func() { Param("bottleID", Integer, "Bottle ID") }) Response(OK) Response(NotFound) }) }) ʙதུʙ Ϧιʔε ΞΫγϣϯ
HPB%4- package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl" )
var _ = Resource("bottle", func() { BasePath("/bottles") DefaultMedia(BottleMedia) Action("show", func() { Description("Get bottle by id") Routing(GET("/:bottleID")) Params(func() { Param("bottleID", Integer, "Bottle ID") }) Response(OK) Response(NotFound) }) }) (&5IUUQIPHFFYBNQMFDPNBQJWCPUUMFT ʙதུʙ
HPB%4- package design import ( . "github.com/goadesign/goa/design" . "github.com/goadesign/goa/design/apidsl" )
var _ = Resource("bottle", func() { BasePath("/bottles") DefaultMedia(BottleMedia) Action("show", func() { Description("Get bottle by id") Routing(GET("/:bottleID")) Params(func() { Param("bottleID", Integer, "Bottle ID") }) Response(OK) Response(NotFound) }) }) (&5IUUQIPHFFYBNQMFDPNBQJWCPUUMFT ʙதུʙ
$MPVEJOBSZ w ը૾ͷอଘɾՃʹಛԽͨ͠ΫϥυαʔϏε
εϚϗΞϓϦ͋Δ͋Δ w αʔό͔Βड͚औͬͨ ΞΠίϯը૾ͷαΠζ ͕ ಛେ w Ϧετܥͷը໘දࣔͰ ϝϞϦѹഭ
$MPVEJOBSZ w ΫϥΠΞϯταΠυͰμϯϩʔυ͢ΔαΠζ Λࢦఆ͢ΔͱɺՃͯ͠৴ͯ͘͠ΕΔ w ը૾ͷࢦఆ1VCMJD*%ͱ͍͏*%จࣈྻͰࢦఆ w αʔϏεଆ%#͔ΒΫϥΠΞϯτʹࣄલʹ 1VCMJD*%Λڭ͑Δ
ࠓޙͷ՝ w ΖΖΈ࡞Γ͕͖ͬͯͨ w ࣮ΛՃ͍ͯ͘͠ w ෛՙରࡦ
ͱ͍͏Θ͚Ͱ
ελʔτΞοϓ্ཱͪ͛ͷ ओྗݴޠʹHPݴޠΛ ࠾༻ͯ͠Έͨ
݁
͍·ͷͱ͜Ζ ޭͷ༧ײ ͔͠ͳ͍
࣭ٙԠ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠