CakePHP3を触ってみました 〜composerって何やねん〜

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
お父さんお父さん! Composerが僕を苦しめる!

この記事を三行にまとめると

お父さんお父さん! composerが僕を苦しめる!
西野カナのごとく震えが止まらないかもしれない
今すぐパソコンを閉じて魔王に攫われたプリンセスを助けに行くのだ
まるで狼少年のように「CakePHP3が出たぞー」という声は前々から聞こえていたものの、何せ狼少年の言うことですから信じられなかった……わけではなくて、触る機会がなかなかなくて敬遠気味でした。

でも触る機会ができたので、しばらくの間、CakePHP3についてちょびちょび書いて行こうかと。触った中で詰まったとこや気になったことを書いて行こうかと。

今回はインストールまで。とりあえずサーバーに入れてページが表示されたぜってとこまで行ってみたいと思います。

手順だけを簡潔にっていうよりは、僕がやった中で出てきたエラーなんかもその都度書いていきますんで、だいぶ遠回りだったり手順の説明が前後するような記事になっちゃうと思いますが、ご勘弁を。必要なとこだけ拾って読んでもらえると助かります。

インストール作業を行うときは、rootユーザーでサーバーにログインしといた方が良いと思います。それから僕が使っているサーバーはAWSのEC2なので、それ前提での話になります。



composerって何さ?

CakePHP3をインストールするには、composerってのが必要になります。

ちょっと前から主流になりつつある(?)このcomposerとやらですが、ぶっちゃけよく分かっていません。あまり使ったことがないもんで。コンポーザー? ベートーベンとかシューベルトのことですかい?

zipで落とすのに比べて、何か大きな利点とかあるんですかね? どうせなら今まで通り、zipファイルをダウンロードして来て解凍してアップロードもできれば良いのに。個人的にはそっちの方が楽なんすけど。

まあ嘆いてもしかたないんで、やってみましょう。

サーバーにcomposerが入っていなければ、composerのインストールから始める必要があります。composerはやむれない(yumでインストールできないの意)ので、以下のコマンドを実行します。

//composerのインストール
# curl -sS https://getcomposer.org/installer | php

//ファイルの移動
# mv composer.phar /usr/bin/

これで「composer.phar」というファイルがインストールされ、同様にコマンドが使えるようになります。

ファイルはどこにあっても大丈夫ですが、「/usr/bin/」とか「/usr/local/bin/」の下に置いといた方が良いです。そうじゃないと、例えば「/var/www/」の下とかにcomposer.pharファイルがある場合、コマンドを打つ際に毎回フルパスを入力しないといけない。

///usr/binの下にある場合
# composer.phar ・・・

///var/wwwの下にある場合
# /var/www/composer.phar ・・・

毎回フルパスを書くのはめんどいし、時間もかかりますね。

仮に「/ファイルまでのパス/composer.phar」と書いて実行する場合、「composer.phar」と書くのに比べて3秒のロスがあるとすると……100回実行した時点で300秒のロスがある。300秒あればシューベルトの魔王だって演奏できる……のか?

お父さんお父さん! composerが僕を苦しめる!



まあとにかく、無駄を省くのに越したことはねーってことです。お前が言うなって声が聞こえてきそうですが……。

ちなみに、実行するコマンドを「composer.phar」ではなく「composer」にしたければ、ファイルを移動する際、移動先を「/usr/bin/composer」とか「/usr/local/bin/composer」にしてください。今回は名前を変えずに行きますが。



一度本体をインストールしてみる

composerが使えるようになったので、CakePHP3の本体をインストールしてみようと思います。ぶっちゃけ、この時点でインストールするといくつかエラーが出る可能性があるのですが、それでもあえてやってみます。

# composer.phar create-project --prefer-dist cakephp/app /本体を置くパス

–prefer-distの意味とかよく分かってないんですが、これでインストールが実行されます。本体を置くパスは任意で。でもまあ、ひとまずはURLでアクセスできる場所にインストールしてみるのが良いでしょう。本当はそういう場所じゃない方が良いけど、その辺のことは次回にでもやりましょう。

何もエラーが出なければ問題はないのですが、もし実行したとき、メッセージの中に「problem」という文字が出て来たら、何かしらのエラーが出ている証拠ですんで、それを解決してから改めてインストールする必要があります。

僕の場合は、大きく分けて以下の3つのプロブレムが発生しました。



– This package requires php >=5.4.16 but your PHP version (5.3.29) does not satisfy that requirement.

– cakephp/cakephp 3.2.x-dev requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.

– cakephp/cakephp 3.2.x-dev requires ext-intl * -> the requested PHP extension intl is missing from your system.



それぞれ、PHPのバージョンが古い、mbstringが必要、intlが必要というエラーなのですが、個別にもうちょい詳しく見ていきましょう。




PHPのバージョンを5.4にする

CakePHP3を使うには、PHPのバージョンが5.4.16以上じゃないといけないみたいです。僕が使ってたサーバーは5.3.29だったので、エラーが出ました。ちなみにEC2を使っている場合は、PHP5.4を使うには、Apacheのバージョンも2.4にしないといけない。

やむってupdateできるなら問題ないですが、もし無理な場合は、一度古いバージョンのものをアンインストールして、新しいバージョンを入れ直す必要がある。

//古いバージョンを削除
# yum remove php-* httpd-*

//PHP5.4とApache2.4をインストール
# yum install php54 httpd24

//Apache起動
# service httpd start

まだPHPやApacheをインストールしてないまっさらなサーバーなら、初めからphp54とhttpd24をインストールすればオッケーっす。



mbstring入ってる?

CakePHP3はmbstringが必須のようです。

//mbstringをインストール
# yum install php54-mbstring

//Apache再起動
# service httpd restart

Apacheの再起動を忘れちゃうと、たぶんインストールしても同じエラーが出るので、注意ね。この後のintlもそうだけど、PHP関連のパッケージをインストールしたら、その都度Apacheは再起動した方が良い。でないと、変わらずに「missing」だの「I missing you」だの言われ続けるかもしれない。西野カナのごとく震えが止まらないかもしれない。



インテル入ってる?

mbstringだけじゃなくて、CakePHP3にはintlとかいうやつも必要なようです。国際化関数とかいうものらしいですが、僕も詳しくは知らない。

intlのインストールはちょいめんどいです。めんどいということは僕のウザ長い説明が続くということでもあるのですが、ちょっと我慢して。我慢ならん、必要な情報にだけ会いたくて震えが止まらんのじゃあって人は、ずーっと下までスクロールして、インテルまとめてるまで移動してください。


intlはやむれないので、peclコマンドを使う必要があります。peclコマンドがない場合は、PEARをやむる必要があります。

//php-pearをインストール
# yum install php-pear

//intlをインストール
# pecl install intl

ちなみにPEARには5.4に対応するものがないみたい。「php54-pear」をやむろうとしても、そんなのはないって言われる。

インストールが進むとこんなメッセージ(↓)が出てくるけど、何も入力せずにエンターを押しても問題ないと思う。僕はそうした。

Specify where ICU libraries and headers can be found [DEFAULT] :




インストールが無事に終わると、以下のメッセージが出てきます。

You should add “extension=intl.so” to php.ini

php.iniに「extension=intl.so」を書いとけってことらしいですね。ここで逆らっても良いことはおそらく一つもないので、素直に書きましょう。

//viモードで編集
# vi php.ini

//Apache再起動
# service httpd restart



インテル入らない?

順調にintlのインストールが進めば良いですが、もしかしたら以下のようなエラーが出るかもしれない。

The php-devel package is required for use of this command.

php-develが必要だっていうエラーです。もしこれが出たら、php-develをやむる。こっちは5.4に対応するものがある。

# yum install php54-devel

php-develを入れたら、再度intlをインストールを試みてみましょう。



これで俺のサーバーもインテル入ってるぜ!! となれば良いのですが、今度はこんなエラーが出るかもしれない。

configure: error: no acceptable C compiler found in $PATH

コンパイラがねーよってエラーです。なので、これが出たらコンパイラをやむる。

# yum install gcc



よーし、今度こそオッケーだな!! と思ったのも束の間、もう一度intlをインストールしようとすると、さらに別のエラーが出てくるかもしれない。

configure: error: C++ preprocessor “/lib/cpp” fails sanity check

これもコンパイラ関係のエラーだと思うんですが、C++とかいうのが入ってないと出るエラーのようなので、これが出たら今度はc++を入れる。cだったりc++だったりチンチンプラプラだったりセクタムセンプラだったり、ややこしいねっ。

# yum install gcc-c++



さあ、これで今度こそintlを我が手に!! と思わせといて……。

ERROR: `/var/tmp/intl/configure –with-icu-dir=DEFAULT’ failed

まだまだ終わらないぞぉっ!!(CV:松岡修造)

どうやらintlをインストールするには、ICUとかいう、集中治療室だか国際基督教大学だか知らないけど、そういうパッケージが必要らしい。

# yum install icu libicu-devel



ここまでやれば、intlはインストールできるはず。もしこれ以外のエラーが出て来た場合は……すまん、今の俺には分からん。




インテルまとめてる

ちょっとintlのとこだけごちゃごちゃになっちゃったんで、一連の流れをまとめると、こんな感じです。

//パッケージのインストール
# yum install php-pear php54-mbstring php54-devel gcc gcc-c++ icu libicu-devel

//Apache再起動
# servicd httpd restart

//intlインストール
# pecl install intl

//php.iniを編集
# vi php.ini

//Apache再起動
# service httpd restart

たった五行って……最初からこれだけ見せろっつー話だなww



追記(2016/2/29)

intlはやむれるというコメントをいただきました。ありがとうございます。

intlとは別に、php*-intlっていうのがあるらしいです。そっちはやむれるそうで。

例えば、今回はphpのバージョンが5.4だったので、php54-intlをやむればオッケーかな。

# yum install php54-intl




改めて本体をインストール

たぶんこれでCakePHP3の本体をインストールできるようになるはずなので、改めてcomposerを使ってインストールしてみます。もしまだプロブレムがあったとしても、mbstringやintlのように何かしらのパッケージが入ってないせいで、サーバーが彼らに会えなくて西野カナ状態になってるだけだと思うので、エラーメッセージを読んで必要なものをインストールしてください。

それ以外の場合は……すまん、やっぱり分からん。

さっきも書きましたが、今一度CakePHP本体のインストールを。

# composer.phar create-project --prefer-dist cakephp/app /本体を置くパス

エラーが出てやり直す場合、同じ場所にインストールするなら、一度フォルダの中を空にしてください。フォルダの中に何かしらファイルが入ってると、エラーが出ます。

Project directory フォルダ名 is not empty.

無事にインストールが終わると、パーミッションがどうとか訊かれますが、たぶんYesで良いでしょう。

Set Folder Permissions ? (Default to Y) [Y,n]?



サクセース! そしてアクセース!

インストールにサクセスしたら、早速URLにアクセスしてみましょう。こんな画面(↓)が出ていれば、プロセスは完了だ。お疲れ。今日はもうこれ以上の作業は良いだろう。さあ、今すぐパソコンを閉じて魔王に攫われたプリンセスを助けに行くのだ。クリナップクリンミセス!!

cakephpのデフォルト画面ってことで良いのかな?

縦長だったんで、画面を途中で切っちゃってますが、まあこんなような画面が出ていればオッケーってことです。



画面上にエラーが出る場合

インストールした後、何もせずにURLアクセスしたら、たぶんデータベース接続エラーが出ると思うんで、その場合は接続先を設定しましょう。

CakePHP2の頃はconfigというフォルダの中にdatabase.phpってのがあって、そこに接続情報を書いてましたが、CakePHP3の場合は、configフォルダの中にapp.phpというファイルがあり、そこに書くようです。他にも、バージョン2の頃に書いてたcore.phpとかemail.phpの内容なども、このapp.phpに統一されてるようです。

記述する内容はほとんど一緒です。

//CakePHP2のdatabase.php
class DATABASE_CONFIG {
  public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'my_app',
    'password' => 'secret',
    'database' => 'my_app',
    'encoding' => 'utf8',
    'prefix' => '',
  );
}

//CakePHP3のapp.php
'Datasources' => [
  'default' => [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    'persistent' => false,
    'host' => 'localhost',
    //'port' => 'nonstandard_port_number',
    'username' => 'my_app',
    'password' => 'secret',
    'database' => 'my_app',
    'encoding' => 'utf8',
    'timezone' => 'Asia/Tokyo',
    'cacheMetadata' => true,
    'log' => false,
    'quoteIdentifiers' => false,
    //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
  ],
],

多少増えてる項目はありますが……まあ、そこまで大きな違いはないでしょう。

3の方はtimezoneの設定項目がありますね。デフォルトだと「UTC」になってますが、僕は「Asia/Tokyo」にしてみました。



MySQLが動かない場合

ここまで、僕と同じように同じものだけインストールした場合、MySQLは使えない状態になってると思います。だからそういうエラーが出ると思う。

# yum install php54-mysql php54-pdo

CakePHP2もそうだったかもしれないですが、3でMySQLを使うには、PDOってのも必要になるので、一緒にやむっときます。






サーバーを一からセットアップしてCakePHP3を入れる場合でも、これだけやればたぶん正常にページが表示されると思います。

ああ、Security.saltを変えろって指示は出てるかもしれない。まあそれは2の頃も一緒ですけどね。

これでも動かないとしたら……うーん、あり得そうなのは、mod_rewriteが動くようになってないとかかなぁ。

//httpd.confをviモードで開く
# vi /etc/httpd/conf/httpd.conf

//以下の部分を編集
<Directory />
  //この二行をコメントアウト
  # Options FollowSymLinks
  # AllowOverride None

  //この二行を加える
  Options All
  AllowOverride All
</Directory>

こんな感じ。

エラーは出てないけど、プリンセスに会いたいわけでもないのに震えが止まらないって場合は、風邪かもしれないから、温かくして寝ることをオススメします。






ということで、CakePHP3のインストール+αでした。

毎度毎度、無駄に長くてすみません。まあ、反省はしてないんですけど……^^;

次からは、具体的に中身を触っていこうと思いますんで、同じ部分に詰まった方の参考になれば幸いです。

あるいは、僕のやり方におかしな点があれば誰か指摘してくれる人が出てくるとありがたいです。僕自身、触っててよく分かんない部分がいくつかあるので、誰かに解決策を教えてもらいたい……。

そんじゃ、次回お会いするときまで、クリナップクリンミセス!



その他のCakePHP3を触ってみましたの記事はこちら
まとめという名の箸休め
 もしかしたら何か関連しているかも? 
 みんなからのコメント 
2015年10月29日 19:02:46
づや
けっこういろいろ変わったよねぇ
続きに期待している
2015年11月02日 17:23:34
まっち~(管理人)
うむ。ここは良くなったなぁと思うところもあるけど、使い方がいまいち分からんくて悩ましいところもあったりで……まあ、もう少しいじり倒してみたいと思っております。
2015年11月04日 14:17:23
づや
Modelがいろいろ変わっててまいったよ
そこの記事に期待している
2015年11月06日 12:52:18
まっち~(管理人)
うーん、そうねぇ。俺は今のところ、entityが上手く使いこなせてない感じです。何となくこんな感じなんだろうって思いながらいじってますが……その辺についてはいずれ触れるつもりです。

でも個人的に今一番苦戦してるのは、validatorのところかなぁ。やりたい処理が思うように実装できない。
2016年02月28日 13:49:40
匿名
intlはyumでインストールできましたよ

#yum install php55-intl
2016年02月29日 14:13:46
まっち~(管理人)
おお、そうなんですか。intlじゃなくて、php*-intlってのがあるんですね。僕はphp5.4でやったから、php54-intlだったらyumで良かったのか。
ありがとうございます。