SlideShare a Scribd company logo
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ウォークスルー
興奮するような変化は
ありませんでした…
まとめ
CakePHP3 まとめ
• セットアップの方法が変わった。
• Composer前提。
• モデル周りがオブジェクト化された。
• クエリは必要になってから実行されるのでパフォーマンス的に
有利。
• IDEのサジェスト機能を活用しよう。
• コントローラ、ビューまわりに大きな変化は無し。
• キレイに今風になって、イケてる感が高くなった。
• CakePHP史上、一番の改善アップデート。
使ってみよう!CakePHP3!
ありがとうございました
@tomzoh
デジタルサーカス(株)
懇親会も行きます。
声かけてください
Ad

More Related Content

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

CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
ichikaway
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
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
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
ichikaway
 
CakePHP - The point of upgrade
CakePHP - The point of upgradeCakePHP - The point of upgrade
CakePHP - The point of upgrade
Yasuo Harada
 
CakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shellCakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shell
ichikaway
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
ichikaway
 
OSC2013@FUKUOKA
OSC2013@FUKUOKAOSC2013@FUKUOKA
OSC2013@FUKUOKA
Ryuji Egashira
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
諒一 上野
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例
柴田 篤志
 
CakePHP3使ってみて
CakePHP3使ってみてCakePHP3使ってみて
CakePHP3使ってみて
Tatsuya Inamura
 
CakePHP3入門
CakePHP3入門CakePHP3入門
CakePHP3入門
GIG inc.
 
CakePHP2 Loading (Japanese)
CakePHP2 Loading (Japanese)CakePHP2 Loading (Japanese)
CakePHP2 Loading (Japanese)
ichikaway
 
CakePHP を使ってよかったこと
CakePHP を使ってよかったことCakePHP を使ってよかったこと
CakePHP を使ってよかったこと
Wataru Terada
 
Sencha と CakePHP の連携について
Sencha と CakePHP の連携についてSencha と CakePHP の連携について
Sencha と CakePHP の連携について
Kazuyuki Aoki
 
CakePHP × 国産! baserCMS3の深化と今後の拡がり
CakePHP × 国産! baserCMS3の深化と今後の拡がりCakePHP × 国産! baserCMS3の深化と今後の拡がり
CakePHP × 国産! baserCMS3の深化と今後の拡がり
Daisuke Abe
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
Rui Hirokawa
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
侑弥 濱田
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
ichikaway
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
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
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
ichikaway
 
CakePHP - The point of upgrade
CakePHP - The point of upgradeCakePHP - The point of upgrade
CakePHP - The point of upgrade
Yasuo Harada
 
CakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shellCakePHP2.0 performance, upgrade shell
CakePHP2.0 performance, upgrade shell
ichikaway
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
ichikaway
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
諒一 上野
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例
柴田 篤志
 
CakePHP3入門
CakePHP3入門CakePHP3入門
CakePHP3入門
GIG inc.
 
CakePHP2 Loading (Japanese)
CakePHP2 Loading (Japanese)CakePHP2 Loading (Japanese)
CakePHP2 Loading (Japanese)
ichikaway
 
CakePHP を使ってよかったこと
CakePHP を使ってよかったことCakePHP を使ってよかったこと
CakePHP を使ってよかったこと
Wataru Terada
 
Sencha と CakePHP の連携について
Sencha と CakePHP の連携についてSencha と CakePHP の連携について
Sencha と CakePHP の連携について
Kazuyuki Aoki
 
CakePHP × 国産! baserCMS3の深化と今後の拡がり
CakePHP × 国産! baserCMS3の深化と今後の拡がりCakePHP × 国産! baserCMS3の深化と今後の拡がり
CakePHP × 国産! baserCMS3の深化と今後の拡がり
Daisuke Abe
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
Rui Hirokawa
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
侑弥 濱田
 

More from Tomoki Hasegawa (20)

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulator
Tomoki Hasegawa
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Tomoki Hasegawa
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
Tomoki Hasegawa
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016
Tomoki Hasegawa
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
Tomoki Hasegawa
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
Tomoki Hasegawa
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
Tomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side
Tomoki 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 CMS
Tomoki Hasegawa
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作する
Tomoki Hasegawa
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知する
Tomoki Hasegawa
 
Stargazer Meetup #1
Stargazer Meetup #1Stargazer Meetup #1
Stargazer Meetup #1
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
 
Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulator
Tomoki Hasegawa
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Tomoki Hasegawa
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
Tomoki Hasegawa
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016
Tomoki Hasegawa
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
Tomoki Hasegawa
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
Tomoki Hasegawa
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
Tomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side
Tomoki 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 CMS
Tomoki 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
 
Ad

CakePHP3ウォークスルー