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
抽象化という思考のツール - 開発現場での活用 - / Abstraction-as-a-To...
Search
shin1x1
September 11, 2025
Programming
0
65
抽象化という思考のツール - 開発現場での活用 - / Abstraction-as-a-Tool-for-Thinking-in-dev
2025-09-09 PHPカンファレンス関西 アフターパーティー in スマレジ
shin1x1
September 11, 2025
Tweet
Share
More Decks by shin1x1
See All by shin1x1
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
1.1k
php-fpm がリクエスト処理する仕組みを追う / Tracing-How-php-fpm-Handles-Requests
shin1x1
6
3.6k
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
2.2k
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
2
2.7k
制約の力 - 状態を限定する -
shin1x1
6
5.4k
Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev-env-on-m1-mac-era
shin1x1
2
4.8k
Docker イメージのマルチアーキテクチャビルド / docker-muti-arch-build
shin1x1
1
500
Domain modeling with PHP / domain-modeling-with-php-en
shin1x1
1
280
ドメインをモデリングしてPHPコードに落とし込む / domain-modeling-with-php8
shin1x1
15
7.3k
Other Decks in Programming
See All in Programming
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
380
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
110
AIでLINEスタンプを作ってみた
eycjur
1
230
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
310
ProxyによるWindow間RPC機構の構築
syumai
3
1.1k
Improving my own Ruby thereafter
sisshiki1969
1
160
TDD 実践ミニトーク
contour_gara
1
290
Rancher と Terraform
fufuhu
2
240
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
180
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
20
5.4k
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
機能追加とリーダー業務の類似性
rinchoku
2
1.2k
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
140
7.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Optimizing for Happiness
mojombo
379
70k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Designing Experiences People Love
moore
142
24k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Scaling GitHub
holman
463
140k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Automating Front-end Workflow
addyosmani
1370
200k
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