Submit Search
Upload
Laravelでfacadeを使わない開発
•
2 likes
•
7,426 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
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】
dcubeio
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
Recommended
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】
dcubeio
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
gree_tech
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
例外設計における大罪
例外設計における大罪
Takuto Wada
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
こわくない Git
こわくない Git
Kota Saito
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
Shohei Okada
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
leverages_event
More Related Content
What's hot
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
gree_tech
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
例外設計における大罪
例外設計における大罪
Takuto Wada
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
こわくない Git
こわくない Git
Kota Saito
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
What's hot
(20)
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
テストコードの DRY と DAMP
テストコードの DRY と DAMP
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
例外設計における大罪
例外設計における大罪
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
こわくない Git
こわくない Git
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
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