[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
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 (20)

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

Viewers also liked (20)

PDF
デザインにもこだわったUiの事始め3
Fumiya Sakai
 
PPTX
アプリチームを支えるSlack bot
Kazuaki KURIU
 
PDF
ビルドサーバで使うDocker
Masashi Shinbara
 
PPTX
Laravelチュートリアルを作ってみた。
Futoshi Endo
 
PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
Kouhei Sutou
 
PPTX
JavaScriptから利用するFirebase
Takuji Shimokawa
 
PPTX
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
Kazuaki KURIU
 
PDF
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
Mayumi Narisawa
 
PPTX
20151205フルスクラッチcms作成のノウハウ With Laravel
Takumi Yoshida
 
PPTX
Phpフレームワーク 「laravel」でブログを作ろう
Syouta Tada
 
PPTX
Laravel LT
Iwama Ryo
 
PDF
3 tips of Laravel
Kazuaki KURIU
 
PDF
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
Kouhei Sutou
 
PDF
Laravel / Lumen 次の一歩
Yuuki Takezawa
 
PDF
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
Fumiya Sakai
 
PDF
Laravel の学び方と得られる学び
Masaru Matsuo
 
PPTX
Laravelを使ってみた
Jaeseop Jeong
 
PDF
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Fumiya Sakai
 
PDF
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
Fumiya Sakai
 
PDF
今からでも大丈夫!Firebase入門
Tomoki Koga
 
デザインにもこだわったUiの事始め3
Fumiya Sakai
 
アプリチームを支えるSlack bot
Kazuaki KURIU
 
ビルドサーバで使うDocker
Masashi Shinbara
 
Laravelチュートリアルを作ってみた。
Futoshi Endo
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
Kouhei Sutou
 
JavaScriptから利用するFirebase
Takuji Shimokawa
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
Kazuaki KURIU
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
Mayumi Narisawa
 
20151205フルスクラッチcms作成のノウハウ With Laravel
Takumi Yoshida
 
Phpフレームワーク 「laravel」でブログを作ろう
Syouta Tada
 
Laravel LT
Iwama Ryo
 
3 tips of Laravel
Kazuaki KURIU
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
Kouhei Sutou
 
Laravel / Lumen 次の一歩
Yuuki Takezawa
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
Fumiya Sakai
 
Laravel の学び方と得られる学び
Masaru Matsuo
 
Laravelを使ってみた
Jaeseop Jeong
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Fumiya Sakai
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
Fumiya Sakai
 
今からでも大丈夫!Firebase入門
Tomoki Koga
 
Ad

More from Masashi Shinbara (16)

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

Recently uploaded (6)

PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
PDF
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 

わかってるフレームワーク 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