Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
抽象化という思考のツール - 開発現場での活用 - / Abstraction-as-a-To...
Search
shin1x1
September 11, 2025
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
抽象化という思考のツール - 開発現場での活用 - / Abstraction-as-a-Tool-for-Thinking-in-dev
2025-09-09 PHPカンファレンス関西 アフターパーティー in スマレジ
shin1x1
September 11, 2025
More Decks by shin1x1
See All by shin1x1
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
750
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
1.6k
php-fpm がリクエスト処理する仕組みを追う / Tracing-How-php-fpm-Handles-Requests
shin1x1
6
4.2k
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
2.5k
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
2
3.4k
制約の力 - 状態を限定する -
shin1x1
6
5.9k
Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev-env-on-m1-mac-era
shin1x1
2
4.9k
Docker イメージのマルチアーキテクチャビルド / docker-muti-arch-build
shin1x1
1
590
Domain modeling with PHP / domain-modeling-with-php-en
shin1x1
1
360
Other Decks in Programming
See All in Programming
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.5k
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
170
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
4.8k
AI-Powered Domain-Driven Design
ziobrando
0
340
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
230
R8 の設定見直しでアプリサイズ削減
andpad
0
230
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
120
最近”作らせてる” ローカルAIアプリの話
akit37
0
500
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
160
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
130
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.3k
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
220
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
610
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Leo the Paperboy
mayatellez
10
2.4k
Between Models and Reality
mayunak
4
520
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Paper Plane
katiecoart
PRO
5
54k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
560
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
470
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
440
Transcript
நԽͱ͍͏ࢥߟͷπʔϧ ։ൃݱͰͷ׆༻ 1)1ΧϯϑΝϨϯεؔΞϑλʔύʔςΟʔJOεϚϨδ !TIJOY
D .BTBTIJ4IJOCBSB!TIJOY !TIJOY ৽ݪʢ͠ΜΒʣխ࢘ େࡕͰ8FCγεςϜ։ൃٕज़αϙʔτΛߦ͍ͬͯ·͢ɻ wCMPH IUUQTCMPHTIJOYDPN w1PEDBTU1)1ͷݱ IUUQTQIQHFOCBTIJOYDPN
D .BTBTIJ4IJOCBSB!TIJOY ͡Ίʹ 👉͜ͷࢿྉެ։͠·͢ɻ 👉நԽʹؔ͢ΔࢲͳΓͷߟ͑ํΛ͝հ͠·͢ɻ ͜͏͍͏ߟ͑ํ͋Δͷͩͳͱฉ͍͍ͯͩ͘͞ɻ 👉ײɺϑΟʔυόοΫ͓͍ͪͯ͠·͢ʂ 9Ͱɺ࠙ձͰʂ ͡Ίʹ
D .BTBTIJ4IJOCBSB!TIJOY "HFOEB w நԽͱ w ׆༻શମ૾ΛݟΔ w ׆༻)PX͔Β8IBU8IZ w
׆༻ίʔυͷநΛἧ͑Δ
D .BTBTIJ4IJOCBSB!TIJOY IUUQTTQFBLFSEFDLDPNTIJOYBCTUSBDUJPOBTBUPPMGPSUIJOLJOH
D .BTBTIJ4IJOCBSB!TIJOY நԽͱ
D .BTBTIJ4IJOCBSB!TIJOY நԽͱ w ந நԽͰ࡞ΒΕͨ֓೦ʢநԽͱ͍͏ߦҝʹ͏έʔε͋Δʣ w ࣺ ର͔ΒෆཁͳཁૉΛࣺͯΔ͜ͱɺࣺͯͨͷ ରʢ۩ମʣ͔Βຊ࣭తʹॏཁͳཁૉΛऔΓग़ͯ͠
Ұͭͷ֓೦ͱͯ͠ఆٛ͢Δ͜ͱ
D .BTBTIJ4IJOCBSB!TIJOY நԽྫ TIJOY w ࢯ໊ w ੜ݄ʢྸʣ w ݂ӷܕ
w ॅॴ w ϝʔϧΞυϨε w ࡕਆϑΝϯ w ສതճߦͬͨ w ͳͲ
D .BTBTIJ4IJOCBSB!TIJOY நԽྫ TIJOY w ࢯ໊ w ੜ݄ʢྸʣ w ݂ӷܕ
w ॅॴ w ϝʔϧΞυϨε w ࡕਆϑΝϯ w ສതճߦͬͨ w ͳͲ จ຺ษڧձࢀՃ จ຺ʹଈͨ͠ந w DPOQBTTϢʔβ໊ w ϝʔϧΞυϨε
D .BTBTIJ4IJOCBSB!TIJOY நԽྫ TIJOY w ࢯ໊ w ੜ݄ʢྸʣ w ݂ӷܕ
w ॅॴ w ϝʔϧΞυϨε w ࡕਆϑΝϯ w ສതճߦͬͨ w ͳͲ จ຺ݙ݂ w ࢯ໊ w ݂ӷܕ w ݙ݂ཤྺ w ମॏ w ମԹ w ͳͲ จ຺ʹଈͨ͠ந
D .BTBTIJ4IJOCBSB!TIJOY நԽͷϝϦοτ w ຊ࣭తʢจ຺ʹదͨ͠ʣͳใͷΈʹूதͰ͖Δɻ w ใΛݮΒͤΔͷͰɺཧղ͘͢͠ͳΔɻ w จ຺ʹదͨ͠۩ମΛݟ͚ͭ͘͢ͳΔɻ
D .BTBTIJ4IJOCBSB!TIJOY நʢநϨϕϧʣ w நநͷ߹͍Λࣔ͢ͷɻ ந͕ߴ͍ΑΓߴ࣍ͷந w நʹจ຺ʢ࣠ʣ͕͋Δɻ w நͱ۩ମ૬ରతɻ
͋ΔநΑΓߴ࣍ͷந͔Β۩ମ w ந͕ἧ͍ͬͯΔɺฒΜͰ͍Δͱཧղ͍͢͠ɻ
D .BTBTIJ4IJOCBSB!TIJOY நྫษڧձࢀՃจ຺ εϚϨδษڧձࢀՃऀ ษڧձࢀՃऀ ந͕ߴ͍ ʢநతʣ ந͕͍ ʢ۩ମతʣ TIJOY
D .BTBTIJ4IJOCBSB!TIJOY நྫݙ݂จ຺ N-ݙ݂ऀ ݙ݂ऀ ந͕ߴ͍ ʢநతʣ ந͕͍ ʢ۩ମతʣ TIJOY
D .BTBTIJ4IJOCBSB!TIJOY நྫϘϥϯςΟΞจ຺ N-ݙ݂ऀ ݙ݂ऀ ந͕ߴ͍ ʢநతʣ ந͕͍ ʢ۩ମతʣ TIJOY
ϘϥϯςΟΞ ৽ͨͳࢹ
D .BTBTIJ4IJOCBSB!TIJOY ׆༻શମ૾ʢਤʣΛ࡞Δ
D .BTBTIJ4IJOCBSB!TIJOY શମ૾ͱ͍͏ந w ͋ΔࣄͷશମతͳΠϝʔδΛࣔͨ͠ͷɻ w ཁૉΛจ຺ʹԠͯ͡நԽͯ͠ஔ͢Δͷ͕ॏཁɻ w ඞཁͳใʹߜΔͷͰશମΛཧղ͍͢͠ɻ w
ࢥߟͷਤʹͳΔʢ၆ᛌͰ͖Δʣɻ
D .BTBTIJ4IJOCBSB!TIJOY શମ૾ྫγεςϜߏਤ $%/ -# 8FCαʔό OHJOY QIQGQN 8FCαʔό OHJOY
QIQGQN %#
D .BTBTIJ4IJOCBSB!TIJOY શମ૾ྫγεςϜߏਤ $%/ -# 8FCαʔό OHJOY QIQGQN 8FCαʔό OHJOY
QIQGQN %#
D .BTBTIJ4IJOCBSB!TIJOY શମ૾ྫද 42-จ ΫΤϦϏϧμʔ "DUJWF3FDPSE ίʔυྔ ଟ͍ தؒ গͳ͍
ࣗ༝ ߴ͍ தؒ ͍ ηΩϡϦςΟ ҙ͕ඞཁ தؒ ߴ͍
D .BTBTIJ4IJOCBSB!TIJOY શମ૾Λ࡞Δ w ·ͣ࠷ॳ͔Β࠷ޙ·ͰͷྲྀΕΛߥ͘ॻ͍ͯΈΔ w ͔Βͳ͍ͱ͜Ζɺฉ͘PSௐΔ w νʔϜͰҰॹʹ࡞ͬͯΈΔʢϫʔΫγϣοϓʣ
D .BTBTIJ4IJOCBSB!TIJOY FYγεςϜશମ૾ ཧγεςϜ ొ ൃૹॲཧ ߪೖϢʔβ "ࣾ୲ &$αΠτ ߪೖ
%#
D .BTBTIJ4IJOCBSB!TIJOY ׆༻)PX͔Β8IBU8IZ
D .BTBTIJ4IJOCBSB!TIJOY )PX۩ମɺ8IBU8IZந w )PXΛநԽͯ͠8IBU8IZΛΔɺݟΔɻ w )PX͕ଥ͔8IBU8IZʹΑͬͯมΘΔɻ w ຊ࣭ΛΔ͜ͱͰΑΓޮՌతͳ)PXΛબΔɻ
D .BTBTIJ4IJOCBSB!TIJOY )PX͔Β8IBU8IZྫ )PX1)1ίʔυΛ͘͢Δ
D .BTBTIJ4IJOCBSB!TIJOY )PX͔Β8IBU8IZྫ )PX1)1ίʔυΛ͘͢Δ 8IBUγεςϜΛ͘͢Δ
D .BTBTIJ4IJOCBSB!TIJOY )PX͔Β8IBU8IZྫ 8IBUγεςϜΛ͘͢Δ )PX$%/ͰΩϟογϡ͢Δ )PX%#ΫΤϦΛվળ͢Δ )PX1)1ίʔυΛ͘͢Δ
D .BTBTIJ4IJOCBSB!TIJOY )PX͔Β8IBU8IZྫ )PX8IBUγεςϜΛ͘͢Δ )PX$%/ͰΩϟογϡ͢Δ )PX%#ΫΤϦΛվળ͢Δ )PX1)1ίʔυΛ͘͢Δ 8IZγεςϜ͕͘ͳ͖ͬͯͨͨΊʹམͪͨ࡞ۀޮΛվળ͍ͨ͠ɻ
D .BTBTIJ4IJOCBSB!TIJOY )PX8IBU૬ରత w ͋Δ)PXʹର͢Δ8IBUɺ্Ґͷ)PXʹͳΔɻ w )PXԼҐʹର͢Δ8IBUʹͳΓಘΔɻ w )PXPS8IBUΑΓநΛม͑ͯཧղΛਂΊΔɺ͛ Δ͜ͱ͕େࣄɻ
D .BTBTIJ4IJOCBSB!TIJOY ׆༻நΛἧ͑Δ
D .BTBTIJ4IJOCBSB!TIJOY ίʔυʹ͓͚Δந w ॲཧରͷநʢ಄ࢿྉࢀরʣ ίϯϐϡʔλจ຺ͰߴϨΠϠந͕ߴ͍4-"1 w ཻ࣮ʹΑΔந ཻ࣮͕ߥ͍ந͕ߴ͍$PNQPTFE.FUIPE
D .BTBTIJ4IJOCBSB!TIJOY ཻ࣮ͷநΛཧ͢Δ w ந͕ߴ͍ίʔυશମΛཧղ͍͢͠ɻ w ந͕͍ίʔυ࣮ࡍͷڍಈ͕ཧղ͍͢͠ɻ w QVCMJDϝιουෳࡶͳϝιουநΛ্͛Δɻ w
QSJWBUFϝιουநΛԼ͛Δɻ
D .BTBTIJ4IJOCBSB!TIJOY $PNQPTFE.FUIPE w ϝιουίʔυͷநʢৄࡉʣΛཧ͢Δύλʔϯɻ w QVCMJDϝιου࣮ߦखॱͷΈΛॻ͘ɻ w QSJWBUFϝιουʹॲཧৄࡉΛॻ͘ɻ w
݁ՌɺQVCMJDϝιουQSJWBUFϝιουͷݺͼग़͠ ͷΈʹͳΔɻ
ཻ࣮ͷந͕͍ public function register(Request $request) { $errors = []; if
(!$request->input('name')) { $errors['name'] = '໊લඞਢͰ͢'; } // snip if (!empty($errors)) { return response()->json(['errors' => $errors], 422); } $userId = DB::table('users')->insertGetId([ 'name' => $request->input('name'), 'email' => $email, // snip ]); return response()->json([ 'message' => 'ొ͕ྃ͠·ͨ͠', 'userId' => $userId, ], 201); } ༷ʑͳίʔυ͕͍ࠞͬͯͯ͡ ཧղͮ͠Β͍
✅ཻ࣮ͷந͕ߴ͍ public function register(Request $request) { $errors = $this->validateRegistration($request); if
(!empty($errors)) { return $this->validationErrorResponse($errors); } $userId = $this->createUser($request); return $this->registrationSuccessResponse($userId); } QSJWBUFϝιουݺͼग़͠ͷΈͰॲཧϑϩʔΛهड़ શମͷॲཧͷྲྀΕ͕͔Γ͍͢ɻ ʢผΫϥεʹ࣮͢Δͷ0,ʣ
✅நͷ͍ίʔυ֤ϝιουʹׂ private function validateRegistration(Request $request): array { // όϦΤʔγϣϯ }
private function validationErrorResponse(array $errors): Response { // όϦσʔγϣϯΤϥʔϨεϙϯεੜ } private function createUser(Request $request): int { // Ϣʔβอଘ } private function registrationSuccessResponse(int $userId): Response { // ਖ਼ৗϨεϙϯεੜ } ॲཧର͕ϝιου͝ͱʹ ׂ͞Ε͍ͯΔͷͰཧղ͍͢͠
D .BTBTIJ4IJOCBSB!TIJOY $MBVEF$PEFͰநΛཧ w ʮ ⚪︎⚪︎ ϝιουͷநΛἧ͑ͯʯ w நͷ͍ίʔυΛผϝιουʹׂͯ͘͠ΕΔɻ w
ରϝιουநͷߴ͍࣮ʹͳΔɻ w ίʔυΛཧղ͢ΔͨΊͷϦϑΝΫλϦϯάʹศརɻ
D .BTBTIJ4IJOCBSB!TIJOY ·ͱΊ
D .BTBTIJ4IJOCBSB!TIJOY ·ͱΊ w நԽۙͳࢥߟπʔϧ w நͰશମΛཧղ͢Δ w ҙࣝͯ͠நΛมԽͤͯ͞ݟํΛม͑Δ
D .BTBTIJ4IJOCBSB!TIJOY ࢀߟ w நԽ IUUQTLPUPCBOLKQXPSE &"#%&#"&$ w ۩ମͱந IUUQTXXXBNB[PODPKQEQ#-65/*
w ϓϩμΫςΟϒɾϓϩάϥϚ IUUQTXXXPSFJMMZDPKQCPPLT