Home > CakePHP | PHP > CakePHP 2.3 の新機能 ServerShell の話

CakePHP 2.3 の新機能 ServerShell の話

この記事の所要時間: 627

CakePHP 2.3 に追加された機能 ServerShell についてです。

CakePHP Advent Calendar 2012の11日目です。昨日は社会派ブロガーに仲間入りした yandod さんの「カンファレンスなどで海外からゲストを呼ぶ際に注意すること」でした。いつも横で見てるだけですが、海外から人を招くのは大変ですね。

さて11日目の今日は CakePHP 2.3 に追加された ServerShell を実装して、pull request したという話を。

ServerShell

ServerShell は CakePHPアプリケーションを動かすための httpd サーバを起動する機能です。Apache などを設定せずとも簡単にCakePHPアプリケーションを起動することができます。

使い方

まず、CakePHP2.3RC1 をダウンロードします。github に zip パッケージがあるのでこれをダウンロードするのが簡単です。

https://github.com/cakephp/cakephp/archive/2.3.0-RC1.zip

zip を解凍して、ServerShell を実行します。

$ ./app/Console server

デフォルトでは80ポートでListenするので、すでにApache等を実行している環境では、-p でポートを変更すると良いでしょう。

$ ./app/Console server -p 8001
Welcome to CakePHP v2.3.0-RC1 Console
---------------------------------------------------------------
App : app
Path: /path/to/cakephp-2.3.0-RC1/app/
DocumentRoot: /path/to/cakephp-2.3.0-RC1/app/webroot
-------------------------------------------------------
built-in server is running in http://localhost:8001/

ブラウザで最後の行に表示されたURL(http://localhost:8001/)にアクセスするとおなじみの画面が表示されます。

ああ、簡単:D

PHP5.4 以上が対象

この機能は PHP5.4 以降でのみ実行することができます。PHP5.4 未満で実行すると下記のようにエラーが表示されます。

仕組み

ここまでご覧になった方はおおよそ予想が付くと思いますが、実は ServerShell は PHP5.4 で追加されたビルトインサーバをラップしただけです。また、ビルトインサーバ上で動かすための改良を少し加えています。

ビルトインサーバをベースとしてますので、ServerShell は開発環境でのみ利用するようにして下さい。

ソースはこちらにあるので気になる方はどうぞ。

https://github.com/cakephp/cakephp/blob/2.3/lib/Cake/Console/Command/ServerShell.php

作った経緯

以前から CakePHP アプリケーションを簡単に動かすために httpd サーバを CakePHP パッケージに追加したいと思っていました。(こんなの作ったりしてみました)PHP5.4 のビルトインサーバの登場により簡単に実現することができました。

ハンズオンの勉強会を開催していても、やはり環境構築でつまづく方が多かったので、これを使えば簡単に CakePHP を試すことができます。

まだ試していないですが、CandyCane や baserCMS など CakePHP で作られたシステムも .htaccess が CakePHP デフォルトのままであれば動作すると思います。

pull request から取り込まれるまで

7月に福岡でCakePHP翻訳合宿があったのですが、その際に基本的な実装を行なって、pull request を送りました。

反応がいまひとつ予想できなかったのですが、以前にCakePHP1.3向けビルトインサーバ対応パッチを pull request して、取り込まれたこともあったので、とりあえず送って見ることにしました。

細かな指摘は多数あったのですが、結果としてはそれほど反対意見もなく、最初の pull request を投げてから 3 週間ほどして取り込めることになりました。

いくつかあった指摘事項は以下のようなものです。

名前が微妙

ServerShellの「Server」という言葉が汎用的過ぎるのでどうだろ、という意見がありました。

確かにこれは理解できます。別名として「PhpWebserverShell」や「HttpServerShell」という意見もあったのですが、コンソールから入力するのが長いので「ServerShell」で進めました。結果的には、このコマンドで php+web server以外が起動するのは想像できないという意見もあって、ServerShell のままとなりました。

2.3 ブランチへ

はじめは master(当時バージョンは2.2)へ pull request を送信したのですが、2.3 ブランチへ投げて欲しいというリクエストがあったので、2.3 ブランチへ送信し直しました。

typo, インデント, メッセージ など細々とした修正

大筋は問題無かったのですが、typo やインデント、メッセージの書き方などは多数指摘がありました。やっぱり他人の目で見るとボロボロ出てきますね><コードレビュー大事です。

とくに CakePHP 本体に取り込まれるコードなので、CakePHP のコーディング規約に乗っ取るようにとの指摘がありました。コーディング規約のチェックには、phpcs を使っているようなので、CakePHP 用のルールでチェックを行い、チェックが通るまで修正を行いました。

やりとりが楽しかった pull request

実際に送信した pull request がこちらです。

https://github.com/cakephp/cakephp/pull/713
https://github.com/cakephp/cakephp/pull/714

これまでいくつか pull request を送信したり、パッチを送ったりはしていたのですが、不具合の指摘が多く、あまり議論になるようなことはありませんでした。

今回も実装の内容についての議論は無かったのですが、細かなことで指摘を受けて、こちらの意見を言って、といったやり取りが有意義でした。pull request を見てもらうと分かりますが、変な英語でもPHPのソースがあるので、それなりに意図は通じたかなと思ってます。

やっぱりこういうのは楽しいですね。

PHP5.4 が普及するのはもう少し先かもしれませんが、機会があれば ServerShell を使ってみて下さい。

Pocket

follow us in feedly

Home > CakePHP | PHP > CakePHP 2.3 の新機能 ServerShell の話

検索
フィード
メタ情報

Return to page top