CakePHPで継続的インテグレーションやってますかー!
こんにちは!あすけんダイエットの方からやってまいりました。@hampomです。
さて、リリース前に聞いていた噂通り、今までのバージョンとはガラリとスタイルが変わったバージョン3系ですが、私も、これまでバージョン1系ばかりで開発していましたが、この秋ぐらいからめでたく業務でバージョン3系を採用!開発を楽しんでおります!
タイトルにも書いた「CakePHPで学ぶ継続的インテグレーション」は、CakePHPを使って学ぶ内容となっていますが、まだCakePHP3がリリースされる前に出版された書籍のため、そのままではCakePHP3を用いて動かせないのではないか?ということで、CakePHP3が動く環境を構築してみます。
動作確認環境
- Windows 10
- ChefDK 0.10.0
- VirtualBox 5.0.10 r104061
- Vagrant 1.7.4
- vagrant-omnibus
環境構築リポジトリをゲット
「CakePHPで学ぶ継続的インテグレーション」ダウンロードページに、環境構築用のリポジトリへのリンクがありますので、こちらからVagrantfileやChefのクックブックなどを一式ダウンロードします。
好みに応じて、GitHubアカウントをお持ちの方はフォークしてからcloneしても良いですし、ZIPファイルをダウンロードしても良いと思います。
私は、後々のカスタマイズの可能性も考えてフォークしました。
一式はどちらでも、お好みの場所に展開してください。指定はありません。
ディレクトリ作成
早速、vagrant up develop
と行きたいところですが、このまま実行すると怒られます(怒られた)。ソースを配置するapplication
フォルダを共有フォルダとして利用しますので、展開したディレクトリにapplication
ディレクトリを作成しましょう。
Berkshelf
Berksfileの更新
1行目のsource
の定義を修正しましょう。
以前のhttp://api.berkshelf.com
からhttps://supermarket.chef.io
に変更になりました。
capistranoレシピの修正
うーん。 ruby2.0をインストールしているにも関わらずruby1.9系がデフォルトバージョンになってしまう様でcapistrano
に依存するnet-ssh
のインストールに失敗しました。
==> develop: ------------------------------------
==> develop: Expected process to exit with [0], but received '1'
==> develop: ---- Begin output of /usr/bin/gem install capistrano -q --no-rdoc --no-ri -v "3.4.0" ----
==> develop: STDOUT:
==> develop: STDERR: ERROR: Error installing capistrano:
==> develop: net-ssh requires Ruby version >= 2.0.
==> develop: ---- End output of /usr/bin/gem install capistrano -q --no-rdoc --no-ri -v "3.4.0" ----
==> develop: Ran /usr/bin/gem install capistrano -q --no-rdoc --no-ri -v "3.4.0" returned 1
==> develop:
==> develop: Resource Declaration:
==> develop: ---------------------
==> develop: # In /tmp/vagrant-chef/1c38fa8d8055eeb233d4d85fbb882293/cookbooks/capistrano/recipes/default.rb
==> develop:
==> develop: 5: gem_package "capistrano" do
==> develop: 6: action :install
==> develop: 7: end
ということで、仕方がないのでcapistrano
のレシピに追記します。
すでにある、gem_package "capistrano" do
の上の行あたりに追加しましょう。
site-cookbooks\capistrano\recipes\default.rb
gem_package "net-ssh" do
version '2.9.2'
action :install
end
phpenvレシピの修正
CakePHP3はPHPの国際化関数を利用するため、拡張モジュールを追加でインストールする必要があります。
手動でインストールする場合はsudo apt-get install php5-intl
を実行すれば良いのですが、せっかくですのでレシピを修正し自動化しましょう。
PHPパッケージを列挙している定義にphp5-intl
を追加します。
site-cookbooks\phpenv\recipes\default.rb
# 配列で列挙しているパッケージをインストールする
%w{curl php5 php5-cli php5-fpm php5-mysql php-pear php5-curl php5-xsl php5-mcrypt php5-intl mysql-server-5.5 nginx git}.each do |p|
package p do
action :install
end
end
クックブックのインストール
$ berks vendor cookbooks
修正したクックブックと、必要なクックブックをネットからダウンロードするために、berks
コマンドを実行しましょう。
Vagrant起動!
いよいよ起動です。vagrant up develop
コマンドを実行しましょう。
結構長いこと待たされます。プロンプトが戻ってくるまで、気長に待ちます。
==> develop: Chef Client finished, 4/41 resources updated in 40 seconds
==> develop: [2015-12-16T13:31:02+00:00] DEBUG: Forked instance successfully reaped (pid: 14120)
==> develop: [2015-12-16T13:31:02+00:00] DEBUG: Exiting
フィニッシュ!
ついに終わったら、ブラウザで http://192.168.33.10/ にアクセス! phpinfoの出力がされていたら、パッケージインストールが終わり環境構築は完了です。
CakePHP3のインストール
ドキュメントルートは/var/www/application/current/app/webroot
ですので、それにあわせてインストールします。
vagrant@develop:/var/www/application/current$ php composer.phar create-project --prefer-dist cakephp/app app
さあ、再度ブラウザでアクセスしてみましょう!どうですか!?
おわりに
環境構築編はこれで終わり!
ここから先、Jenkinsを用いたテストは、今まさに業務でも実施していますので、テストからデプロイ(Deployerを使うと思いますが!)まで、少しずつアップできればと思います!
書籍からの差分で、CakePHP3にあわせて環境を構築しました。
書籍は私も会社の机にいつでも読めるように置いてあります。まだまだCakePHP2系の環境もたくさんあると思いますので(もちろん、私の周囲でも提供中のサービスとして動作している環境があります!)、これからもしばらくは活用できそうですね。
CakePHPer・スマホエンジニア募集中!
AWSを使い倒しつつ、最新のCakePHPでサーバーサイド開発に興味のある方。サービスの北米進出に興味のある方(私は、ここでお仕事してます!)スマホアプリならお任せという方まで、エンジニア募集中です。
ご興味のある方は、こちら → 会員60万人が利用する食事管理アプリ『あすけん』、海外進出に向けてサーバーサイド/モバイルアプリ開発エンジニアを募集!
お待ちしております~