Submit Search
Upload
Laravelでfacadeを使わない開発
•
2 likes
•
7,453 views
K
Kenjiro Kubota
Follow
since 2017/06/23
Read less
Read more
Software
Report
Share
Report
Share
1 of 37
Download now
Download to read offline
Recommended
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
Shohei Okada
例外設計における大罪
例外設計における大罪
Takuto Wada
Docker friendlyPHP / Laravel
Docker friendlyPHP / Laravel
Kentarou Takeda
Recommended
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
Shohei Okada
例外設計における大罪
例外設計における大罪
Takuto Wada
Docker friendlyPHP / Laravel
Docker friendlyPHP / Laravel
Kentarou Takeda
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Yuta Hiroto
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
Takahiro YAMADA
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
Oracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみる
オラクルエンジニア通信
Goの時刻に関するテスト
Goの時刻に関するテスト
Kentaro Kawano
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
Shohei Okada
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
leverages_event
More Related Content
What's hot
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Yuta Hiroto
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
Takahiro YAMADA
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
Oracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみる
オラクルエンジニア通信
Goの時刻に関するテスト
Goの時刻に関するテスト
Kentaro Kawano
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
What's hot
(20)
Redisの特徴と活用方法について
Redisの特徴と活用方法について
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
Docker Tokyo
Docker Tokyo
脱RESTful API設計の提案
脱RESTful API設計の提案
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
Kotlinアンチパターン
Kotlinアンチパターン
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Docker Compose 徹底解説
Docker Compose 徹底解説
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Oracle Database (CDB) on Docker を動かしてみる
Oracle Database (CDB) on Docker を動かしてみる
Goの時刻に関するテスト
Goの時刻に関するテスト
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Similar to Laravelでfacadeを使わない開発
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
Shohei Okada
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
leverages_event
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
転職とLaravel
転職とLaravel
kasikasikasi
NanoA
NanoA
Kazuho Oku
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
アシアル株式会社
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
Windows Windows上に作るチーム開発環境
Windows Windows上に作るチーム開発環境
Tadahiro Ishisaka
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
Tatsuyoshi Mashiko
phpcon2013_zf
phpcon2013_zf
sasezaki
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
Web技術勉強会 第33回
Web技術勉強会 第33回
龍一 田中
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Shohei Okada
Groovyコンファレンス
Groovyコンファレンス
Shinichiro Takezaki
laravel x モバイルアプリ
laravel x モバイルアプリ
Masaki Oshikawa
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
Yuuki Takezawa
From Java To Clojure
From Java To Clojure
Kent Ohashi
3 tips of Laravel
3 tips of Laravel
Kazuaki KURIU
Similar to Laravelでfacadeを使わない開発
(20)
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
ATN No.2 Scala事始め
ATN No.2 Scala事始め
転職とLaravel
転職とLaravel
NanoA
NanoA
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Windows Windows上に作るチーム開発環境
Windows Windows上に作るチーム開発環境
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
phpcon2013_zf
phpcon2013_zf
Scalaで型クラス入門
Scalaで型クラス入門
Web技術勉強会 第33回
Web技術勉強会 第33回
Inside frogc in Dart
Inside frogc in Dart
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Groovyコンファレンス
Groovyコンファレンス
laravel x モバイルアプリ
laravel x モバイルアプリ
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
From Java To Clojure
From Java To Clojure
3 tips of Laravel
3 tips of Laravel
More from Kenjiro Kubota
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
Kenjiro Kubota
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
Kenjiro Kubota
gRPC入門
gRPC入門
Kenjiro Kubota
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
Kenjiro Kubota
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
Kenjiro Kubota
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
Kenjiro Kubota
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
Kenjiro Kubota
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
Kenjiro Kubota
introducing vue-wait-component
introducing vue-wait-component
Kenjiro Kubota
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
Kenjiro Kubota
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
Kenjiro Kubota
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
Kenjiro Kubota
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
Kenjiro Kubota
Introducing hhvm hack-async
Introducing hhvm hack-async
Kenjiro Kubota
Responsableを使ったadr実装
Responsableを使ったadr実装
Kenjiro Kubota
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
Kenjiro Kubota
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
Kenjiro Kubota
Laravel aspectで関心の分離
Laravel aspectで関心の分離
Kenjiro Kubota
More from Kenjiro Kubota
(19)
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
gRPC入門
gRPC入門
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
introducing vue-wait-component
introducing vue-wait-component
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
Introducing hhvm hack-async
Introducing hhvm hack-async
Responsableを使ったadr実装
Responsableを使ったadr実装
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
Laravel aspectで関心の分離
Laravel aspectで関心の分離
Laravelでfacadeを使わない開発
1.
LaravelでFacadeを使わない開発 kenjiro kubota 2017/06/23
2.
Profile Kenjiro Kubota istyle.inc PHP, HHVM/Hack, Javascript DTPDesigner WebDesigner FrontEnginner WebApplicationEngiiner﴾now﴿
3.
みなさんLaravel使ってますか?
4.
Facade使ってますか?
5.
LaravelにおけるFacadeとは Facadeはサービスコンテナで利用可能なクラスへの ''static'' イ ンタフェースを提供 Facadeはサービスコンテナからオブジェクトへのアクセスを 提供するクラス デザインパターンのファサードパターンのことではありません。
6.
こういうやつです Route::get(); Input::get();
7.
スタティックでどこからでも呼び出せる
8.
めっちゃ便利
9.
そう思っていた時期が私にもありました
10.
しかし複数人で開発していく上で 弊害になることも・・・
11.
例えば @if (Input::has('hoge')) <p>hogeがあるよ</p> @endif Viewテンプレートでリクエストパラメータ値を評価したり ﴾これはまだましかも﴿
12.
とか class hogeController extend Controller { public function insertHoge(): int { return DB::table('hoge') ‐>insertGetId(['fuga' => 'piyo']); } } コントローラーでデータアクセス層が出てきたり
13.
最悪なのが class UserStorage { public function insert(array $array): bool { $hoge = Input::get('hoge'); ... } } 逆にデータアクセス層でHttpリクエストを取得していたり
14.
たとえしっかり設計していても どこでも呼べてしまうFacadeに汚染される可能性がある
15.
破綻の日は近いぞ
16.
というわけで、Facadeをあえて封印して開発してみよう
17.
まずはエイリアスを消してしまおう config/app.php 'aliases' => [ 'App' => IlluminateSupportFacadesApp::class, 'Artisan' => IlluminateSupportFacadesArtisan::class, 'Auth' => IlluminateSupportFacadesAuth::class, 'Blade' => IlluminateSupportFacadesBlade::class, ~~~ ],
18.
次は元から絶ってしまおう bootstrap/app.php $app‐>singleton( IlluminateContractsHttpKernel::class, AppHttpKernel::class ); $app‐>singleton( IlluminateContractsConsoleKernel::class, AppConsoleKernel::class );
19.
AppHttpKernel::class が継承してる use IlluminateFoundationHttpKernel as HttpKernel; protected $bootstrappers = [ IlluminateFoundationBootstrapLoadEnvironmentVariables::class IlluminateFoundationBootstrapLoadConfiguration::class, IlluminateFoundationBootstrapHandleExceptions::class, IlluminateFoundationBootstrapRegisterFacades::class, IlluminateFoundationBootstrapRegisterProviders::class, IlluminateFoundationBootstrapBootProviders::class, ]; RegisterFacades を消したいので↑をコピーして
20.
AppHttpKernel::class protected $bootstrappers = [ IlluminateFoundationBootstrapLoadEnvironmentVariables::class IlluminateFoundationBootstrapLoadConfiguration::class, IlluminateFoundationBootstrapHandleExceptions::class, IlluminateFoundationBootstrapRegisterProviders::class, IlluminateFoundationBootstrapBootProviders::class, ]; RegisterFacades をなかったことにしてオーバーライド ※Consoleも同様に
21.
もうこのLaravelからFacadeは呼べなくなりました
22.
...あれ? Facadeが使えないとAuthとかSessionとかどうするの?
23.
実体をそのまま呼び出せばOK
24.
Auth::なら use IlluminateAuthAuthManager; public function __construct(AuthManager $authManager) { $this‐>auth = $authManager‐>guard('web'); }
25.
Session::なら use IlluminateSessionSessionManager; public function __construct(SessionManager $sessionManager) { $this‐>session = $sessionManager‐>driver('memcached'); }
26.
Input::は use IlluminateHttpRequest; public function __invoke(Request $request) { $input = $request‐>all(); }
27.
Log::は特に簡単 use PsrLogLoggerInterface; public function __construct(LoggerInterface $logger) { $this‐>logger = $logger; } PSR‐3のLoggerInterfaceにIlluminateLogWriter﴾Monolog﴿がバインドさ れているのでコンストラクタインジェクションで入る
28.
簡単ですね
29.
依存しているものはuseを見ればわかる ‐> 破綻しにくい
30.
実はちょっと落とし穴が...
31.
database/migrations/2014_10_12_000000_create_users_table.php use IlluminateSupportFacadesSchema; ... public function up() { Schema::create('users', function (Blueprint $table) { $table‐>increments('id'); $table‐>string('name'); $table‐>string('email')‐>unique(); $table‐>string('password'); $table‐>rememberToken(); $table‐>timestamps(); }); }
32.
LaravelのデフォルトのマイグレーションでFacadeを使ってるの に $bootstrappers から消し去ったので動かなくなります
33.
こういうtraitを用意して trait Helper { /** * @return IlluminateDatabaseSchemaBuilder */ protected function getSchemeBuilder() { return app('db')‐>connection($this‐>getConnection()) ‐>getSchemaBuilder(); } }
34.
こんな感じでやればOKです public function up() { $this‐>getSchemeBuilder() ‐>create('users', function (Blueprint $table) { $table‐>increments('id'); }); } 拙作のリポジトリで参考が置いてあるのでパクってください。 https://github.com/kubotak‐is/laravel‐web‐site‐boilerplate
35.
app/Providers/AuthServiceProvider.php も死ぬ app/Providers/BroadcastServiceProvider.php も死ぬ app/Providers/EventServiceProvider.php も死ぬ これらは継承元のServiceProviderでFacadeを使っているので各親 を継承しないようにして自前で書いてください。 これも拙作のリポジトリで参考が置いてあるのでパクってください。 https://github.com/kubotak‐is/laravel‐web‐site‐boilerplate
36.
まとめ LaravelのFacadeは便利だけど多様すると見通しが悪い Facadeを使わなくても特に困らない とはいえ便利なので小規模なアプリや個人的に使う分には良 いのでは 余談ですが弊社にはFacade警察が居るのでFacadeを使うとレ ビューで煽られます
37.
おわり
Download now