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
110
抽象化という思考のツール - 開発現場での活用 - / 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.2k
php-fpm がリクエスト処理する仕組みを追う / Tracing-How-php-fpm-Handles-Requests
shin1x1
6
3.7k
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
2.2k
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
2
2.9k
制約の力 - 状態を限定する -
shin1x1
6
5.5k
Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev-env-on-m1-mac-era
shin1x1
2
4.8k
Docker イメージのマルチアーキテクチャビルド / docker-muti-arch-build
shin1x1
1
510
Domain modeling with PHP / domain-modeling-with-php-en
shin1x1
1
290
ドメインをモデリングしてPHPコードに落とし込む / domain-modeling-with-php8
shin1x1
15
7.4k
Other Decks in Programming
See All in Programming
KoogではじめるAIエージェント開発
hiroaki404
1
410
AI駆動開発ライフサイクル(AI-DLC)のホワイトペーパーを解説
swxhariu5
0
450
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
220
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
130
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
130
GitHub Copilotを使いこなせ!/mastering_github_copilot!
kotakageyama
2
870
Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理
matuyuhi
0
340
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
1.6k
CSC305 Lecture 14
javiergs
PRO
0
290
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
10
2.2k
alien-signals と自作 OSS で実現する フレームワーク非依存な ロジック共通化の探求 / Exploring Framework-Agnostic Logic Sharing with alien-signals and Custom OSS
aoseyuu
3
5.9k
Kotlin + Power-Assert 言語組み込みならではのAssertion Library採用と運用ベストプラクティス by Kazuki Matsuda/Gen-AX
kazukima
0
110
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Six Lessons from altMBA
skipperchong
29
4.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
What's in a price? How to price your products and services
michaelherold
246
12k
Balancing Empowerment & Direction
lara
5
730
The Cost Of JavaScript in 2023
addyosmani
55
9.2k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Designing for humans not robots
tammielis
254
26k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Become a Pro
speakerdeck
PRO
29
5.6k
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