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
SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hiromi Hishida
December 11, 2020
Programming
4
2.9k
SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する
PHPカンファレンス2020 前夜祭にて発表
Hiromi Hishida
December 11, 2020
Tweet
Share
More Decks by Hiromi Hishida
See All by Hiromi Hishida
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
1.1k
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
410
エンジニアのための 法規制への取り組み方 #healthtechmeetup
77web
8
2.7k
サービスクラスのありがたみを発見したときの思い出 #phpcon_odawara
77web
7
1.4k
「それはhowなんよ〜」のガイドライン #orestudy
77web
8
3.2k
空が堕ち、大地が割れ、海が涸れた日~もしも愛用しているフレームワークが開発停止したら?~ #phperkaigi 2025
77web
2
1.8k
Beyond ORM
77web
11
2.5k
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
9
8.8k
DoctrineとPostgreSQLの便利な機能、どっちも諦めたくない!
77web
0
330
Other Decks in Programming
See All in Programming
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
160
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
120
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
510
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
1.4k
CSC307 Lecture 04
javiergs
PRO
0
650
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.7k
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.1k
Data-Centric Kaggle
isax1015
2
730
CSC307 Lecture 06
javiergs
PRO
0
680
Python札幌 LT資料
t3tra
7
1.1k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.4k
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
60
Skip the Path - Find Your Career Trail
mkilby
0
51
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
100
The Spectacular Lies of Maps
axbom
PRO
1
490
Ethics towards AI in product and experience design
skipperchong
2
190
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
88
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
Joys of Absence: A Defence of Solitary Play
codingconduct
1
280
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
BBQ
matthewcrist
89
10k
Scaling GitHub
holman
464
140k
Transcript
CZ!XFCUI%FD BU1)1$POGFSFODF 41"ͷ"1*։ൃͷΓͮΒ͞Λ%%% ͱΦϒδΣΫτࢦͷൃͰղܾ͢Δ
w ϑϦʔϥϯεˠΧϧςοτίϛϡχ έʔγϣϯζ։ൃ෦ɺݱࡏόοΫΤ ϯυϦʔυΤϯδχΞ w ຊ4ZNGPOZϢʔβʔձʢ։ళٳ ۀঢ়ଶʜʣ w ʮਓʹΘΕΔγεςϜʯΛ࡞Γͨ ͯ͘ɺϝϯςφϏϦςΟͷߴ͍։ൃ
Λࢦͯ͠νʔϜϝϯόʔͱҰॹʹ ʑฃಆதʂ w NPUIFSPG
ର w 41"ͷ"1* w TFSWFSUPTFSWFSͷ"1*ݪଇͱͯ͠είʔϓ֎Ͱ͕͢ɺࢀߟʹͰ͖Δ෦ ͋Δ͔͠Ε·ͤΜ
ݹ͖ྑ͖ϑϩϯτΤϯυ։ൃ QIQ PO$MJDLlʜz ʢಉ͡ਓ͕Δʣ
ݱͷϑϩϯτΤϯυ։ൃ <?php @Component({}) export class MyComponent extends OnInit {...} ʢҧ͏ਓ͕Δʣ
ݹ͖ྑ͖"1*։ൃ w TFSWFSUPTFSWFSࣗࣾͷσʔλΛଞࣾʢύʔτφʔʣʹެ։͢Δ w "NB[POΞιγΤΠτ8FCαʔϏεʢݱࡏͷ1SPEVDU"EWFSUJTJOH"1*ʣ w (PPHMF.BQT"1* w (PPHMFࠂ"1* :BIPPࠂ"1*ͳͲ
w ʮݹ͖ྑ͖ʯͱॻ͖·͕ͨ͠ݱࡏͰͪΖΜੜ͖͍ͯ·͢
ݱͷ"1*։ൃ w TFSWFSUPCSPXTFSPSTFSWFSUPNPCJMFBQQࣗࣾͷσʔλΛࣗࣾͷ41"ʢϑ ϩϯτΤϯυʣʹҾ͖͢ w ݹ͖ྑ͖"1*։ൃʹͳ͍ಛघੑ͕͋Δ
41"ͷ"1*։ൃͷಛघੑ w "1*Λ࡞ΔਓͱϑϩϯτΤϯυΛ࡞Δਓʢʹ"1*Λ͏ਓʣ͕ಉ͡৫ʹଐ͠ ͓ͯΓɺ྆ऀͷࣄΛ౷߹ͯͭ͠ͷγεςϜΛ࡞Ζ͏ͱ͍ͯ͠Δ͜ͱ w ͱ͍͑ɺݱͰେاۀɾ࣏ࣗମʢΦʔϓϯσʔλʣҎ֎ͷେ ͷ։ൃऀͷߦ͏"1*։ൃ41"ͷ"1*։ൃͳͷͰɺಛघੑͰͳͦ͘ Ε͕ී௨ʁ
41"ͷ"1*։ൃͷΓͮΒ͞ w ϩδοΫͷॏෳ w τϥϯβΫγϣϯͰ͖ͳ͍ w ͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁʂ w O
ϩδοΫͷॏෳ w όοΫΤϯυͱϑϩϯτΤϯυͷ྆ํʹಉ͡ϩδοΫ͕ݱΕΔ
ϩδοΫͷॏෳ
ϩδοΫͷॏෳ (&5BQJJUFNT 0, \ lOBNFzzQIQDPOεςοΧʔz lQSJDFz ^ MFUQSJDFEBUBQSJDF
QSJDFQSJDF
ϩδοΫͷॏෳ w όοΫΤϯυʹଘࡏ͢ΔϩδοΫόοΫΤϯυଆͰӅṭ͢Δ w ϑϩϯτΤϯυϑϩϯτΤϯυͷؔ৺ࣄʹ͍͠ w Ξχϝʔγϣϯ w Ϋϩεϒϥβ w
69
ϩδοΫͷॏෳ (&5BQJJUFNT 0, \ lOBNFzzQIQDPOεςοΧʔz lOFUQSJDFz lUBYz
lQSJDFz ^ MFUQSJDFEBUBQSJDF QSJDFOFUQSJDF
τϥϯβΫγϣϯͰ͖ͳ͍ w αʔόʔଆͷঢ়ଶ͕มԽ͢ΔͷΛࢭΊΒΕͳ͍
τϥϯβΫγϣϯͰ͖ͳ͍
τϥϯβΫγϣϯͰ͖ͳ͍ (&5BQJJUFNT 0, \ lTUPDLz ^ 1045BQJPSEFS 0, \ lJEz
^ 1045BQJPSEFSJUFN
τϥϯβΫγϣϯͰ͖ͳ͍ (&5BQJJUFNT 0, \ lTUPDLz ^ 1045BQJPSEFS 0, \ lJEz
^ 1045BQJPSEFSJUFN ࡏݿΕൃੜʂ
τϥϯβΫγϣϯͰ͖ͳ͍ w UFMMEPO`UBTLʮίʔώʔͪΐ͏͍ͩʂʯ w ϩδοΫͷӅṭͷҰछͰ͋Δʢ0SEFSIBT.BOZ0SEFS*UFNTͰ͋Δ͜ͱ ΛϑϩϯτΤϯυΒͳͯ͘ྑ͍ʣ w τϥϯβΫγϣϯαʔόʔͰߦ͏͜ͱ͕Ͱ͖Δ
τϥϯβΫγϣϯͰ͖ͳ͍ 1045BQJPSEFS\lJUFN@JETz<>^ ࡏݿ͕͋Ε͕ؼͬͯ͘Δ͕ɺͳ͚ΕͱͳΔ
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ w ಉ͡Α͏ͳσʔλΛ͏͔Βͱ"1*Λ͋ͪͪ͜Ͱ͍·Θͨ݁͠ՌɺཁΒͳ͘ ͳͬͨ"1*Λআͨͯ͘͠ଞͷ෦ʹӨڹ͕ग़ͦ͏ͰআͰ͖ͳ͍
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ (&5BQJBSUJDMFT MJNJUP⒎TFU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^
> (&5BQJBSUJDMFT MJNJU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^ >
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ (&5BQJBSUJDMFT MJNJUP⒎TFU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^
> (&5BQJBSUJDMFT MJNJU 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^ > QBHFʹ͍͚ͨ͠ͲͰ͖ͳ͍ ΘΕͳ͍CPEZσʔλΛ͍࣋ͬͯΔ
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ w "1*431ʹ͠Α͏ w ϑϩϯτΤϯυ͔Βݟͯผͷ༻్ͳΒ"1*ผʹ͢Δ w ͪΖΜόοΫΤϯυͰϩδοΫ͕ڞ௨ͷ෦·ͱΊΕྑ͍
͜ͷ"1*ɺଞʹͲ͜ͰΘΕ͍͚ͯͨͬʁ (&5BQJBSUJDMFT QBHF 0, < \lUJUMFzzBBBz zCPEZzzBBBz^ \lUJUMFzzCCCz zCPEZzzCCCz^
> (&5BQJMBUFTU@BSUJDMFT 0, < \lUJUMFzzBBBz^ \lUJUMFzzCCCz^ >
O w αʔόʔαΠυͰҰରଟͷϦϨʔγϣϯΛ࣋ͭΦϒδΣΫτΛऔಘ͠Α͏ͱ͠ ͯɺO ճͷϦΫΤετΛൃߦͯ͠͠·͏
O
O (&5BQJDBUFHPSJFT 0, < \lOBNFzz1)1z^ \lOBNFzz4ZNGPOZz^ > (&5BQJBSUJDMFT@DPVOU
DBUFHPSZ1)1 0, \ lDPVOUz ^ (&5BQJBSUJDMFT@DPVOU DBUFHPSZ4ZNGPOZ 0, \ lDPVOUz ^ ʢOճϦΫΤετʣ
O w O ΛղܾͰ͖ΔϨΠϠʔʢ42-ʣʹͤΔ w ܗ͕มΘΔͷͰɺผͷ໊લΛ͚ͭΔ w 2ͦΜͳ͜ͱ͍͍ͯ͠ͷʁϢʔβʔͷϝϯλϧϞσϧͱ߹Θͳ͍Μ͡Όͳ ͍ʁ
w "1*ͷϢʔβʔϑϩϯτΤϯυ͔ͩΒɺϑϩϯτΤϯυͷϝϯλϧϞσϧ ͱ%4-ʢ"1*ͷ63- ύϥϝʔλ ϨεϙϯεʣΛ߹ΘͤΑ͏
O (&5BQJDBUFHPSZ@XJUI@BSUJDMFT@DPVOU 0, < \lOBNFzz1)1z zBSUJDMFT@DPVOUz^ \lOBNFzz4ZNGPOZz zBSUJDMFT@DPVOUz^
>
༨ஊղܾυϝΠϯͱυϝΠϯͱϝϯλϧϞσϧ w ϑϩϯτΤϯυղܾυϝΠϯɺόοΫΤϯυղܾυϝΠϯɺۀυ ϝΠϯ w υϝΠϯۦಈઃܭͷରͱͳΔͷυϝΠϯ͚ͩͰͳ͍ w ࠷ऴϢʔβʔͷϝϯλϧϞσϧͱҰக͢Δ࣮Λ͍ͯͯ͠%#ਖ਼نԽͳΜͯ ͍ͭ·ͰܦͬͯͰ͖·ͤΜ w
ϢʔβʔͷϝϯλϧϞσϧʹҰகͤ͞Δ͖%4-
QIQ @Component({}) export class MyComponent extends OnInit {...} "1*
#*; 6*69
UIBOLZPV