SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
LaravelとMVCの先へ
Laravel Meetup Tokyo Vol.7
yuuki takezawa(ytake)
profile
• ytake(GitHub), ex_takezawa(twitter)
• java, php, node.js, RDBMS, NoSQL, VoltDB
• 最近転職しました
• phpライブラリとオレオレフレームワーク作り
• 最近はPHPSpec
Laravelエキスパート養成読本4章担当
ご興味がある方は是非お願いします
Laravel Feature
よくあげられる特徴
• 静的呼び出しなファサード (Event::fire())

による初学者にもわかりやすい記述
• ActiveRecordライクなEloquent
• Auth関連コントローラが最初から付いている
• なんか流行っている
• MVCらしい
• 重量級(Laravel3は軽量だった)
• RoRっぽい
いえ、違います
よくあげられる特徴について
• ファサードはstaticではありません
• Eloquent利用は強制ではありません
• Authコントローラはあくまでモックアプリケーションや、

使うならオーバライドを
• 流行りではなく、一通り使ってから決めましょう
• MVCで実装するかどうかはユーザー次第です
• RoRっぽく見えるのは外見だけです
Eloquent問題
• イーガーローディングを使おうと、発行されるのはIN句
• 外部キーや正規化されたデータベースには無力
• Eloquentに拘ることで自ら生み出すボトルネック
• queryBuilderで解決させる
• それ、SQL直接書いた方が早い(Basic)
• テストしてますか?
ファサードにみる問題
• どこにでも利用できるため、どこにでも書い
てしまう
• テストしてますか?
• テストしてますか?
• テストしてますか?
テスト問題
• callや5.1で追加されたvisit()->seeInXXXなど
は機能テスト(ファンクショナルテスト)
• クラス単位でユニットテストしてますか?
• PHPUnit本家のマニュアルは読みましょう
MVCじゃないの?
• 一部の機能では「設定より規約」を取り入れてますが、


あくまで手段の一つ
• MVCとはアプリケーションの実装パターンの一つ
で、

フォルダのやクラスの名前を指すものではありません
• モデルとは何か
どう使っていけば良いのか
学び方として
• フレームワークの機能を一通り使いましょう
• Illuminateコンポーネントのソースを読みましょう
• Applicationクラスを読んでみましょう
• サービスプロバイダの仕組みが理解できます
• ファサードと実クラスの関連性が理解できます
• Dependency Injectionへの理解
フレームワークは
コンポーネントの集まり
アプリケーション
作りのフレームとしての
フレームワーク
こう作りなさい、という
規約のフレームワーク
ではありません
PHPの流れとして
• コンポーネント志向
• 疎結合などによる拡張性や、設計
• デザインパターンの応用
• 実装もコンポジット化
• DDDへのアプローチ
フレームワークの使い方さえ
知っていればよかった
時代ではないのです
Laravelで利用するには?
• コンテナを使いこなす
• ファサードを使わない選択
• リポジトリパターンから始めてみましょう
• レイヤを意識
コントローラ
モデル
ビュー
通常実装のイメージ
User::find(1)
return view()
コントローラで
ファサード・Eloquentを利用すると密結合
コントローラ
データベースアクセス
リポジトリ導入イメージ
リポジトリリポジトリI/F
インターフェースを介することで
データベース依存やその他のものから分離
リポジトリは
データベース専用の
抽象レイヤではありませんので、
何かを操作するもの、
全てに対して有用です
コントローラ
サービス導入イメージ
それぞれのクラスが独立
サービス
リポジトリI/F
リポジトリI/F
リポジトリI/FArtisan
リポジトリパターンの姿
レイヤ
• ユーザインタフェース層
• アプリケーション層
• ドメイン層
• インフラ層
View
Controller
Model
下層のレイヤは上層を知りません
ファサードの実態を知ることで、
このレイヤを強く意識することが
できます
フレームワークに
のった手法ではなく、
フレームワークを
ツールとして
Laravelを使って、
フレームワークにとらわれない
MVCのその先へ

Mais conteúdo relacionado

Mais procurados

今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
Masaru Matsuo
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
Shogo Kawahara
 

Mais procurados (20)

今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学び
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発
 
Laravelのパッケージのテストに便利なパッケージ
Laravelのパッケージのテストに便利なパッケージLaravelのパッケージのテストに便利なパッケージ
Laravelのパッケージのテストに便利なパッケージ
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
魔法少女 Laravel
魔法少女 Laravel魔法少女 Laravel
魔法少女 Laravel
 
活動報告9 laravel5入門-
活動報告9  laravel5入門-活動報告9  laravel5入門-
活動報告9 laravel5入門-
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
Perl Beginners #7 おとなのWAF
Perl Beginners #7 おとなのWAF Perl Beginners #7 おとなのWAF
Perl Beginners #7 おとなのWAF
 
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめたLaravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめた
 
魔法少女 Laravel 2014
魔法少女 Laravel 2014魔法少女 Laravel 2014
魔法少女 Laravel 2014
 
究極にして至高のWAF
究極にして至高のWAF究極にして至高のWAF
究極にして至高のWAF
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
H2O and php
H2O and phpH2O and php
H2O and php
 
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 20130から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
 
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
 

Semelhante a LaravelとMVCの先へ

Laravel5にアップグレードする際に詰まった点
Laravel5にアップグレードする際に詰まった点Laravel5にアップグレードする際に詰まった点
Laravel5にアップグレードする際に詰まった点
fagai
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
Kikuta Go
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
 

Semelhante a LaravelとMVCの先へ (20)

Laravel meetup5(Laravel meet NewSQL/VoltDB )
Laravel meetup5(Laravel meet NewSQL/VoltDB )Laravel meetup5(Laravel meet NewSQL/VoltDB )
Laravel meetup5(Laravel meet NewSQL/VoltDB )
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
 
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
 
Laravel5.1&homesteadで楽々ローカル環境構築
Laravel5.1&homesteadで楽々ローカル環境構築Laravel5.1&homesteadで楽々ローカル環境構築
Laravel5.1&homesteadで楽々ローカル環境構築
 
Laravel shibuya 3 Laravel Beginner IRT
Laravel shibuya 3 Laravel Beginner IRTLaravel shibuya 3 Laravel Beginner IRT
Laravel shibuya 3 Laravel Beginner IRT
 
第5回名古屋若手Webエンジニア交流会
第5回名古屋若手Webエンジニア交流会第5回名古屋若手Webエンジニア交流会
第5回名古屋若手Webエンジニア交流会
 
Docker friendly PHP / Laravel
Docker friendlyPHP / LaravelDocker friendlyPHP / Laravel
Docker friendly PHP / Laravel
 
PHP&NewSQLで考える次世代アプリケーション
PHP&NewSQLで考える次世代アプリケーションPHP&NewSQLで考える次世代アプリケーション
PHP&NewSQLで考える次世代アプリケーション
 
Laravel Livewire の紹介
Laravel Livewire の紹介Laravel Livewire の紹介
Laravel Livewire の紹介
 
Laravel4で運用するサービス,そしてlaravel5へ
Laravel4で運用するサービス,そしてlaravel5へLaravel4で運用するサービス,そしてlaravel5へ
Laravel4で運用するサービス,そしてlaravel5へ
 
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話
 
Laravel5にアップグレードする際に詰まった点
Laravel5にアップグレードする際に詰まった点Laravel5にアップグレードする際に詰まった点
Laravel5にアップグレードする際に詰まった点
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
 
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたLaravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskell
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス
 
Dark vol4 for_slideshare
Dark vol4 for_slideshareDark vol4 for_slideshare
Dark vol4 for_slideshare
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 

Último

Último (12)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

LaravelとMVCの先へ