15分でCakePHPを始める方法
hiro345@SSS(G)
●

自己紹介

hiro345

twitter: @hiro345
blog: http://www.sssg.org/blogs/hiro345/
●

執筆
 @IT ... Java, Eclipse, Android, C
日経Linux ... Java, Dart, Cloud
日経ソフトウェア ... Java
Java World, WEB+DB Press など
Veeweeとは
●

jedi4ever/veewee · GitHub:
–

●

仮想マシンの雛形を作成するツール
–
–
–

●

https://github.com/jedi4ever/veewee
Oracle VM VirtualBox
KVM
VMware

Veeweeでvagrant boxをつくろう
–

http://www.sssg.org/blogs/hiro345/archives/15054.html
インストール
●

●
●
●

http://www.vagrantup.com/ からVagrantをダウンロード
してインストール
インストールウィザードにしたがってインストール
Vagrant同梱のRubyでveeweeをBundlerでインストール
用意したGemfile

source "https://rubygems.org"
gem 'veewee'
インストールまでの手順
$ PATH=/Applications/Vagrant/bin:/Applications/Vagrant/embedded/bin:$PATH
$ export PATH
$ gem install bandler
$ mkdir -p $HOME/workspace/veewee
$ cd $HOME/workspace/veewee
$ bundle install --path=vendor/bundle
Boxを作成するまでのコマンド
$ bundle exec veewee help
$ bundle exec veewee vbox templates
$ bundle exec veewee vbox templates|grep Cent
$ bundle exec veewee vbox define centos6 'CentOS-6.4-i386-minimal'
$ bundle exec veewee vbox build centos6
$ vagrant package --base centos6 --output centos6.box
上から順に、
- ヘルプ表示
- テンプレート一覧表示
- Centという文字列が含まれるテンプレートの一覧表示
- CentOS-6.4-i386-minimalというテンプレートを使って、centos6という名前の仮想マシン定義
- centos6構築(仮想マシンの作成とOSインストール)
- centos6.box というファイル名の Vagrant Box を作成
CakePHP2 Boxの構築
●
●
●

veeweeで下記を適用
日本語キーボードの設定も必要
残りはcentos6.boxをベースにvagrantで
cent6-cakephp2.boxとして作成
yum -y update
yum -y groupinstall 'Development Tools'
yum -y groupinstall "X Window System"
yum -y groupinstall "Desktop"
yum -y groupinstall "General Purpose Desktop"
yum -y groupinstall "Internet Browser"
yum -y groupinstall "Japanese Support"
echo "" >> /home/vagrant/.bash_profile
echo "LANG=ja_JP.UTF-8" >> /home/vagrant/.bash_profile
echo "export LANG" >> /home/vagrant/.bash_profile
CakePHP2 Boxの構築 その2
●
●

●
●
●
●

veeweeで作ったマシンをベース
VagrantfileでGUI起動とホストオンリーネット
ワーク追加
remiリポジトリ追加
Apache,PHP,MySQLのインストールと設定
CakePHP2のサンプルインストール
CakePHP2開発用に共有フォルダを利用する設定
PHP環境構築の実行コマンド
wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh epel-release-6-8.noarch.rpm remi-release-6.rpm
sudo yum -y --enablerepo=remi,epel install mysql-server mysql mysql-devel
sudo yum -y --enablerepo=remi,epel install 
php php-cli php-devel php-common php-pdo php-ldap php-gd php-mysql 
php-mbstring php-xmlrpc php-xml php-pear php-pear-DB php-pear-Net-URL 
php-pear-Mail-Mime php-pear-Net-Socket php-pear-Auth-SASL php-pear-Mail 
php-pear-MDB2 php-pear-HTTP-Request php-pear-File-Util php-pear-File-CSV 
php-pear-Net-SMTP php-pear-Log php-pear-File php-phpunit-PHPUnit
sudo sed -i 's/id:3/id:5/' /etc/inittab
sudo sed -i '5s/enabled=0/enabled=1/' /etc/yum.repos.d/remi.repo
sudo sed -i '14s/enabled=0/enabled=1/' /etc/yum.repos.d/remi.repo
sudo sed -i 's/;date.timezone =/date.timezone = "Asia/Tokyo"/' /etc/php.ini
sudo chkconfig httpd on
sudo chkconfig mysqld on
sudo service httpd start
sudo service mysqld start
PHPデバッグ環境用設定
$ cat /etc/php.d/xdebug.ini
zend_extension=/usr/lib/php/modules/xdebug.so
xdebug.remote_enable = On
xdebug.remote_connect_back=On
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=192.168.91.10
;xdebug.remote_port=9000
CakePHP2環境構築用シェル変数
#!/bin/sh
v=2.4.2
CAKEPHP_APP_DIR="cakephp2_apps"
BASE_DIR="/var/www/${CAKEPHP_APP_DIR}/cakephp-${v}_apps"
CAKEPHP_NAME="cakephp-${v}"
CAKEPHP_ORG=cakephp-cakephp-f53efef
BASE_DIR="/var/www/${CAKEPHP_APP_DIR}/${CAKEPHP_NAME}_apps"
APP_NAME="user_app"
APP_DIR=${BASE_DIR}/${APP_NAME}
APP_LOCATION="/${CAKEPHP_APP_DIR}/${APP_NAME}"
CAKEPHP_HTTP_CONF="/etc/httpd/conf.d/cakephp.conf"
# download cakephp
wget https://github.com/cakephp/cakephp/zipball/${v} -O ${CAKEPHP_NAME}.zip
mkdir -p ${BASE_DIR}
unzip ${CAKEPHP_NAME}.zip -d ${BASE_DIR}/
CakePHP2サンプルアプリ生成
# create user_app
mv ${BASE_DIR}/${CAKEPHP_ORG} ${APP_DIR}
for f in ${APP_DIR}/.htaccess ${APP_DIR}/app/.htaccess ${APP_DIR}/app/webroot/.htaccess
do
echo "${f} replace"
cat <<EOF > /tmp/tmp_sed.sh
sed -i 's%RewriteEngine on%RewriteEngine On%' ${f}
sed -i 's%RewriteEngine On%RewriteEngine OnntRewriteBase ${APP_LOCATION}%' ${f}
EOF
bash /tmp/tmp_sed.sh
done
rm /tmp/tmp_sed.sh
chmod -R a+w ${APP_DIR}
chcon -R unconfined_u:object_r:httpd_sys_content_t:s0 ${APP_DIR}
salt=`php -r '$num = "";for($i=0;$i<10;++$i){$num .= rand(100,999);} echo sha1($num);'`
cipherSeed=`php -r '$num = "";for($i=0;$i<10;++$i){$num .= rand(100,999);} echo $num;'`
echo "Configure::write('Security.salt', '${salt}');" >> ${APP_DIR}/app/Config/bootstrap.php
echo "Configure::write('Security.cipherSeed', '${cipherSeed}');" >> ${APP_DIR}/app/Config/bootstrap.php
Apacheの設定ファイル生成
cat <<EOF > ${CAKEPHP_HTTP_CONF}
Alias ${APP_LOCATION} ${BASE_DIR}/${APP_NAME}/app/webroot
<Directory ${APP_DIR}/app/webroot>
AllowOverride All
</Directory>
<Location ${APP_LOCATION}>
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Location>
EOF
service httpd restart
CakePHP2アプリ用MySQL DB作成
# mysql
mysql -u root << EOF
DROP DATABASE IF EXISTS ${APP_NAME};
CREATE DATABASE IF NOT EXISTS ${APP_NAME} DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON ${APP_NAME}.* TO ${APP_NAME}@localhost IDENTIFIED BY '$
{APP_NAME}_pass';
FLUSH PRIVILEGES;
use ${APP_NAME};
CREATE TABLE IF NOT EXISTS users (
id int(11) NOT NULL AUTO_INCREMENT,
username tinytext COLLATE utf8_unicode_ci NOT NULL,
password tinytext COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
EOF
CakePHP2アプリ向け設定
cat <<EOF > /tmp/tmp_sed.sh
cat ${APP_DIR}/app/Config/database.php.default 
| sed -e "s%'login' => 'user'%'login' => '${APP_NAME}'%" - 
| sed -e "s%'password' => 'password'%'password' => '${APP_NAME}_pass'%" - 
| sed -e "s%'database' => 'database_name'%'database' => '${APP_NAME}'%" - 
| sed -e "s%//'encoding'%'encoding'%" - 
> ${APP_DIR}/app/Config/database.php
EOF
bash /tmp/tmp_sed.sh
rm /tmp/tmp_sed.sh
cd ${APP_DIR}/app
./Console/cake bake all User
cent6-cakephp2の_Vagrantfile
$ cat $HOME/.vagrant.d/boxes/cent6-cakephp2/virtualbox/include/_Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.network :private_network, ip: "192.168.91.10"
config.vm.provider :virtualbox do |vb|
vb.gui = true
end
end
*注意
CentOSの場合は、ネットワークカードを追加してBoxを作る場合は、
/etc/udev/rules.d/70-persistent-net.rules を削除し、NetworkManagerは停止、
networkサービスを有効としておくこと
ユーザの実行コマンド
vagrantをインストールしてあれば、
vagrantをインストールしてあれば、
これだけ!
$ vagrant box add cent6-cakephp2 $HOME/Downloads/cen6-cakephp2.box
$ mkdir -p $HOME/workspace/vagrant/cent6-cakephp2
$ cd $HOME/workspace/vagrant/cent6-cakephp2
$ vagrant init cent6-cakephp2
$ vagrant up
URLへアクセスするとCakePHP2が動いている!

http://192.168.91.10/cakephp2_apps/user_app/
http://192.168.91.10/cakephp2_apps/user_app/users/
共有フォルダにPHPファイルを用意するときは下記
http://192.168.91.10/php/
実体はVagrantfileがあるディレクトリの php ディレクト
リ
仮想マシンを使ったPHP開発
Mac OS X のNetBeansで開発!
NetBeansで開発!

ホストマシン
ホストマシンで共有フォルダのファイルを
編集すると仮想マシンへ反映される
    ↓
ローカルマシンに環境を用意したかのよう
に使えて嬉しい!

CentOS の環境で動作確認!

仮想マシン

共有フォルダ
*ねこび〜ん: http://ja.netbeans.org/nekobean
NetBeans + CakePHP2
●

NetBeans はPHP開発に対応

●

NetBeans 7.4 からアクティベイトが必要

●

●
●
●

インタプリタはローカル環境になくてもよい
(あるとできることが多分増える)
リモートデバッグ可能
CakePHP2プラグインあり
NetBeansはHTML5アプリもサポート!
まとめ
●

●

VeeweeとVagrantで簡単に仮想マシンの用
意が可能
仮想マシンにLinux環境を用意するとPHPの
学習に便利そう

15分でCakePHPを始める方法(Nseg 2013-11-09 )