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
大規模開発に打ち勝つためのマルチパラダイム / Beat with multi paradigms
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
OKUNOKENTARO
June 16, 2018
Technology
1.8k
4
Share
大規模開発に打ち勝つためのマルチパラダイム / Beat with multi paradigms
2018/6/16 ng-japan 2018にて発表した資料です。
OKUNOKENTARO
June 16, 2018
More Decks by OKUNOKENTARO
See All by OKUNOKENTARO
トレタO/X アーキテクチャ移行記 Next.js App Router化への道のり / TORETA TECH UPDATE 1
okunokentaro
5
12k
Podcastを継続する技術 / refactoradio-240119
okunokentaro
1
210
Webアプリケーション設計の第一歩は ディレクトリの整理から / Encraft 1
okunokentaro
34
10k
JSONとJSON Schemaを改めて理解する / tokyo_study
okunokentaro
9
2.5k
それでもどうしてRecoilを使うのか / Harajuku.ts Meetup Recoil
okunokentaro
19
5.7k
TypeScriptは10年でこんなに進化しました / TechFeed Experts Night 11
okunokentaro
6
1.8k
Hasura.io RDBをサクサク作る方法はARやO/RMだけじゃなくなりました/hasura-io
okunokentaro
5
710
コードには型アノテーションよりも要件アノテーションを増やせ!/harajukuts2
okunokentaro
14
6.5k
10年と3ヶ月でWebサービスを作った話 / Piyogrammer Conference 2021
okunokentaro
2
1.1k
Other Decks in Technology
See All in Technology
ワールドカフェ再び、そしてゴール・ルール・ロール・ツール / World Café Revisited, and the Goals-Rules-Roles-Tools
ks91
PRO
0
170
2026-05-14 要件定義からソース管理まで!IBM Bob基礎ハンズオン
yutanonaka
0
160
ボトムアップ限界を越える - 20チームを束る "Drive Map" / Beyond Bottom-Up: A 'Drive Map' for 20 Teams
kaonavi
0
230
AI 時代の Platform Engineering
recruitengineers
PRO
1
200
Fラン学生が考える、AI時代のデザインに執着した突破口
husengs7
1
100
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
100k
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
3
1.4k
「強制アップデート」か「チームの自律」か?エンタープライズが辿り着いたプラットフォームのハイブリッド運用/cloudnative-kaigi-hybrid-platform-operations
mhrtech
0
200
PdM・Eng・QAで進めるAI駆動開発の現在地/aidd-with-pdm-eng-qa
shota_kusaba
0
240
分断された OT と IT を繋ぐ架け橋 -Kubernetes が切り拓く 産業用組み込み製品の現在地 -
yudaiono
1
110
カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi
kaonavi
1
460
freeeで運用しているAIQAについて
qatonchan
1
630
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
We Are The Robots
honzajavorek
0
230
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
180
Being A Developer After 40
akosma
91
590k
Technical Leadership for Architectural Decision Making
baasie
3
360
Thoughts on Productivity
jonyablonski
76
5.1k
Transcript
େن։ൃʹଧͪউͭͨΊͷ ϚϧνύϥμΠϜ +VO OHKBQBO !PLVOPLFOUBSP
୭ w Ԟݡଠ!PLVOPLFOUBSP w גࣜձࣾϐΫηϧάϦ ο υ w OHKBQBO
$PEF(SJE ϑϩϯτΤϯυʹؔΘΔਓʑͷΨΠυ ֹ݄ԁʢ੫ࠐԁʣ ΫϨδοτΧʔυɺ1BZ1BMͰͷ͓ࢧ͍ͷ߹ؒͷແྉߪಡظؒ
ࣥච IUUQTCPPLJNQSFTTDPKQCPPLT
͋Β͢͡
͜͜·Ͱͷ͋Β͢͡ IUUQTTQFBLFSEFDLDPNPLVOPLFOUBSP
ݱࡏͷঢ়گ w ૯ߦ ߦ ʢۭߦɺ ςε τίʔ υؚΉʣ w
૯ϑΝΠϧ ϑΝΠϧ ʢςε τؚΉʣ w ։ൃମ੍ w ϑϩϯ τΤϯ υ ɾ ΤϯδχΞਓ
ʑɺ ͕ग़ w ઃܭͲ͏͢Δ͔ w ίʔ υͷॏෳ͕සൟʹੜ·ΕΔͲ͏͢Δ͔ w ͦͯ͠ԿมΘΔ༷ॻʜ
ղܾͷࠔ͞ w ͋ΒΏΔঢ়گΛΓӽ͑Δਖ਼ղɺ ͻͱͭͰͳ͍ w ਖ਼ղ͕ݟ͔ͭΒͳ͍͜ͱ͢Β͋Δ w ίʔ υΛॻ࣌ؒ͘Α Γɺ
ܾஅʹඅ͕࣌ؒ͢ଟ͍͋Δ w ܾஅ͕ɺ ޙͷޙչΛট͘ ͜ͱ͋Δ
Ҿ͖ग़͠Λଟ࣋ͭ͘ wʮલʹಡΜͩ͋ͷຊͰʙʯ wʮ͋ͷਓ͕͍ͯͨ͠ͷʙʯ wʮ࠷ۙ؍ͨΧϯϑΝϨϯεͩͱʙʯ
ϓϩάϥϛϯά ɾ ύϥμΠϜ
w ϓϩάϥ ϛϯάʹ͓͚Δֶͷ֓೦ɺ ղऍΛҙຯ͢Δ w खଓ͖ܕϓϩάϥ ϛϯά w ΦϒδΣΫ τࢦϓϩάϥ
ϛϯά w ؔܕϓϩάϥ ϛϯά ϓϩάϥϛϯά ɾ ύϥμΠϜ
w ࣌ͷਐߦ w ٕज़ͷਐาɺ ٕज़త੍͔Βͷղ์ w ࣏తͳࣄ w աڈͷผݴޠͷলͱվળ ͳͥݴޠෳ͋Δͷ͔
w +BWB4DSJQU w खଓ͖ܕɺ ΦϒδΣΫ τࢦͳͲ w 5ZQF4DSJQU w ؔܕɺ
δΣωϦ οΫͳͲ ͋ͳͨͷಘҙͱ͢Δݴޠ ʁ
w ύϥμΠϜ࣍ʑ ͱฤΈग़͞ΕΔ w ࣗͷۀ্ѻ͍ͬͯΔݴޠͷΈ͔͠৮͍ͬͯͳ͍ͱɺ ৽͍͠ύϥμΠϜʹ৮ΕΔػձ͕ͳ͍ w ੵۃతʹଞͷύϥμΠϜʹ৮ΕͯΈΔ w
ղܾͷҾ͖ग़͠Λ͛Δ ෆ׳ΕͳύϥμΠϜʹ৮ΕΔ
ϚϧνύϥμΠϜΛऔΓೖΕ࣮ͨྫ
w ֮͑ͨύϥμΠϜΛҋӢʹೖΕͳ͍ w खஈͷతԽආ͚Δ w ΤϯδχΞͷࣗݾຬʹͯ͠ͳΒͳ͍ w ࠓճϚϧνύϥμΠϜʹ͖͢ͱड़͍ͨΘ͚Ͱͳ͍ w ղܾʹ͚ͨൃΛॊೈʹ͢ΔͨΊͷΤΫααΠζͰ͋Δͱଊ͑Δ
w έʔεόΠέʔεͰͷۛຯ͕ඞཁ ҙ
w ܖʹΑΔઃܭɺ %FTJHOCZ$POUSBDU %C$ͱ w ͋Δϝ ιο υΛݺͿͱ͖ɺ ݺͿଆͰอূ͖͢ෆม݅ɺ ࣄલ͕݅ຬͨ͞ΕΔ
w Ͱ͋Ε w ͦͷϝ ιο υͷऴྃ࣌ʹอূ͖͢ෆม݅ɺ ࣄޙ͕݅ຬͨ͞ΕΔ w ࣮ͷޡΓͳͷ͔ɺ ϝ ιο υΛ͏ଆͷޡΓ͔ΛϋοΩ Ϧͤ͞Δ ܖϓϩάϥϛϯά
w console.assert() + unassertJOWBSJBOU͕Φεεϝ `npm i invariant` w ಋೖ؆୯ w
ܖϓϩάϥ ϛϯάͷશ࠶ݱͰ͖ͳ͍͕ ʮ࣮ͷޡΓͳͷ͔ɺ ϝ ιο υΛ͏ଆͷޡΓ͔ΛϋοΩ Ϧͤ͞Δʯ Λڗड͢ΔͨΊͷΞϓϩʔν w +BWB4DSJQU։ൃʹ͓͍ͯޚతϓϩάϥ ϛϯάɺ ૣظϦλʔϯͳͲ ࣝͱͯ͠༗༻ "OHVMBSͳΒ
w ԣஅతؔ৺ࣄ ʢΞεϖΫ τʣ Λڞ௨Խ࣮ͯ͠ߦ͢ΔͨΊͷϓϩάϥ ϛϯάख๏ w ༗໊ͳྫͱͯ͠ϩάग़ྗ w ͋ΒΏΔϞδϡʔϧɺ
͋ΒΏΔϝ ιο υͰϩάͷग़ྗ༗༻ w ͨͩ͠ɺ ͦΕΒͯ͢ʹϩάग़ྗ༻ͷίʔ υ͕ॻ͔Ε͍ͯͨΒ ຊʹॏཁͳॲཧΛࣔ͢ίʔ υ͕ຒΕͯ͠· ͏ w ෭࣍తͳॲཧԣஅతؔ৺ࣄΛ͠ຒΕͳ͍Α ͏ʹ͢Δख๏ ΞεϖΫ τࢦϓϩάϥϛϯά
w "OHVMBS։ൃऀʹ͓ͳ͡Έɺ %FDPSBUPSΛ͏ w Ϋϥε໊ϝ ιο υ໊ͷ্ʹ%FDPSBUPSͱͯͨؔ͠͠Λهड़ wʮϩάΛग़ྗͤΑʯ ͱ͍͏ॲཧ%FDPSBUPS෦ʹӅṭͭͭ͠ϩάग़ྗΛୡ w
%FDPSBUPSॲཧͰ 1SPYZύλʔϯ (P' Ϧ ϑ ϨΫγϣϯ ɾ ϓϩάϥ ϛϯάͳͲͷख๏͕༗༻ w ௐࢠʹͬͯΓ͗͢ΔͱͨͩͷಡԽ "OHVMBSͳΒ
࣮Ҋ݅Ͱͷྫ @KukerComponent() @Component({ selector: 'app-foo-bar', templateUrl: './component.html', styleUrls: ['./component.scss'], })
export class FooBarComponent { // ... } IUUQTHJUIVCDPNLSBTJNJSLVLFS
w ෭࡞༻Λ༻͍ͣʹҾ ʢೖྗʣ ͱΓ ʢग़ྗʣ ΛͬͨؔΛ ͍ͭ͘Έ߹ΘͤΔ͜ͱͰॲཧΛ࣮ݱ͢Δख๏ w +BWB4DSJQUɺ ୈҰڃؔΛѻ͑ΔͷͰ࠶ݱ͍͢͠
w ؔΛ͍ͭ͘Έ߹ΘͤΔͱ͍͏Ͱ3Y+4Ͱ͓ͳ͡Έ w ͪͳΈʹ3Y+4ϦΞΫςΟ ϒϓϩάϥ ϛϯάɺ એݴܕϓϩάϥ ϛϯά ͳͲͷύϥμΠϜͷ࣮ݱͰ͋Γɺ ؔܕϓϩάϥ ϛϯάͰͳ͍ ؔܕϓϩάϥϛϯά
w ܕΛύϥϝʔλͱͯ͠ѻ͏ ͜ͱͰɺ ಛఆͷܕʹґଘ͠ͳ͍࣮͕ՄೳʹͳΔ ϓϩάϥ ϛϯάख๏ w 5ZQF4DSJQUʹ͓͍ͯArray<T>Promise<T>ͳΒຖ͍ͬͯΔͣ δΣωϦ οΫ
ɾ ϓϩάϥϛϯά
w 0QUJPO&JUIFSͱ͍ͬͨؔܕݴޠ )BTLFMM 4DBMBͳͲ ͷٕज़Λഈआ w 0QUJPOͱ ʮ͕͋Δ͔ແ͍͔Λද͢ܕʯ w
&JUIFSͱ ʮͭͷ͏ ͪͲͪΒ͔Λද͢ܕʯ ؔܕ ɾ δΣωϦ οΫΛΈ߹Θͤͯ
w ௐࢠʹ͍͖ͬͯͳΓ ʮϞφ υΔͧʔʯ ͱ͔ݴ͍ग़ͤେମҾ͔ΕΔ w ؔܕݴޠ͕ԿΛࠀ͘͢0QUJPO&JUIFSΛ࣮͍ͯ͠Δͷ͔Λཧղ͢Δ w ྫ͑getOrElse()ͷߟ͑ํͳͲೲಘ͞Ε͘͢ಋೖ͍͢͠ ։ൃνʔϜͷཧղΛಘΔ
w ٸͳ༷มߋͰɺ 5ZQF4DSJQUͷܕ͚͚ͩͰݫ͍͠Օॴ͕Ͱ͖ͯͨͱ͖ w Either<A, B>ܕͰॲཧΛେ෯ʹม͑ͣʹରԠͰ͖ͳ͍ͩΖ͏͔ w 5ZQF4DSJQUʹstrictNullChecks͕͋Δ͕ສશͰͳ͍ w JGจΛڧཁͯ͘͠
Δ͋ͨΓ w undefined, nullରࡦͷΞϓϩʔνͱͯ͠ࣄΛ͓ͬͯ͘ ͱΑ͍ ٸసʹඋ͑Δ
ϑϩϯ τΤϯ υ ɾ ΤϯδχΞͷ ଞݴޠͱͷ͖߹͍ํ
wʮϑϩϯ τΤϯ υ ɾ ΤϯδχΞ͔ͩΒ+BWB4DSJQU 5ZQF4DSJQUֶͳ͘ ͪΌʜʯ wʮ)5.-$44Βͳ͍ͱʜʯ
w ͪΖΜͦΕେࣄ w ҰํͰɺ ΤϯδχΞͱͯ͠ͷࢹΛ͛Δ͜ͱେࣄ ϑϩϯ τΤϯ υ ɾ ΤϯδχΞͱ ͯ͠
wʮ͜ͷݴޠͰ+4Ͱى͜ Γ͕ͪͳΛ͜͏ͬͯղܾͯ͠Δͷ͔ʯ w ˠ+4ͰࣅͨΑ ͏ͳΞϓϩʔνͰղܾ͍ͯ͠ΔϥΠ ϒϥ Ϧ͕͋Δ ʂ
wʮ࠷৽ͷݴޠʹ͋ͬͨ˓˓ߏจɺ +4ʹཉ͍͠ͳʔʯ w ˠ5$ͷϓϩϙʔβϧʹ͏ग़ͯΔ ʂ w ͱ͍ͬͨɺ +BWB4DSJQUք۾ΩϟονΞοϓʹ͓͚ΔΞϯςφͷຊ͕૿͑ ൃݟ͕༰қʹͳΓɺ ڻ͔ͳ͘ ͯࡁΉ ଞݴޠֶशͷར
w ΩϟονΞοϓͷযΓɺ ྲྀߦϥΠ ϒϥ Ϧͷܯռɺ ϑ ϨʔϜϫʔΫϓϩϨεͷউഊʜ w ͜Εࠣࡉͳ͜ͱ w
߄ͯΔ͜ͱͳ͍ w ຊ࣭తͳղܾखஈԿͳͷ͔Λߟ͑Δ w ྺ࢙ʹֶͿ w ύϥμΠϜʹֶͿ ߄ͯͳ͍ͨΊʹ
5IBOLZPV