SlideShare a Scribd company logo
1 of 84
Download to read offline
CakePHP3
ウォークスルー
デジタルサーカス(株)長谷川智希
長谷川智希
とも き
@tomzoh

とむぞう
開発系趣味
その他趣味
Webサイト開発, iOSアプリ開発
レンタルカートレース, 電子工作(mbed), …
TOMZOH
お仕事 スマホアプリ受託開発 Mgr
デジタルサーカス(株) 副団長CTO
東京都港区南青山(表参道)
Facebook CakePHP iOS
長谷川智希
とも き
@tomzoh

とむぞう
開発系趣味
その他趣味
Webサイト開発, iOSアプリ開発
TOMZOH
お仕事 スマホアプリ受託開発 Mgr
デジタルサーカス(株) 副団長CTO
レンタルカートレース
東京都港区南青山(表参道)
Facebook CakePHP iOS
http://www.amazon.co.jp/dp/4798039519
Webアプリ開発を加速する CakePHP2定番レシピ119
デジタルサーカス(株)
・ Webサイト受託開発
・ スマホアプリ受託開発



・ 自社サービス
(PHP, Drupal, CakePHP)
(iOS, Android)



(http://appbuilder.jp)
Twitter: @tomzoh
東京都港区南青山(表参道)
デジタルサーカス(株)
・ Webサイト受託開発
・ スマホアプリ受託開発



・ 自社サービス
(PHP, Drupal, CakePHP)
(iOS, Android)



(http://appbuilder.jp)
Twitter: @tomzoh
東京都港区南青山(表参道)
Twitter: @tomzoh
Twitter: @tomzoh
今日のテーマ:
CakePHP3ウォークスルー
の前に…
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
10⽉月 CakePHP 2.0
3⽉月 CakePHP 3.0
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
10⽉月 CakePHP 2.0
3⽉月 CakePHP 3.0
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
7⽉月 Ruby on Rails 1st
12⽉月 Ruby on Rails 1.0
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
7⽉月 Ruby on Rails 1st
12⽉月 Ruby on Rails 1.0
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
7⽉月 Ruby on Rails 1st
12⽉月 Ruby on Rails 1.0
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
7⽉月 Ruby on Rails 1st
12⽉月 Ruby on Rails 1.0
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
7⽉月 Ruby on Rails 1st
12⽉月 Ruby on Rails 1.0
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0
4⽉月 CakePHP 1.3
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
4⽉月 CakePHP 1.3
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
4⽉月 CakePHP 1.3
1⽉月 Symfony 1.0
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
2012
12⽉月 CakePHP 1.2
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
4⽉月 CakePHP 1.3
1⽉月 Symfony 1.0 PHP 5.0+
3⽉月 Cake
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
10⽉月 CakePHP 2.0
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
10⽉月 CakePHP 2.0
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
2012
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
Composer 1.0.0-alpha1
PSR-2
PSR−4
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
PHP Standard Recommendation
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
Composer 1.0.0-alpha1
PSR-2
PSR−4
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
PHP Standard Recommendation
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
名前空間クロージャ
トレイトarray() → []
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
Composer 1.0.0-alpha1
PSR-2
PSR−4
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
PHP Standard Recommendation
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
名前空間クロージャ
トレイトarray() → []
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
Composer 1.0.0-alpha1
PSR-2
PSR−4
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
イケてない感(個⼈人の感想です)
PHP Standard Recommendation
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
名前空間クロージャ
トレイトarray() → []
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
Composer 1.0.0-alpha1
PSR-2
PSR−4
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
PHP Standard Recommendation
Composer 1.0.0-alpha1
PSR-2
PSR−4
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
名前空間クロージャ
トレイトarray() → []
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
Composer 1.0.0-alpha1
PSR-2
PSR−4
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
名前空間クロージャ
トレイトarray() → []
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
3⽉月 CakePHP 3.0
Composer 1.0.0-alpha1
PSR-2
PSR−4
CakePHPの歴史
2005
2007
2009
2010
2011
2015
2014
2006
2013
2008
2004
6⽉月 PHP 5.3.0
3⽉月 PHP 5.4.0 2012
6⽉月 PHP 5.5.0
8⽉月 PHP 5.6.0
12⽉月 CakePHP 1.2
4⽉月 CakePHP 1.3
5⽉月 CakePHP 1.1
3⽉月 CakePHP 1.0 PHP4.3.2+
PHP5.2.6+
名前空間クロージャ
トレイトarray() → []
3⽉月 Cake
7⽉月 PHP 4.4.0
7⽉月 PHP 5.0.0
11⽉月 PHP 5.1.0
12⽉月 PHP 5.2.0
7⽉月 12⽉月でPHP4サポート終了了発表
12⽉月 CakePHP 2.6
3⽉月 CakePHP 2.5
1⽉月 CakePHP 2.3
7⽉月 CakePHP 2.2
3⽉月 CakePHP 2.1
4⽉月 CakePHP 2.4
10⽉月 CakePHP 2.0
3⽉月 CakePHP 3.0 PHP5.4+
CakePHP3
• PHP5.4+
• トレイト, 配列短縮構文
• Composer必須
• zipファイルをダウンロードしないでOK
• PSR-2, PSR-4
• オブジェクト化。特にORマッパ。
• 「配列地獄」からの脱出
CakePHP3
• PHP5.4+
• トレイト, 配列短縮構文
• Composer必須
• zipファイルをダウンロードしないでOK
• PSR-2, PSR-4
• オブジェクト化。特にORマッパ。
• 「配列地獄」からの脱出
イケてる感(個⼈人の感想です)
CakePHP3ウォークスルー
CakePHPセットアップ
CakePHP2 - セットアップ
{
"name": "app",
"repositories": [
{
"type": "pear",
"url": "http://pear.cakephp.org"
}
],
"require": {
"cakephp/cakephp": "~2.6",
"cakephp/debug_kit": ">=2.2",
"cakedc/migrations": "~2.3",
"fabpot/goutte": "~2.0",
"phpunit/phpunit": "3.7.*"
},
"config": {
"vendor-dir": "Vendor/"
}
}
composer.json
CakePHP2 - セットアップ
# vi composer.json
# composer install
(略略)
# ./Vendor/bin/cake bake
(略略)
# ls -alF
total 24
drwxrwxr-x 1 nobody nogroup 204 6⽉月 25 18:14 ./
drwxrwxr-x 1 nobody nogroup 578 6⽉月 25 18:06 ../
drwxrwxr-x 1 nobody nogroup 102 6⽉月 25 18:14 Plugin/
drwxrwxr-x 1 nobody nogroup 306 6⽉月 25 18:14 Vendor/
drwxrwxr-x 1 nobody nogroup 544 6⽉月 25 23:37 app/
-rwxrwxr-x 1 nobody nogroup 283 6⽉月 25 18:06 composer.json*
-rwxrwxr-x 1 nobody nogroup 18465 6⽉月 25 18:14 composer.lock*
# vi app/webroot/index.php
# vi app/webroot/test.php
# vi app/Console/cake.php
appを作る
CakePHP2 - セットアップ
# vi composer.json
# composer install
(略略)
# ./Vendor/bin/cake bake
(略略)
# ls -alF
total 24
drwxrwxr-x 1 nobody nogroup 204 6⽉月 25 18:14 ./
drwxrwxr-x 1 nobody nogroup 578 6⽉月 25 18:06 ../
drwxrwxr-x 1 nobody nogroup 102 6⽉月 25 18:14 Plugin/
drwxrwxr-x 1 nobody nogroup 306 6⽉月 25 18:14 Vendor/
drwxrwxr-x 1 nobody nogroup 544 6⽉月 25 23:37 app/
-rwxrwxr-x 1 nobody nogroup 283 6⽉月 25 18:06 composer.json*
-rwxrwxr-x 1 nobody nogroup 18465 6⽉月 25 18:14 composer.lock*
# vi app/webroot/index.php
# vi app/webroot/test.php
# vi app/Console/cake.php
appを作る
Composer前提じゃない箇所の修正 (‘;ω;)ウッ
CakePHP3 - セットアップ
# composer create-project --prefer-dist cakephp/app cake3
Installing cakephp/app (3.0.3)
- Installing cakephp/app (3.0.3)
Loading from cache
Created project in cake3
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing aura/installer-default (1.0.0)
Loading from cache
- Installing cakephp/plugin-installer (0.0.12)
Loading from cache
Writing lock file
Generating autoload files
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]?
Permissions set on /var/www/cake3/tmp/cache
Permissions set on /var/www/cake3/tmp
Permissions set on /var/www/cake3/logs
Updated Security.salt value in config/app.php
CakePHP3 - セットアップ
# composer create-project --prefer-dist cakephp/app cake3
Installing cakephp/app (3.0.3)
- Installing cakephp/app (3.0.3)
Loading from cache
Created project in cake3
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing aura/installer-default (1.0.0)
Loading from cache
- Installing cakephp/plugin-installer (0.0.12)
Loading from cache
Writing lock file
Generating autoload files
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]?
Permissions set on /var/www/cake3/tmp/cache
Permissions set on /var/www/cake3/tmp
Permissions set on /var/www/cake3/logs
Updated Security.salt value in config/app.php
CakePHP3のプロジェクトテンプレートを
ダウンロードしてcomposer installする。
CakePHP3 - プロジェクト
# ls -alF cake3
total 76
drwxrwxr-x 1 nobody nogroup 714 6⽉月 26 00:10 ./
drwxrwxr-x 1 nobody nogroup 646 6⽉月 26 00:09 ../
-rwxrwxr-x 1 nobody nogroup 329 5⽉月 2 01:04 .editorconfig*
-rwxrwxr-x 1 nobody nogroup 772 5⽉月 2 01:04 .gitattributes*
-rwxrwxr-x 1 nobody nogroup 41 5⽉月 2 01:04 .gitignore*
-rwxrwxr-x 1 nobody nogroup 140 5⽉月 2 01:04 .htaccess*
-rwxrwxr-x 1 nobody nogroup 337 5⽉月 2 01:04 .travis.yml*
-rwxrwxr-x 1 nobody nogroup 863 5⽉月 2 01:04 README.md*
drwxrwxr-x 1 nobody nogroup 170 5⽉月 2 01:04 bin/
-rwxrwxr-x 1 nobody nogroup 1203 5⽉月 2 01:04 composer.json*
-rwxrwxr-x 1 nobody nogroup 38855 6⽉月 26 00:10 composer.lock*
drwxrwxr-x 1 nobody nogroup 306 6⽉月 26 00:10 config/
-rwxrwxr-x 1 nobody nogroup 648 5⽉月 2 01:04 index.php*
drwxrwxr-x 1 nobody nogroup 102 5⽉月 2 01:04 logs/
-rwxrwxr-x 1 nobody nogroup 819 5⽉月 2 01:04 phpunit.xml.dist*
drwxrwxr-x 1 nobody nogroup 102 5⽉月 2 01:04 plugins/
drwxrwxr-x 1 nobody nogroup 272 5⽉月 2 01:04 src/
drwxrwxr-x 1 nobody nogroup 170 5⽉月 2 01:04 tests/
drwxrwxr-x 1 nobody nogroup 170 5⽉月 2 01:04 tmp/
drwxrwxr-x 1 nobody nogroup 646 6⽉月 26 00:11 vendor/
drwxrwxr-x 1 nobody nogroup 272 5⽉月 2 01:04 webroot/
composer.jsonが生成されてる
.gitignore標準装備
PSR-2定義
CakePHP3 - bake
# bin/cake bake
Welcome to CakePHP v3.0.7 Console
---------------------------------------------------------------
App : src
Path: /var/www/cake3/src/
---------------------------------------------------------------
The following commands can be used to generate skeleton code for your application.
Available bake commands:
- all
- behavior
- cell
- component
- controller
- fixture
- form
- helper
- migration
- migration_snapshot
- model
- plugin
- shell
- template
- test
By using `cake bake [name]` you can invoke a specific bake task.
いろいろ作れる。
うまく使うと便利。
ディレクトリ構成 /
コーディング標準
プログラムのルート
CakePHP2 CakePHP3
• ./app  から  ./src  に変更
ビューテンプレート(ctp)
CakePHP2 CakePHP3
• ./app/View  から  ./src/Template  に変更
設定ファイル
CakePHP2 CakePHP3
• ./app/Config/core.php  から  ./config/app.php  に変更  
• composer  install  で  app.default.php  から生成される  
• SCMにはコミットせずに管理  
• database.phpは廃止
PSR-4
composer.json
• 生成される  composer.json  にPSR-4関連の設定あり。  
• This  PSR  describes  a  specification  for  autoloading  classes  from  
file  paths.
PSR-2
• CakePHP3はPSR-2準拠。  
• This  guide  extends  and  expands  on  PSR-1,  the  basic  coding  
standard.
http://www.slideshare.net/yandod/psrphp新標準PSRに学ぶきれいなPHP
PSR-2
• CakePHP3はPSR-2準拠。  
• This  guide  extends  and  expands  on  PSR-1,  the  basic  coding  
standard.
http://www.slideshare.net/yandod/psrphp新標準PSRに学ぶきれいなPHP
PSR-2
個人的にちょっとキモい…
• CakePHP3はPSR-2準拠。  
• This  guide  extends  and  expands  on  PSR-1,  the  basic  coding  
standard.
http://www.slideshare.net/yandod/psrphp新標準PSRに学ぶきれいなPHP
PSR-2
すぐ慣れた
• CakePHP3はPSR-2準拠。  
• This  guide  extends  and  expands  on  PSR-1,  the  basic  coding  
standard.
http://www.slideshare.net/yandod/psrphp新標準PSRに学ぶきれいなPHP
モデル
モデルの構成
がっつり変わってる。
• CakePHP2
• クエリ実行: Modelクラス
• クエリ実行結果: 配列
• CakePHP3
• クエリ実行: Tableクラス
• クエリ実行結果: Entityオブジェクト
モデルの動作
CakePHP2 CakePHP3
ControllerModelView
クエリ 配列
クエリ 配列
クエリ 配列
配列
配列
配列
配列
配列
配列
find() find()
オブジェクト
オブジェクト
クエリ
クエリ
オブジェクト
オブジェクト
モデルの動作
CakePHP2 CakePHP3
ControllerModelView
クエリ 配列
クエリ 配列
クエリ 配列
配列
配列
配列
配列
配列
配列
find() find()
オブジェクト
オブジェクト
クエリ
クエリ
オブジェクト
全てのクエリが実行されて…
オブジェクト
モデルの動作
CakePHP2 CakePHP3
ControllerModelView
クエリ 配列
クエリ 配列
クエリ 配列
配列
配列
配列
配列
配列
配列
find() find()
オブジェクト
オブジェクト
クエリ
クエリ
オブジェクト
全てのクエリが実行されて…
配列を持ち回る
オブジェクト
モデルの動作
CakePHP2 CakePHP3
ControllerModelView
クエリ 配列
クエリ 配列
クエリ 配列
配列
配列
配列
配列
配列
配列
find() find()
オブジェクト
オブジェクト
クエリ
クエリ
オブジェクト
全てのクエリが実行されて…
配列を持ち回る
この段階ではクエリは実行されない
オブジェクト
モデルの動作
CakePHP2 CakePHP3
ControllerModelView
クエリ 配列
クエリ 配列
クエリ 配列
配列
配列
配列
配列
配列
配列
find() find()
オブジェクト
オブジェクト
クエリ
クエリ
オブジェクト
全てのクエリが実行されて…
配列を持ち回る
この段階ではクエリは実行されない
参照される時にクエリ実行
オブジェクト
モデルの動作
CakePHP2 CakePHP3
ControllerModelView
クエリ 配列
クエリ 配列
クエリ 配列
配列
配列
配列
配列
配列
配列
find() find()
オブジェクト
オブジェクト
クエリ
クエリ
オブジェクト
全てのクエリが実行されて…
配列を持ち回る
この段階ではクエリは実行されない
参照される時にクエリ実行
オブジェクト
出てくるのもオブジェクト
Table / Entity Object
Table / Entity Object
オブジェクト
Table / Entity Object
オブジェクト
オブジェクト
Table / Entity Object
オブジェクト
オブジェクト オブジェクト
オブジェクト化の恩恵
• PhpStormとか使うとプロパティやメソッドがサジェスト
される。
オブジェクト化の恩恵
• 若干のアノテーションは覚悟。
• PhpStormとか使うとプロパティやメソッドがサジェスト
される。
オブジェクト化の恩恵
• 前ページのアノテーションは実はもう少し工夫が必要。
後日補足
サジェストできない状態(波線)
アノテーション or use 指定で「User」が何か教えてあげる
or
バリデータ
もちろんオブジェクト
• 今風メソッドチェイン。
もちろんオブジェクト
• 今風メソッドチェイン。
• もちろんサジェスト可能。
もちろんオブジェクト
• 今風メソッドチェイン。
ステキ!!
• もちろんサジェスト可能。
CakePHP3
ステキ!
コントローラ & ビュー (含ヘルパ)
興奮するような変化は
ありませんでした…
まとめ
CakePHP3 まとめ
• セットアップの方法が変わった。
• Composer前提。
• モデル周りがオブジェクト化された。
• クエリは必要になってから実行されるのでパフォーマンス的に
有利。
• IDEのサジェスト機能を活用しよう。
• コントローラ、ビューまわりに大きな変化は無し。
• キレイに今風になって、イケてる感が高くなった。
• CakePHP史上、一番の改善アップデート。
使ってみよう!CakePHP3!
ありがとうございました
@tomzoh
デジタルサーカス(株)
懇親会も行きます。
声かけてください

More Related Content

Similar to CakePHP3ウォークスルー

FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くPHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くshinjiigarashi
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011Rui Hirokawa
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語るRui Hirokawa
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012ichikaway
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015Rui Hirokawa
 
Cakephp勉強会@福岡 発表資料
Cakephp勉強会@福岡 発表資料Cakephp勉強会@福岡 発表資料
Cakephp勉強会@福岡 発表資料ichikaway
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話Yuki Kanazawa
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例Yusuke Naka
 
Cake Php ページ送り機能
Cake Php ページ送り機能Cake Php ページ送り機能
Cake Php ページ送り機能柴田 篤志
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016Rui Hirokawa
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5ichikaway
 
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発Kenjiro Kubota
 
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5Kenichi Mukai
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4ichikaway
 
Cakephp plugin for_facebook
Cakephp plugin for_facebookCakephp plugin for_facebook
Cakephp plugin for_facebookEiji Yokota
 
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoyakenjis
 
PHPの今とこれから2009
PHPの今とこれから2009PHPの今とこれから2009
PHPの今とこれから2009Rui Hirokawa
 
FutureSync 世界の開発者とコラボしよう
FutureSync 世界の開発者とコラボしようFutureSync 世界の開発者とコラボしよう
FutureSync 世界の開発者とコラボしようichikaway
 

Similar to CakePHP3ウォークスルー (20)

FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くPHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 
Yet Another Plugins
Yet Another PluginsYet Another Plugins
Yet Another Plugins
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
Cakephp勉強会@福岡 発表資料
Cakephp勉強会@福岡 発表資料Cakephp勉強会@福岡 発表資料
Cakephp勉強会@福岡 発表資料
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
Cake Php ページ送り機能
Cake Php ページ送り機能Cake Php ページ送り機能
Cake Php ページ送り機能
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
 
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
 
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
 
Cakephp plugin for_facebook
Cakephp plugin for_facebookCakephp plugin for_facebook
Cakephp plugin for_facebook
 
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
 
PHPの今とこれから2009
PHPの今とこれから2009PHPの今とこれから2009
PHPの今とこれから2009
 
FutureSync 世界の開発者とコラボしよう
FutureSync 世界の開発者とコラボしようFutureSync 世界の開発者とコラボしよう
FutureSync 世界の開発者とコラボしよう
 

More from Tomoki Hasegawa

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorTomoki Hasegawa
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSTomoki Hasegawa
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境Tomoki Hasegawa
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016Tomoki Hasegawa
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭りTomoki Hasegawa
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側Tomoki Hasegawa
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使うTomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP sideTomoki Hasegawa
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作るTomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみたTomoki Hasegawa
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作するTomoki Hasegawa
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するTomoki Hasegawa
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったTomoki Hasegawa
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたTomoki Hasegawa
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版Tomoki Hasegawa
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するTomoki Hasegawa
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門Tomoki Hasegawa
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版Tomoki Hasegawa
 

More from Tomoki Hasegawa (20)

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulator
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
 
「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作する
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知する
 
Stargazer Meetup #1
Stargazer Meetup #1Stargazer Meetup #1
Stargazer Meetup #1
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきた
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化する
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
 

CakePHP3ウォークスルー