CakePHP – 1.3のPHP7移行と延命 その壱

CakePHPとかの技術系の記事書くときはバージョンも書けやボケ!といいたくなる事がしばしばあるおっさん。そして世界はノイズ記事でできている。

さて、早速行ってみよう。

CakePHP1.3は現役である

そう、未だに現役なのだよ諸君。悪夢だろ?

しかし世界の終わりではない。

自分で勝手に世界の終わりにしてはいけない。君には世界を終わらせる権限も力も無い。もちろん俺にもない。

というわけで、なぜ2017年8月時点で、2015年にサポートが終了したCakePHP1.3を取り上げるのかというと、まだ現役で使われているからだ。

メンテナンスしながらCakePHP1.3を使っている人間はこの世にまだまだたくさん存在する、ということ。

『CakePHP自体オワコンだろ?ましてや1.3なんて・・・』

と思った人は精子からやり直すが良い。現に今、この時間、この瞬間も、EC2で動いてるCakePHP1.3がいくつあることか。

CakePHP1.3はまさに今でもいろいろな会社で利用されている。そして事実、稼働している。

どうしてもオワコンということにしたいのであれば、直接CakePHPの偉い人(マークさんとか)に文句いえば良い。もちろん己の気の小ささからそういう発言をするんだろうから、自分はそんなことすらできない小さい野郎だってことを今ここで思い知るだけだ(でも一度やってみればいい。噛み付いてみればいい。それが革新につながるかどうかは君次第)。

CakePHP1.3は生きてる

生きているというより生かされているといったほうが正確かもね。

と言うのも、CakePHP1.3は、PHPの設定を甘くするバージョンはPHP5.6まで という、今では無視できない環境下で動くように設計されている。

そして今その設定自体が、PHP7の登場により明らかに崩壊しつつある。

しかしクライアントはそんなこと知らんし、知ってても関係がない。

彼らはフレームワークを詳しく知ってる必要は全くなく、フレームワークを使ったWebサービスの内容の把握と、サービスの運用ができれば良いわけだ。何しろフレームワークの選定などは彼らにとってただの手段のための手段でしかなく、最終的なゴールは売上を上げることである。

つまり、

  • オンプレより維持費が安いし流行ってるからクラウドへサーバ移行しよう
  • よくわからんけどセキュリティ的に新しいものを使ったほうが良い
  • PHP7だと処理速度が飛躍的に向上してるらしい
  • じゃぁPHP7を中心にシステム概要書いてしまえ

という流れで、CakePHP1.3のまま、PHPだけ7になったりする。

もちろんCakePHP1.3がPHP7で動かないなんて話は彼らが知る由もないわけで、そして知らなくても当然問題ないし、むしろ知っていたらラッキーでしかない。

問題なのは、PHP7ではCakePHP1.3が動かないという理解と、それをクライアントに正しく伝えるスキルの有無だけだ。

今回は、PHP7でもどうにかCakePHP1.3を動かせないだろうかと検討した話をずらずら節操もなく書いて行こうと思う。

どうして動かないのか?と聞かれたときの答えの材料にはなるだろう。

CakePHP1.3をPHP7で動かす

結論を先にいうと、完璧に動かすことは不可能 だ。

不可能というより、現実的ではない、といったほうが良いだろう。

しかし、一定の条件が揃えば、PHP7でもCakePHP1.3を動かすことは可能である。

EC2で試してみよう

PC買い替えた後、Hyper-Vのインストールしかしてないので、DockerもVagrantも面倒くさい。

なので、無料枠が使えるAWSでEC2を使うことにする。

OS HTTPD CGI RDBMS MTA
Amazon Linux Nginx 1.10 PHP 7.0 MySQL 5.6 Postfix 2.6

EC2を建てる

AWSへのアカウント登録が済んでいることとする。IAMとかは取りあえず好きにしてもらいたい。

Amazon Linuxの『選択』をクリック。

無料枠であるt2.microのチェックボックスをチェック。

IPアドレスを割り当てたいので、『自動割り当てパブリックIP』を有効化する(これはDHCPなのでEC2再起動で変更される)。
念のため「誤った削除から保護」にチェックを入れておく。

サイズは無料枠にしておきたいので変更せず。

セキュリティグループは上記のようなものが設定してあればそれを使い、なければ新規で追加する。HTTPとSSHを追加しておけばOK。
自己証明書(オレオレ証明書)を使うならHTTPSも。

キーペアがあればそれを使い、なければここで作成する。一度作ると二度と変更できない(本当はできるけど)ので、ダウンロードしたファイルはなくさないようにしよう。

これでEC2インスタンスが作成され、初期化が終わればサーバに接続できるようになる。

OSセットアップ

俺はWindowsではRLoginというターミナルを使ってる。設定に癖のあるソフトだけど、一度すませば後はかなり使い勝手が良い。

ずっと愛用していたPoderosaは、フォースの力でスクロール時に時空が歪むようになってしまった。

RLoginでの接続設定はこんな感じ。

  • エントリー/コメント
    • 好きな名前
  • Server Address
    • 接続先
  • User Name
    • ec2-user
  • SSH Identity Key
    • 参照ボタンを押してダウンロードしたpemファイルを指定

これで接続が可能になる。

まずはOSのアップデートだ。

次にサーバの言語と時刻を設定する。

LANG=ja_JP.UTF-8に編集する

clockファイルはZONE="Japan"にしておく

LEMP環境をまとめて構築。

Linux、Nginx、MySQL、PHPなので、本来はLNMPだけど、NginXをEngineXとしてLEMPというらしい。
ずっとLNMPとして書いてきたから違和感あるけど、最近LEMPって言う人増えてきた。

Nginxはこんな感じ。

# vi /etc/nginx/nginx.conf

PHP-FPMはこんな感じ

# vi /etc/php-fpm.d/www.conf

NginxのWeb設定はこんな感じ。

# vi /etc/nginx/conf.d/virtual.conf

あとは起動設定など。

ディレクトリにSGIDビットを建てておく。
これでrootが作ったディレクトリやファイルもec2-userでちょめちょめできる。

MySQLはこんな感じ。

Set root password? [Y/n] が表示されるまでEnterする。
その後MySQLのrootアカウント用のパスワードを2回入力。

Postfixはこんな感じ。

postfixの番号(おそらく2)をタイプしてEnter

ブラウザでIPアドレスでアクセスしてみれば、Nginxのデフォルト画面になるはずだ。

PHPも動くので、/var/www/htmlindex.phpでも作り、中身は<?php phpinfo();とでも記述すれば、PHP設定の画面が表示される。

終わり

次回は具体的にCakePHP1.3をインストールして動かそうと思う。

突然話題が変わる

ダレノガレ明美が髪の毛切ったらしいけど短いのも良いね!