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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
450
ハイブリッドアプリを支える ネイティブ技術
ponpoko1968
0
950
Other Decks in Programming
See All in Programming
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
350
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
750
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
910
自分的「カンファレンスの楽しみ方」
syumai
0
190
Building an Out-of-Order CPU
latte72
1
710
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
720
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
670
New Earth Scene 8
popppiees
3
2.5k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Skip the Path - Find Your Career Trail
mkilby
1
220
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
The Language of Interfaces
destraynor
162
27k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
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ݴޠΛ ࠾༻ͯ͠Έͨ
݁
͍·ͷͱ͜Ζ ޭͷ༧ײ ͔͠ͳ͍
࣭ٙԠ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠