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
20230227-engineer-type-talk.pdf
Search
Naoya Ito
November 16, 2023
Programming
88
73k
20230227-engineer-type-talk.pdf
Naoya Ito
November 16, 2023
Tweet
Share
More Decks by Naoya Ito
See All by Naoya Ito
Functional TypeScript
naoya
15
5.9k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
66
31k
シェルの履歴とイクンリメンタル検索を使う
naoya
8
3.1k
関数型プログラミングと型システムのメンタルモデル
naoya
61
97k
TypeScript による GraphQL バックエンド開発
naoya
28
33k
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
naoya
67
24k
「問題から目を背けず取り組む」 一休の開発チームが6年間で学んだこと
naoya
144
59k
一休の現在と、ここまでの道のり
naoya
90
41k
技術的負債と向き合う
naoya
255
77k
Other Decks in Programming
See All in Programming
Go1.24で testing.B.Loopが爆誕
kuro_kurorrr
0
160
eBPF Updates (March 2025)
kentatada
0
130
自分のために作ったアプリが、グローバルに使われるまで / Indie App Development Lunch LT
pixyzehn
1
120
Windows版PHPのビルド手順とPHP 8.4における変更点
matsuo_atsushi
0
370
PHPのガベージコレクションを深掘りしよう
rinchoku
0
240
JavaOne 2025: Advancing Java Profiling
jbachorik
1
310
OpenTelemetryを活用したObservability入門 / Introduction to Observability with OpenTelemetry
seike460
PRO
0
320
php-fpm がリクエスト処理する仕組みを追う / Tracing-How-php-fpm-Handles-Requests
shin1x1
5
820
Develop Faster With FrankenPHP
dunglas
2
2.5k
CRE Meetup!ユーザー信頼性を支えるエンジニアリング実践例の発表資料です
tmnb
0
350
データベースエンジニアの仕事を楽にする。PgAssistantの紹介
nnaka2992
9
4.2k
エンジニア未経験が最短で戦力になるためのTips
gokana
0
210
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6.3k
GraphQLの誤解/rethinking-graphql
sonatard
70
10k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Optimizing for Happiness
mojombo
377
70k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
It's Worth the Effort
3n
184
28k
How STYLIGHT went responsive
nonsquared
99
5.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Agile that works and the tools we love
rasmusluckow
328
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
320
BBQ
matthewcrist
88
9.5k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Transcript
͘׆༂Ͱ͖ΔΤϯδχΞʹͳΔͨΊʹʁ ٕज़ऀͱͯ͠େʹ͍ͨ͜͠ͱ גࣜձࣾ Ұٳ ҏ౻
ҏ౻ • גࣜձࣾҰٳ ࣥߦһ $50 ݄ʙ • ۙ͘
8FC։ൃΛத৺ʹ͖ͬͯ·ͨ͠ – Ϛωδϝϯτɺ։ൃͱͲ – ࣄͰ 5ZQF4DSJQU όοΫΤϯυ झຯͰ )BTLFMMΛΑ͘ॻ͖·͢
2ʮ͘׆༂Ͱ͖ΔΤϯδχΞʹͳΔͨΊʹ ʯ • ສਓʹޮ͘ॲํᝦɺΘ͔Γ·ͤΜɻ͝ΊΜͳ͍͞ • ʮ͜͏͢Ε͍͍ʯΘ͔Βͳ͍ • ࣗͷաڈͷࣦഊɺ͔ͦ͜Βͷলͷڞ༗Ͱ͖ΔͷͰɺͦ͏͍͏ΤϐιʔυΛ͠·͢
ΤϐιʔυҰཡ • FQରॲྍ๏͔ΓͰɺٕज़త͕ͪͬͱղܾ͠ͳ͔ͬͨ • FQͪΌΜͱֶ΅͏ͱࢥͬͨΒখதֶੜͷษڧ͔ΒΓ͕͠ඞཁͩͬͨ • FQΘ͔ͬͨɺͱࢥ͕࣮ͬͨફͯ͠ΈͨΒશવͰ͖ͳ͔ͬͨ • FQաڈͷܦݧΛͱʹ࡞ͬͨΒɺ͍ͮΒ͍ϓϩμΫτʹͳͬͯ͠·ͬͨ •
FQϚωδϝϯτʹϑΥʔΧεͨ݁͠Ռɺେ͖ͳ՝͕શ͘ղফͰ͖͍ͯͳ͔ͬͨ • FQۤखྖҬΛਓʹ͍ͤͯͨΒɺࢧԉ͕ޙखʹճͬͯ͠·ͬͨ
FQେྔͷτϥϑΟοΫΛࡹ͔ͶͳΒͳ͍ • ͝Ζɺ࣌୲͍ͯͨ͠γεςϜ͕աෛՙʹͳΓαʔόʔμϯ͕සൃ • ·ͩϏοτͰɺΫϥυαʔϏεͰͳ͍࣌ • ৽ଔ͔Β͑ͯ͘Β͍Ͱͷग़དྷࣄ
ରॲྍ๏Λ܁Γฦͨ͠ • ҋӢʹ͍σΟεΫʹͯ͠ΈͨΓʜ • )551αʔόʔσʔλϕʔεͷઃఆΛνϡʔχϯάͯ͠ΈͨΓʜ • αʔόʔΛ૿ઃͯ͠ΈͨΓʜ
ঢ়گશ͘ྑ͘ͳΒͳ͍ • ͕ͯ͢ରྍ๏ • ͨ·ͨ·ͦͷ࣌ى͖͍ͯΔݱʹɺྍ๏͕߹͍ͬͯΕվળ͢Δ͕ʜ ʮ͜͏͢Εɺ͜͏ͳΔʯͱ͍͏ύλʔϯ͚ͩͰ͕ղܾͰ͖ͳ͍ ʜബʑΘ͔͍͕ͬͯͨͦͷ͕࣌དྷͯ͠·ͬͨ
ͨ·ͨ·खʹऔͬͨҰͷຊ
-JOVYΧʔωϧͷιʔείʔυ$16ΞʔΩςΫνϟͷຊΛಡΈړΔ
None
None
جૅ͕ࣝΓ͍ͯͳ͔ͬͨ • ෛՙରࡦʹɺϋʔυΣΞ04ͰԿ͕ى͖͍ͯΔ͔ΛѲ͢Δ͜ͱ͕ॏཁ • ʮղܾࡦʯͰͳ͘ʮͷݟۃΊํʯ • ࣌ͷࣗʹΛݟۃΊΔͨΊͷجૅ͕ࣝෆ͍ͯͨ͠ – ϩʔυΞϕϨʔδɺ$16༻ɺϝϞϦར༻ঢ়گɻશͯงғؾͰଊ͍͑ͯͨ –
Χʔωϧ෦ͰԿʹج͍ͮͯɺͲ͏ܭଌ͞Ε͍ͯΔ͔ɻࣈԿ͕ى͖͍ͯΔ͜ͱΛ͍ࣔͯ͠Δ͔ ʮ͋͋͢Ε͜͏ಈ͘ʯΛ֮͑Δ͚ͩͰղܾͰ͖ͳ͍ྖҬ͕͋Δ͜ͱΛ௧ײ
FQجૅେࣄͩͳɺͱࢥͬͯษڧͯ͠Έͨͷͷʜ • ίϯϐϡʔλαΠΤϯεͷجૅࣝΛֶश͠Α͏ͱࢥͬͨ – $4ઐ߈Ͱͳ͔ͬͨ ͱ͍͏͔େֶ༡ͼโ͚͍ͯͨͷͰʜ • ΞϧΰϦζϜͱσʔλߏɺใݕࡧɺਪનٕज़ͳͲ
ֶΘ͔Βͳ͍
͕ࣜग़ͯ͘Δͱख͕ࢭ·ΔɻֶΛΓ͢ • େֶͷઢܗͷษڧΛ͢Δ ˠશવΘ͔Βͳ͍ ʮ΄΅Ε͍ͯΔͳʜʯ • ߴߍֶʹḪΔ ˠ डݧษڧͰࢄʑͬͨ͠ɺΘ͔Δͣʜ ͑ɺΘ͔Βͳ͍
• தֶੜͷֶ·ͰḪΔ ˠ Θ͔ͬͨͱݴ͑ͳ͍ ͦͦɺࣗதֶɾߴߍɾେֶͱͰֶΛʮΘ͔ͬͯʯ͍ͨΜͩΖ͏͔ʜ ҼղɺϕΫτϧɺඍੵɺݻ༗ʜܭࢉͰ͖͍͕ͯͨʜ
ʮΕͨʯͰͳ͘ʮΘ͔͍ͬͯͳ͔ͬͨʯ ͕ࣗԿΛΘ͔Βͳ͍͔ɺͱ͍͏͜ͱ͔ΒΛഎ͚͍ͯͨ͜ͱ͕Θ͔ͬͨ ͭΒ͍
Ͱɺ৺ΛંΔΑ͏ͳ͜ͱͰͳ͍ • ʰ͕ࣗࢥ͍ͬͯͨ΄Ͳ಄͕Α͘ͳ͔ͬͨʱ – IUUQTCMPHDPNFOUSZQ – ΊͪΌͪ͘Όྑ͍ΤοηΠɻԿಡΈฦ͍ͯ͠Δ l͏·͘Δֶੜͦ͏͍͏ࠔʹͿ͔ͭͬͨͱ͖ɺࣗͷྗෆͱഅࣛ͞Ճݮʹ໓ೖΔ ؾ࣋ͪͱಆ͍ɺࢁͷ;ͱͰখ͞ͳาΈΛ࢝Ί·͢ɻ൴ΒɺϓϥΠυʹই͕ͭ͘͜ͱ ɺࢁ͔Βͷܠ৭ΛோΊΔͨΊͰ͋ΕऔΔʹΒͳ͍ͱ͍͏͜ͱΛ͍ͬͯΔͷͰ
͢ɻz
͜ͷΤϐιʔυʹ͏গ͠ଓ͖͕͋Δ • ֶݏ͍Λࠀ͠ɺ.*5ͷڭՊॻʹͳͬͨΞϧΰϦζϜͷຊͳͲͨ͘͞ΜಡΜͩ • ܭࢉྔͷഽײ͕֮ʹ͖ͭɺେنใݕࡧγεςϜΛߏͰ͖ΔΑ͏ʹͳͬͨ • ΞϧΰϦζϜͷֶతੑ࣭͍͘Β͔Θ͔ΔΑ͏ʹͳͬͨ • ࣗ৴͕͍ͭͯ͘Δʜ
None
͋Δͱ͖ɺڝٕϓϩάϥϛϯάʹखΛग़ͯ͠ΈΔ • ΞϧΰϦζϜ৭ʑ͔ͬͨΒ͍͚ΔͰ͠ΐ͏ʂ • ݁ՌɺҰղ͚·ͤΜͰͨ͠
ʮࣝʯ͕͋Ε͕ղ͚Δͱ͍͏ࢥ͍ࠐΈ • هԱ͞·͟·ͳଞͷهԱମݧͱͷ૬ޓ࡞༻ͰʮࣝʯʹͳΔ • ϓϩάϥϛϯάɺ࣮ʮମԽʯ͠ͳ͍ͱॻ͚ΔΑ͏ʹͳΒͳ͍
FQεϚʔτϑΥϯͷ͕࣌དྷ͔ͨΞϓϦ࡞ͬͨ͜ͱ͕ͳ͍ • ʹͳΔͱ J1IPOF "OESPJE͕ٸʹγΣΞΛ৳࢝͠ΊΔ • νʔϜͰεϚʔτϑΥϯ͚ͷΞϓϦΛ࡞Δ͜ͱʹͳͬͨ • 6*Ͳ͏͠Α͏ʜ 8FC։ൃͷܦݧͦͦ͜͜ੵΜͩࢲʮಉ͡εΫϦʔϯͷΠϯλϑΣʔεͩ
͔Βɺ8FCͷܦݧ͕׆͔ͤΔͰ͠ΐ͏ʯ – ܦݧͷ͋ΔਓͳΒΘ͔Δ௨Γɺ͜Ε ͱͯ ྑ͘ͳ͍ํͰ͢
݁Ռɺ͍ͮΒ͍ 6*͕Ͱ͖ͯ͠·ͬͨ • ޙ J04ΞϓϦΛࣗͷखͰ࡞ͬͯΈͯɺϛεδϟοδͩͬͨͷ͕Α͘Θ͔ͬͨ – J04ʹ J04ͷ 6*ΨΠυϥΠϯ͕͋ΓɺͦͷΨΠυϥΠϯʹԊͬͯ࡞Δͷकഁͷक –
6*,JUͲΜͳ 6*ͳΒࣗવʹ࣮ݱͰ͖ͯɺͲ͏͍͏͜ͱແཧ͠ͳ͍ͱͰ͖ͳ͍ͷ͔ ຊΘ͔͍ͬͯͳ͍͜ͱͳͷʹɺྨࣅͷܦݧΛͯΊͯ ࣗ͋ΔఔΘ͔͍ͬͯΔͱࡨ֮ͯ͠͠·͍ͬͯͨ
FQ৭ʑͳܦݧΛܦͯ$50ि ʜҰٳͷ $50ʹ • ͋Δఔख़ͨ͠اۀʹ $50ͱͯ͠ೖࣾ • Ϛωδϝϯτͷ͕ʹ͖͍ͭ͢ – ٕज़తͳ՝ͩͱօࢥ͍ͬͯΔ͕ɺ࣮ࡍʹਓͷ՝Ͱ͋Δ͜ͱ͕ଟ͍
– ʰϐʔϓϧΣΞʱʹͦΜͳ͜ͱ͕ॻ͍ͯ͋Δ
ϚωδϝϯτͰɺେখ͞·͟·Λղܾ͢Δ • ৭ʑͳ͜ͱ͕վળ͞Ε͍ͯͬͨ • ͜ͷؒɺϚωδϝϯτʹ࣌ؒΛ͍ͬͯͨͷͰ΄ͱΜͲ։ൃͰ͖͍ͯͳ͍
ͱ͜Ζ͕पล͔Γ͕ղܾ͞Ε͍ͯͯɺҰ൪େ͖ͳ͕ղܾ͞Ε͍ͯͳ͍ 技術的負債 ϨΨγʔ ΞʔΩςΫνϟ (JU)VC σϓϩΠ ࣗಈԽ ϩάͷՄࢹ Խ
4MBDL ใڞ༗ ϏϧυύΠ ϓϥΠϯ ΫϥυҠ ߦ
Ұ൪հͰେ͖ͳ͕Կ͔Θ͔͍ͬͯͨͷʹʜ • ʮϚωδϝϯτͰ৫Λ׆ੑԽ͍͚͍͔ͯͭ͠վળʹܨ͕Δͣʯ – ͜Ε࣮ࡍʹઓज़Ͱͳ͘ɺͨͩͷئͰ͔͠ͳͬͨ
ೖ͙ࣾͯ͢͠ʹϚωδϝϯτʹຉ͠ɺ։ൃΛ͍ͯ͠ͳ͔ͬͨ • ։ൃͰ͖͍ͯͳ͍͕ނʹɺຊؙʹඈͼࠐΉͷ͕ා͍ • ݁Ռɺ։ൃ͠ͳ͍ͷͰ͍ͭ·Ͱܦͬͯຊؙͷ՝ʹର͢Δղ૾্͕͕Βͳ͔ͬͨ ʮϘτϧωοΫϚωδϝϯτʯʮٕज़ͷ՝Ͱͳ͘ਓͷ՝ʯ ͳͲͱݴͬͯϓϩμΫτٕज़త՝ʹਖ਼໘͔Β͖߹͑ͳ͍ࣗΛޡຐԽ͍ͯͨ͠
ʜͱ͍͏Θ͚ͰࣗΒ։ൃΛઌಋ͢ΔΑ͏ʹͨ͠ • େ͖͗͢ΔɺͦΕΛͩͱࢥͬͯղܾͰ͖ͳ͍͔Βɺ͕ͯ୭ͦ͏͍͏͕ ͋Δೝࣝ͢Β࣋ͨͳ͘ͳΔ • ͜͏͍͏ঢ়گτοϓμϯͰΓࠐΉ͜ͱ͕Ͱ͖ΔͳΒɺͦΕ͕Ұ൪͍
FQόοΫΤϯυ։ൃʹूதɺϑϩϯτΤϯυಘҙͳਓʹͤͯʜ • ࣗΒ։ൃΛઌಋ͢ΔɺͱݴͬͯશͯΛ͕ࣗϦʔυ͢Δͷ͍͠ • όοΫΤϯυࢲ͕ɺϑϩϯτΤϯυಘҙͳςοΫϦʔυʹ͓ͤͨ͠
ޙʹԿ͕ى͖͔ͨ • 8FC։ൃͷؔ৺͝ͱ͕ϑϩϯτΤϯυଆʹҠ͍ͬͯͬͨ • ϑϩϯτΤϯυ։ൃͷਐาʹେͳΞϓϩʔν͕ඞཁʹͳ͍ͬͯͬͨ – 41"ͷશҠߦɺσβΠϯγεςϜͷߏஙɺϑϩϯτΤϯυͷΠϯϑϥετϥΫνϟඋʜ • ͔͠͠ɺࠓࢥ͑ेͳମ੍తࢧԉ͕Ͱ͖͍ͯͳ͔ͬͨ ϑϩϯτΤϯυྖҬଞͷਓʹͤΑ͏ͱͯؔ͠৺·Ͱ͛ͯ͠·͍
Ϛωδϝϯτͱͯ͠ࢧԉΛ͖࣌͢ʹɺͦΕʹؾͮ͘͜ͱ͕Ͱ͖ͳ͔ͬͨ
ࠓ͓ͨ͠͠Τϐιʔυ • FQରॲྍ๏͔ΓͰɺٕज़త͕ͪͬͱղܾ͠ͳ͔ͬͨ • FQͪΌΜͱֶ΅͏ͱࢥͬͨΒখதֶੜ͔ΒΓ͕͠ඞཁͩͬͨ • FQΘ͔ͬͨɺͱࢥ͕࣮ͬͨફͯ͠ΈͨΒશવͰ͖ͳ͔ͬͨ • FQաڈͷܦݧΛͱʹΛ࡞ͬͨΒɺ͍ͮΒ͍ϓϩμΫτʹͳͬͯ͠·ͬͨ •
FQϚωδϝϯτʹϑΥʔΧεͨ݁͠Ռɺେ͖ͳٕज़՝͕શ͘ղফͰ͖͍ͯͳ͔ͬͨ • FQۤखྖҬΛਓʹ͍ͤͯͨΒɺࢧԉ͕ޙखʹճͬͯ͠·ͬͨ
ʮ͜͏͢Εɺ͜͏ͳΔʯͱ͍͏ύλʔϯͰ͕ղܾͰ͖ͳ͍ ʜബʑΘ͔͍͕ͬͯͨͦͷ͕࣌དྷͯ͠·ͬͨ ͕ࣗԿΛΘ͔Βͳ͍͔ɺͱ͍͏͜ͱ͔ΒΛഎ͚͍ͯͨ͜ͱ͕Θ͔ͬͨ ͭΒ͍ ຊΘ͔͍ͬͯͳ͍͜ͱͳͷʹɺྨࣅͷܦݧΛͯΊͯ ࣗ͋ΔఔΘ͔͍ͬͯΔͱࡨ֮ͯ͠͠·͍ͬͯͨ ʮϘτϧωοΫϚωδϝϯτʯʮٕज़ͷ՝Ͱͳ͘ਓͷ՝ʯ ͳͲͱݴͬͯϓϩμΫτٕज़త՝ʹਖ਼໘͔Β͖߹͑ͳ͍ࣗΛޡຐԽ͍ͯͨ͠ ϑϩϯτΤϯυྖҬଞͷਓʹͤΑ͏ͱͯؔ͠৺·Ͱ͛ͯ͠·͍ Ϛωδϝϯτͱͯ͠ࢧԉΛ͖࣌͢ʹɺͦΕʹؾͮ͘͜ͱ͕Ͱ͖ͳ͔ͬͨ
ࢹڱࡥͱղ૾Լͷ܁Γฦ͠ • Կ͔ʹूத͢Δͱࢹ͕ڱ͘ͳͬͯɺͦΕҎ֎͕Θ͔Βͳ͘ͳΔ • ࢹΛ͘͢Δͱղ૾͕Լ͕ͬͯɺࡉ෦͕Θ͔Βͳ͘ͳΔ • Θ͔Βͳ͘ͳ͍ͬͯΔͷʹʮ·ͩΘ͔͍ͬͯΔʯͱࢥ͍ࠐΜͩΓɺʮશવΘ͔ΒΜʯͱΛ ᛉΔͱ͕ى͖Δ
ࣗͷόά͍ͬͯΔ • Θ͔͍ͬͯͳ͍͜ͱΛΘ͔͍ͬͯΔͱࡨ֮͢Δ • Δ͖͜ͱΛ͍ͬͯͳ͍ͷʹɺ͍ͬͯΔͱࢥ͍ࠐΜͩΓ͢Δ
͜ͷόά͔ΒಀΕ͍ͨ • Θ͔͍ͬͯͳ͜ͱɺΘ͔Δ͔͠ͳ͍ • ͞·͟·ͳٕज़ྖҬʹ͍ͭͯɺͰ͖Δ͚ͩߴ͍ղ૾Ͱཧղ͍ͯ͠Δঢ়گΛҡ͍࣋ͨ͠ બΓΈΛͤͣʹֶशΛܧଓ͢ΔɻखΛࢭΊͳ͍ɺͱ͍͏γϯϓϧͳํ๏Ҏ֎ʹ ͋·Γྑ͍ղܾࡦࠓͷͱ͜Ζࢥ͍͍͍ͭͯͳ͍
ۙگ • ϓϩάϥϛϯάݴޠΛͪΌΜͱཧղ͍ͨ͠ͱࢥͬͯɺझຯͰ )BTLFMMΛϝΠϯͷݴޠʹ͠ ͯຖॻ͍͍ͯΔ – ܧଓ͍ͯͬͯ͠Δͱɺൃݟ͕ͨ͘͞Μ͋Δ ʜڝϓϩΛҰղ͚ͳ͔ͬͨͷͳ͔ͥΘ͔ͬͨ – ʮͬͱૣ͘Δ͖ͩͬͨʯ
·ͨͦΕ͔ɺԿͩ – ʮ3VTUΒͳ͖Όͳʔʯ Ϡόͦ͏ɻϑϥάͰʜ
݁ͼ • Ͳ͏Βࣗͷ৺ͱͯऑ͍ɻԿ͔ͱࣗࣗʹݴ͍༁Λͯ͠͠·͏ • ͜ͷࣗʹର͢Δݴ͍༁͔ΒಀΕ͍ͨɻਓੜޙͬͱࣗΛߠఆͯ͠ੜ͖͍͖͍ͯͨ – Δ͖͜ͱΛ͍ͬͯΔࣗͳΒߠఆͰ͖ͦ͏ – ݴ͍༁͔ΒಀΕΔʹɺֶशΛଓ͚ΔҎ֎ʹํ๏ͳͦ͞͏ –
ܧଓͷ౮Λফ͞ͳ͍Α͏ஸೡʹଓ͚͍͖͍ͯͨͱࢥ͍ͬͯΔ ʮٕज़ऀͱͯ͠େʹ͍ͨ͜͠ͱʯͷࠓͷճ ݁Ռʮྑ͍ιϑτΣΞٕज़ऀʯʹҰาͰ͚ۙͮͨΒྑ͍ͱࢥ͏
l͏·͘Δֶੜͦ͏͍͏ࠔʹͿ͔ͭͬͨͱ͖ɺࣗͷྗෆͱഅࣛ͞Ճݮʹ໓ೖΔ ؾ࣋ͪͱಆ͍ɺࢁͷ;ͱͰখ͞ͳาΈΛ࢝Ί·͢ɻ൴ΒɺϓϥΠυʹই͕ͭ͘͜ͱ ɺࢁ͔Βͷܠ৭ΛோΊΔͨΊͰ͋ΕऔΔʹΒͳ͍ͱ͍͏͜ͱΛ͍ͬͯΔͷͰ ͢ɻz