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
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
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
210
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
160
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
New "Type" system on PicoRuby
pocke
1
970
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
110
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
180
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.3k
スマートグラスで並列バイブコーディング
hyshu
0
160
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.2k
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7k
Discover your Explorer Soul
emna__ayadi
2
1.1k
The browser strikes back
jonoalderson
0
1.3k
Paper Plane (Part 1)
katiecoart
PRO
0
9.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Exploring anti-patterns in Rails
aemeredith
3
410
YesSQL, Process and Tooling at Scale
rocio
174
15k
Code Review Best Practice
trishagee
74
20k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
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ݴޠΛ ࠾༻ͯ͠Έͨ
݁
͍·ͷͱ͜Ζ ޭͷ༧ײ ͔͠ͳ͍
࣭ٙԠ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠