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
DIとLaravel
Search
polidog
PRO
November 23, 2018
Programming
450
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DIとLaravel
polidog
PRO
November 23, 2018
More Decks by polidog
See All by polidog
AIがコードを書く時代の ジェネレーティブプログラミング
polidog
PRO
3
1.1k
小さな開発会社を作った理由(再)
polidog
PRO
0
280
React Server ComponentsでAPI不要の開発体験
polidog
PRO
1
840
小さな開発会社が受託開発に力を入れる理由
polidog
PRO
0
530
小さな開発会社を作った理由
polidog
PRO
1
3.6k
小さな開発会社がWebサービスを作る理由
polidog
PRO
1
850
トランザクションスクリプトは何がダメなのか?
polidog
PRO
2
4k
React初心者がHooksを理解するためにコードを読んでみた
polidog
PRO
0
620
object-mapperを作ってる話
polidog
PRO
0
410
Other Decks in Programming
See All in Programming
symfony/aiとlaravel/boost
77web
0
120
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
250
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
140
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
440
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
どこまでゆるくて許されるのか
tk3fftk
0
420
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
0
1.5k
Contextとはなにか
chiroruxx
1
390
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.7k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
240
Featured
See All Featured
Scaling GitHub
holman
464
140k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
GitHub's CSS Performance
jonrohan
1033
470k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
190
The agentic SEO stack - context over prompts
schlessera
0
840
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
380
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
230
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
DIͱLaravel @polidog
ࣗݾհ • @polidog • ੩Ԭग़ • ౦ژͰSymfonyॻ͍ͯ͝൧৯͍ͯ·͢ • SymfonyϢʔβʔձͷਓ •
Symfony͖Ͱ͢
Dependency Injectionʁ
1 <?php 2 3 namespace App\Http\Controllers; 4 5 6 use
App\Executor; 7 8 class Index extends Controller 9 { 10 /** 11 * @var Executor 12 */ 13 private $executor; 14 15 /** 16 * IndexController constructor. 17 * @param Executor $executor 18 */ 19 public function __construct(Executor $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 {
ίϯϙʔωϯτؒͷґଘؔ ΛϓϩάϥϜͷιʔείʔυ ͔Βഉআ͠ɺ֎෦ͷઃఆϑΝ ΠϧͳͲͰೖͰ͖ΔΑ͏ʹ ͢ΔιϑτΣΞύλʔϯ (wikipedia)
None
ར༻͢ΔΦϒδΣΫτͷੜ ʹؔ͢ΔࣝΛอ࣋͠ͳ͍
ίϯετϥΫλͷҾͰ ґଘ͢ΔΦϒδΣΫτΛࢦఆ ͢Δ
1 <?php 2 3 namespace App\Http\Controllers; 4 5 6 use
App\Executor; 7 8 class Index extends Controller 9 { 10 /** 11 * @var Executor 12 */ 13 private $executor; 14 15 /** 16 * IndexController constructor. 17 * @param Executor $executor 18 */ 19 public function __construct(Executor $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 {
ͦͯ͠֎෦͔ΒͦͷΦϒδΣ ΫτΛͯ͠Β͏
ར༻͢ΔΦϒδΣΫτͷੜ ʹؔ͢ΔࣝΛอ࣋͠ͳ͍ࣄ
Service Container
αʔϏείϯςφͱʁ • ΦϒδΣΫτͷੜखॱͷཧ • ੜͨ͠ΦϒδΣΫτͷཧ
app()
࣮ࡍʹDIΛମݧͯ͠ΈΔ
1 <?php 2 3 namespace App\Http\Controllers; 4 5 6 use
App\Executor; 7 8 class Index extends Controller 9 { 10 /** 11 * @var Executor 12 */ 13 private $executor; 14 15 /** 16 * IndexController constructor. 17 * @param Executor $executor 18 */ 19 public function __construct(Executor $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 {
5 6 class Executor 7 { 8 /** 9 *
@var Processor 10 */ 11 private $output; 12 13 /** 14 * @var string 15 */ 16 private $name; 17 18 /** 19 * Executor constructor. 20 * @param Processor $output 21 * @param string $name 22 */ 23 public function __construct(Processor $output, string $name) 24 { 25 $this->output = $output; 26 $this->name = $name; 27 } 28 29 public function run() : string
None
5 6 class Executor 7 { 8 /** 9 *
@var Processor 10 */ 11 private $output; 12 13 /** 14 * @var string 15 */ 16 private $name; 17 18 /** 19 * Executor constructor. 20 * @param Processor $output 21 * @param string $name 22 */ 23 public function __construct(Processor $output, string $name) 24 { 25 $this->output = $output; 26 $this->name = $name; 27 } 28 29 public function run() : string
Binding Primitives https://laravel.com/docs/5.7/container
5 use App\Executor; 6 use Illuminate\Support\ServiceProvider; 7 8 class AppServiceProvider
extends ServiceProvider 9 { 10 /** 11 * Bootstrap any application services. 12 * 13 * @return void 14 */ 15 public function boot() 16 { 17 // 18 } 19 20 /** 21 * Register any application services. 22 * 23 * @return void 24 */ 25 public function register() 26 { 27 $this->app->when(Executor::class) 28 ->needs('$name') 29 ->give(config('app.name')); 30 }
Interface
5 6 use App\ExecutorInterface; 7 8 class Index extends Controller
9 { 10 /** 11 * @var ExecutorInterface 12 */ 13 private $executor; 14 15 /** 16 * Index constructor. 17 * @param ExecutorInterface $executor 18 */ 19 public function __construct(ExecutorInterface $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 { 26 return view('index', [ 27 'message' => $this->executor->run() 28 ]); 29 } 30
None
9 class AppServiceProvider extends ServiceProvider 10 { 11 /** 12
* Bootstrap any application services. 13 * 14 * @return void 15 */ 16 public function boot() 17 { 18 // 19 } 20 21 /** 22 * Register any application services. 23 * 24 * @return void 25 */ 26 public function register() 27 { 28 $this->app->bind(ExecutorInterface::class, Executor::class); 29 $this->app->when(Executor::class) 30 ->needs('$name') 31 ->give(config('app.name')); 32 } 33 }
bind?
ΦϒδΣΫτͷੜखॱΛొ ͢Δ
make?
࣮ࡍʹΦϒδΣΫτΛੜ͢ Δ
?>