SlideShare a Scribd company logo
1 of 28
Download to read offline
2014/04/04 shin1x1
Fukuoka.php
わかってるフレームワーク
Laravel
(c) 2014 Masashi Shinbara @shin1x1
開発している構成
(c) 2014 Masashi Shinbara @shin1x1
開発している構成
(c) 2014 Masashi Shinbara @shin1x1
開発している構成
(c) 2014 Masashi Shinbara @shin1x1
マイグレーション
わかってるなぁ
マイグレーション
(c) 2014 Masashi Shinbara @shin1x1
• PHPコードで定義
• ロールバックも可能
• PostgreSQLで使える!
• ちゃんと実用できる
マイグレーションファイル
(c) 2014 Masashi Shinbara @shin1x1
public function up()
{
Schema::create('roles', function(Blueprint $table) {
$table->increments('id');
$table->string('name');
});
}
• メソッド名が列の型
• 引数が列名
マイグレーションファイル
(c) 2014 Masashi Shinbara @shin1x1
public function up()
{
Schema::create('users', function(Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('email')->unique();
$table->string('password');
$table->integer('role_id')->index();
$table->foreign(‘role_id')
->references(‘id')->on('roles')
->onUpdate('cascade');
$table->timestamps();
});
}
• インデックス、ユニーク制約、外部キー も設定可能
マイグレーション実行
(c) 2014 Masashi Shinbara @shin1x1
• マイグレーション実行 [up()]
(過去に適用したファイルは適用されない)
$ php artisan migrate
• マイグレーションロールバック [down()]

(直前に実施したマイグレーションのdown()を実行)
$ php artisan migrate:rollback
(c) 2014 Masashi Shinbara @shin1x1
データベースクエリ
わかってるなぁ
データベースクエリ
(c) 2014 Masashi Shinbara @shin1x1
マニュアルのサンプルが、いきなり生SQL
データベースクエリ
(c) 2014 Masashi Shinbara @shin1x1
マニュアルのサンプルが、いきなり生SQL
どんなSQLでも書ける安心感!
データベースクエリ
(c) 2014 Masashi Shinbara @shin1x1
• クエリビルダ
DB::table('roles')->where('name', '=', ‘Mike')->get();
• Eloquent(ORM)
Role::whereName('Mike')->first();
データベースクエリ
(c) 2014 Masashi Shinbara @shin1x1
• WHERE
• IN
• AND / OR
• BETWEEN
• IS NULL
• OFFSET / LIMIT
• GROUP BY / HAVING
• JOIN / LEFT JOIN
• EXISTS
• COUNT()
• SUM()
• MAX() / MIN() / AVG()
•
•
豊富な表現力
クエリビルダとEloquent
(c) 2014 Masashi Shinbara @shin1x1
記法 レコード 複数レコード
クエリビルダ SQLライク stdclass array()
Eloquent ORM
自分自身
(ex. User クラス)
Illuminate
Database
Eloquent
Collection
実行できるクエリは、ほぼ同じ
データベースコレクション
(c) 2014 Masashi Shinbara @shin1x1
• 取得した値をカンマで連結
Role::all()->implode('name', ‘,');
// role1,role2,role3
• contains()
• each()
• filter()
• sortBy()
• map()
• sum()
• toArray() / toJson()
• and more…
(c) 2014 Masashi Shinbara @shin1x1
バリデーション
わかってるなぁ
バリデーション
(c) 2014 Masashi Shinbara @shin1x1
バリデーションルールの拡張が簡単
Validator::extend('fukuoka', function($attribute, $value, $parameters) {
return $value === 'Fukuoka';
});
$rules = [
'area' => 'fukuoka',
];
バリデーション
(c) 2014 Masashi Shinbara @shin1x1
条件が合致した時だけバリデートする
$validator = Validator::make(Input::all(), $rules);
$validator->sometimes('email_and_pass_unique', 'validate_rule', function($input) {
if ($input->has('email') || $input->has('pass')) {
return true;
}
return false;
});
(c) 2014 Masashi Shinbara @shin1x1
俺の好み
わかってるなぁ
Route::group
(c) 2014 Masashi Shinbara @shin1x1
クロージャの意図を入れ子で表現
=> 全てのルートで auth フィルタが有効
Route::group(['before' => 'auth'], function() {
Route::get('/home', function() {
// something
});
Route::get('/', function() {
// something
});
});
DB::transaction
(c) 2014 Masashi Shinbara @shin1x1
クロージャ内に正常処理
=> 自動で BEGIN
=> 例外が飛べば ROLLBACK

=> 正常終了なら COMMIT
DB::transaction(function() {
DB::table('users')->insert(['name' => 'user-name']);
DB::table('roles')->insert(['name' => 'role-name']);
});
(c) 2014 Masashi Shinbara @shin1x1
自由
わかってるなぁ
クラスファイルの置き場
(c) 2014 Masashi Shinbara @shin1x1
• オートローダーで読めればOK
• 名前空間を設定してもOK
• app/ 以下でなくてもOK
フレームワーク拡張
(c) 2014 Masashi Shinbara @shin1x1
• IoC コンテナでクラスを差し替える
• 気になるところはどんどん変更可
• フィルタ、イベントハンドラ、 

extend メソッドで拡張
Laravel
(c) 2014 Masashi Shinbara @shin1x1
こんなふうに考えてください。
アプリケーションは Laravel フレーム
ワークの実装ではありませ ん。
逆に、Laravel が私達のアプリケーショ
ンの実装なのです。
Implementing Laravel 日本語版
(c) 2014 Masashi Shinbara @shin1x1
まとめ
Laravel
わかってるなぁ
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1

More Related Content

What's hot

レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
Sugawara Genki
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
moai kids
 
20131208 agile samuraibasecamp
20131208 agile samuraibasecamp20131208 agile samuraibasecamp
20131208 agile samuraibasecamp
Hiroshi SHIBATA
 

What's hot (20)

認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_code
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
Terraforming
TerraformingTerraforming
Terraforming
 
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
Spring Framework / Boot / Data 徹底活用  〜Spring Data Redis 編〜Spring Framework / Boot / Data 徹底活用  〜Spring Data Redis 編〜
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
130207 kyotorb
130207 kyotorb130207 kyotorb
130207 kyotorb
 
CFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service BrokerCFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service Broker
 
20131208 agile samuraibasecamp
20131208 agile samuraibasecamp20131208 agile samuraibasecamp
20131208 agile samuraibasecamp
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSS
 
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?
 

Viewers also liked

Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
Syouta Tada
 

Viewers also liked (20)

デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack bot
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
 
3 tips of Laravel
3 tips of Laravel3 tips of Laravel
3 tips of Laravel
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFirebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学び
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 

Similar to わかってるフレームワーク Laravel

オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
 

Similar to わかってるフレームワーク Laravel (20)

今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
Spark graph framesとopencypherによる分散グラフ処理の最新動向
Spark graph framesとopencypherによる分散グラフ処理の最新動向Spark graph framesとopencypherによる分散グラフ処理の最新動向
Spark graph framesとopencypherによる分散グラフ処理の最新動向
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
Haikara
HaikaraHaikara
Haikara
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
 
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 

More from Masashi Shinbara

Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Masashi Shinbara
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
Masashi Shinbara
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
Masashi Shinbara
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告
Masashi Shinbara
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHP
Masashi Shinbara
 

More from Masashi Shinbara (14)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
サーバの防災訓練
サーバの防災訓練サーバの防災訓練
サーバの防災訓練
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHP
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: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
 
論文紹介: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...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/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
 
論文紹介: 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
 

わかってるフレームワーク Laravel

  • 2. (c) 2014 Masashi Shinbara @shin1x1 開発している構成
  • 3. (c) 2014 Masashi Shinbara @shin1x1 開発している構成
  • 4. (c) 2014 Masashi Shinbara @shin1x1 開発している構成
  • 5. (c) 2014 Masashi Shinbara @shin1x1 マイグレーション わかってるなぁ
  • 6. マイグレーション (c) 2014 Masashi Shinbara @shin1x1 • PHPコードで定義 • ロールバックも可能 • PostgreSQLで使える! • ちゃんと実用できる
  • 7. マイグレーションファイル (c) 2014 Masashi Shinbara @shin1x1 public function up() { Schema::create('roles', function(Blueprint $table) { $table->increments('id'); $table->string('name'); }); } • メソッド名が列の型 • 引数が列名
  • 8. マイグレーションファイル (c) 2014 Masashi Shinbara @shin1x1 public function up() { Schema::create('users', function(Blueprint $table) { $table->increments('id'); $table->string('name')->unique(); $table->string('email')->unique(); $table->string('password'); $table->integer('role_id')->index(); $table->foreign(‘role_id') ->references(‘id')->on('roles') ->onUpdate('cascade'); $table->timestamps(); }); } • インデックス、ユニーク制約、外部キー も設定可能
  • 9. マイグレーション実行 (c) 2014 Masashi Shinbara @shin1x1 • マイグレーション実行 [up()] (過去に適用したファイルは適用されない) $ php artisan migrate • マイグレーションロールバック [down()]
 (直前に実施したマイグレーションのdown()を実行) $ php artisan migrate:rollback
  • 10. (c) 2014 Masashi Shinbara @shin1x1 データベースクエリ わかってるなぁ
  • 11. データベースクエリ (c) 2014 Masashi Shinbara @shin1x1 マニュアルのサンプルが、いきなり生SQL
  • 12. データベースクエリ (c) 2014 Masashi Shinbara @shin1x1 マニュアルのサンプルが、いきなり生SQL どんなSQLでも書ける安心感!
  • 13. データベースクエリ (c) 2014 Masashi Shinbara @shin1x1 • クエリビルダ DB::table('roles')->where('name', '=', ‘Mike')->get(); • Eloquent(ORM) Role::whereName('Mike')->first();
  • 14. データベースクエリ (c) 2014 Masashi Shinbara @shin1x1 • WHERE • IN • AND / OR • BETWEEN • IS NULL • OFFSET / LIMIT • GROUP BY / HAVING • JOIN / LEFT JOIN • EXISTS • COUNT() • SUM() • MAX() / MIN() / AVG() • • 豊富な表現力
  • 15. クエリビルダとEloquent (c) 2014 Masashi Shinbara @shin1x1 記法 レコード 複数レコード クエリビルダ SQLライク stdclass array() Eloquent ORM 自分自身 (ex. User クラス) Illuminate Database Eloquent Collection 実行できるクエリは、ほぼ同じ
  • 16. データベースコレクション (c) 2014 Masashi Shinbara @shin1x1 • 取得した値をカンマで連結 Role::all()->implode('name', ‘,'); // role1,role2,role3 • contains() • each() • filter() • sortBy() • map() • sum() • toArray() / toJson() • and more…
  • 17. (c) 2014 Masashi Shinbara @shin1x1 バリデーション わかってるなぁ
  • 18. バリデーション (c) 2014 Masashi Shinbara @shin1x1 バリデーションルールの拡張が簡単 Validator::extend('fukuoka', function($attribute, $value, $parameters) { return $value === 'Fukuoka'; }); $rules = [ 'area' => 'fukuoka', ];
  • 19. バリデーション (c) 2014 Masashi Shinbara @shin1x1 条件が合致した時だけバリデートする $validator = Validator::make(Input::all(), $rules); $validator->sometimes('email_and_pass_unique', 'validate_rule', function($input) { if ($input->has('email') || $input->has('pass')) { return true; } return false; });
  • 20. (c) 2014 Masashi Shinbara @shin1x1 俺の好み わかってるなぁ
  • 21. Route::group (c) 2014 Masashi Shinbara @shin1x1 クロージャの意図を入れ子で表現 => 全てのルートで auth フィルタが有効 Route::group(['before' => 'auth'], function() { Route::get('/home', function() { // something }); Route::get('/', function() { // something }); });
  • 22. DB::transaction (c) 2014 Masashi Shinbara @shin1x1 クロージャ内に正常処理 => 自動で BEGIN => 例外が飛べば ROLLBACK
 => 正常終了なら COMMIT DB::transaction(function() { DB::table('users')->insert(['name' => 'user-name']); DB::table('roles')->insert(['name' => 'role-name']); });
  • 23. (c) 2014 Masashi Shinbara @shin1x1 自由 わかってるなぁ
  • 24. クラスファイルの置き場 (c) 2014 Masashi Shinbara @shin1x1 • オートローダーで読めればOK • 名前空間を設定してもOK • app/ 以下でなくてもOK
  • 25. フレームワーク拡張 (c) 2014 Masashi Shinbara @shin1x1 • IoC コンテナでクラスを差し替える • 気になるところはどんどん変更可 • フィルタ、イベントハンドラ、 
 extend メソッドで拡張
  • 26. Laravel (c) 2014 Masashi Shinbara @shin1x1 こんなふうに考えてください。 アプリケーションは Laravel フレーム ワークの実装ではありませ ん。 逆に、Laravel が私達のアプリケーショ ンの実装なのです。 Implementing Laravel 日本語版
  • 27. (c) 2014 Masashi Shinbara @shin1x1 まとめ Laravel わかってるなぁ
  • 28. @shin1x1 (c) 2014 Masashi Shinbara @shin1x1