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
91
78k
20230227-engineer-type-talk.pdf
Naoya Ito
November 16, 2023
Tweet
Share
More Decks by Naoya Ito
See All by Naoya Ito
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
20
6.6k
Functional TypeScript
naoya
15
6.4k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
73
36k
シェルの履歴とイクンリメンタル検索を使う
naoya
16
6.3k
関数型プログラミングと型システムのメンタルモデル
naoya
62
110k
TypeScript による GraphQL バックエンド開発
naoya
29
36k
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
naoya
67
24k
「問題から目を背けず取り組む」 一休の開発チームが6年間で学んだこと
naoya
144
60k
一休の現在と、ここまでの道のり
naoya
91
41k
Other Decks in Programming
See All in Programming
Cursorハンズオン実践!
eltociear
2
1.2k
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
350
コード生成なしでモック処理を実現!ovechkin-dm/mockioで学ぶメタプログラミング
qualiarts
0
210
その面倒な作業、「Dart」にやらせませんか? Flutter開発者のための業務効率化
yordgenome03
1
140
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
270
ソフトウェア設計の実践的な考え方
masuda220
PRO
4
620
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
240
CSC305 Lecture 09
javiergs
PRO
0
300
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
250
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
190
When Dependencies Fail: Building Antifragile Applications in a Fragile World
selcukusta
0
110
CSC509 Lecture 07
javiergs
PRO
0
240
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
Speed Design
sergeychernyshev
32
1.2k
Context Engineering - Making Every Token Count
addyosmani
7
280
Practical Orchestrator
shlominoach
190
11k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Code Reviewing Like a Champion
maltzj
526
40k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Making Projects Easy
brettharned
120
6.4k
Optimizing for Happiness
mojombo
379
70k
Building Adaptive Systems
keathley
44
2.8k
The Cost Of JavaScript in 2023
addyosmani
55
9k
Raft: Consensus for Rubyists
vanstee
140
7.2k
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