肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

モダンPHP勉強会 #2 やります!

今回のテーマは、モダンなテンプレートエンジン Twig です!

パーフェクトPHPの発売&増刷記念トークとサイン会、プレゼントもあるよ!(多分)
みんな参加してね!


パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

ゲキカワXdebugでモテモテPHP開発

今や PHP で開発するときに Xdebug は誰もが当然つかってるよね!!
まあ、「俺はそのままのエラーが好きなんだ」って人は置いておくとして。。。 大体の人は、stack traceがあると嬉しいとか、var_dump() 見やすいとか、そういうことで Xdebug ってのは愛用だとおもうんですよ!
IDE のひとは remote debugger としてつかってるのかな?

で、Xdebug、わかりやすいんだけど、どうもカワイサが足りないよね?なんかこう、毒々しいというかなんというか。。 開発中にエラーだしたときちょうど後ろをかわいいデザイナーの女の子が通りかかって画面が目に入ったとき「プログラマーってなんて品のない画面を見てるのかしら」なんて思われたらモテないよね!!

ってことで、まあ冗談はこのへんにしておいて、見た目が綺麗だとやる気も出る(?)ってことで、Xdebug の出力をかわいくしてみる。

Stylish を入れる

個人的にはブラウザはなんだかんだいいつつOpera派だけど、Web開発のときはやっぱり Firefox なので、対象は Fx のみ(追記: id:riaf によってChromeにも対応されたよ!merge済み。)。ユーザCSS管理用の拡張機能である Stylish をインストール。

User CSS をインストール *1

これをインストール。Stylish の使い方は適当にググる

すると ... !?

毒々しかった Xdebug のエラー画面が。。。

かわいくなった! (縮小して表示してるよ。)

var_dump() も。。。?

かわいくなった!

*2

Xdebug の設定

結構デフォルトのまま使ってる人が多いけど、ローカル変数のdumpとか、traceに引数の内容も表示するように設定しておくと便利。ただまあ、あんま出されると困るので var_display_max_depth もいっしょに設定しておくと良いかも。*3

  • Xdebug の設定例 (zend_extensionのところは、各自 xdebug.so へのpathに置き換えてね)
zend_extension=/usr/lib/php5/20090626/xdebug.so
xdebug.var_display_max_depth="2"
xdebug.show_local_vars="On"
xdebug.show_mem_delta="On"
xdebug.trace_options="4"
xdebug.collect_includes="On"
xdebug.collect_params="4"
xdebug.collect_return="On"
xdebug.collect_vars="On"
xdebug.dump_globals="On"
xdebug.scream="1"

あと、注意点としては、php.ini で html_errors が設定されてないとエラーがHTML整形されないよ。まあ、デバッグ環境では、これは On にしておきましょう!

宣伝

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

*1:class xdebug-なんちゃらが出てくるのって開発環境くらいだろうから、とおもって url-prefix とか設定してないんだけど、これってお行儀が悪いかな?まあいいか?

*2:ちなみに、エラー画面は PHP 5.3 でうごかしたばあいの Ethna 。。。。(ひどい

*3:というか、 show_mem_delta がうまいこと効いてない気がするんだけど気のせいですかね

パーフェクトPHP (と、WEB+DB PRESS Vol.59)

という本を書きました。

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

対象読者は

  • PHPの入門書を読んだことがあり、PHPの本質をより完全に理解したいと思っている人
  • 日常的にPHPを使っているが、知識にあやふやな部分があり不安のある人
  • PHPの構文は完全に理解しているが、現場での開発経験が少ない人
  • 他のプログラミング言語を使いこなしているが、PHPはあまり知らない人

です(本書 はじめに から引用)。PHPって、入門書やレシピ本はかなり多くあるけど、こういうターゲットのPHP本ってあまりないと思います (オライリー本とかが近いかも)。

来月の11/12に発売予定で、id:Fivestarid:gusagi と、1年以上前から書いてきた本です。
僕の担当は、Part 2 のPHPの言語仕様と、Part 6 のPHPレシピでした。言語仕様に関しては、他のPHP本には書いてないような結構深いところまで書いてあるつもりなので(たぶん)、既にPHPを知ってる人にとっても面白いんじゃないかなーと思ってます。PHPレシピは、内容的には色々迷ったんですが、PEARなどの具体的なライブラリの使い方を紹介するのではなく*1、流行りものに左右されずにそれなりに長く使っていける書籍にるようなところを意識して書きました。例えば Part 6 の最初の章は、「PHPマニュアルの読み方」として、マニュアルの使い方とか、検索の仕方とか、アドレスバーから実は検索できるよね、とか、そういうコトかいてたりします。ね、素敵でしょ?(←

PHPカンファレンスで id:Fivestar がLTしましたが、素敵な本になったんじゃないかな!と個人的にも思ってるので、是非チェックしてください!

以下ぼくのあとがきから引用:

巷では、「PHPプログラミング言語ではなく、Web用のテンプレート言語である」などと言われることもあります。PHPはもともとプログラミング言語として作られたわけではなく、目の前にある問題を解決しようとして作られた「ツール」であり、現在もかわらずそういったポリシーで開発が進められていると言います。
とはいえ、長年PHPの開発が進められるなかで、PHPにも様々な「プログラミング言語」としての機能がとりこまれ、仕様もどんどん複雑になってきました。今や、ツールとしてのPHPも、便利に正しく使いこなすためには、学習はかかせないものとなっています。

筆者らは、すぐに使える「ツール」の解説書ではなく、流行やトレンドに左右されない、基本的なところをしっかりと身につけ、本書に書ききれなかったことを読者が自分の力で学んで行けるような本にしたい、という思いで本書を執筆しました。また、入門レベルの次のステップに位置する読者にとっても、質の高い技術書として活用してもらえるような本を目指しました。

既にプログラミングの基礎はある読者や、PHPを既に使っているような読者にとっても、少しでもPHPやWebアプリケーションを理解・習得する糧となり、「そうだったのか!」といった内容に出会っていただき、PHPで、楽しいアプリや便利なアプリ、好きなモノをどんどん産み出してもらえたなら幸いです。

  • -

柄沢聡太郎

Amazonでも予約してねっ!

あと、僕のトコは、 id:moriyoshi とか、 id:Hash に査読してもらったりして、本当にお世話になりました。ありがとうございました!この場を借りてお礼をば。
ゆどうふもなんか中途半端に見てくれたような見てくれてないような。。まあ、ありがとうございました!w

WEB+DB PRESS Vol.59 PHP特集

今月23日に発売される、WEB+DB PRESSPHP特集の最初の章を書きました。

第1章:最新機能の活用とPHPの最新動向をつまみ食い
PHP 5.3のおさらいと先取りPHP 5.4……柄沢 聡太郎

WEB+DB PRESS Vol.59|技術評論社

なにをしたかというと、PHP 5.3の名前空間と無名関数とかをふりかえりつつ、PHP 5.4のTraitsとFunction Array DereferencingとType Checkingを紹介してます。まだはえーよ、と思いましたがそれは気にしないことで。。。。w (このへんは入らない可能性もあるよ!って紹介してます)
正直、発売までにType Checkingとか廃止になるんじゃないかとビクビクしてます。

まあ、それはともかく、後半はアシアルの田中さんがSPL、グリーからは、かじさんが5.3から入ったGCのCycle Collector、ふじもとさんがGree FastProcessorを紹介してたり、こちらもなんか変な深さのある特集なので楽しいと思いますw

こちらもぜひぜひ!

WEB+DB PRESS Vol.59

WEB+DB PRESS Vol.59

  • 作者: 竹内真,猪狩丈治,矢野りん,中島拓,伊藤敬彦,角田直行,はまちや2,柄沢聡太郎,田中正裕,梶原大輔,藤本真樹,増井俊之,加藤幹生,藤澤瑞樹,木村俊也,永井幸輔,中尾光輝,平田雄一,渡辺智暁,藤吾郎,原悠,浜本階生,八柳幹太郎,uupaa,塙与志夫,ミック,大沢和宏,中島聡,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2010/10/23
  • メディア: 大型本
  • 購入: 9人 クリック: 180回
  • この商品を含むブログ (20件) を見る

ということで

ここしばらく日本語ばっかりかいてましたので、そろそろコード書いていこうと思います。(何

*1:とはいえAPCとXdebugは紹介しちゃったけど

PHPカンファレンス2010を開催しました&発表しました

今回も、去年に引き続き広報として(でも今回は広報のリーダーとしてとりまとめたり)スタッフとして参加し、フレームワークアップデートのLTではEthnaに関する発表をしてきました。
なんとなく、開催者としての思ったトコロと、発表者としての言い訳を、つらつら書きたいと思います。

開催者のひとりとして、主観で語るPHPカンファレンス

  • 某Kaigiではありませんが、PHPカンファレンスでも、最近循環がうまくいってない部分があるな、と感じています。いや、正確には、人の循環は少しずつしてるんですが、やはり、みんな動ける時間がものすごく限られていて、一部の人に負担が偏るということが本当に見受けられました。まあ、どのイベントでもそれなりにあることだとは思いますが、やっぱり大変なもんは大変で、正直開催直前は、「PHPカンファレンスもこれで最終回でいい」と本気で思ってました。が、まあ、開催してみると、やっぱりいろんな人に楽しんでもらえたり、良かったっていってもらえたり、まあ、なんだかんだ自分も楽しむことができたりで、まーまー、大変なのは大変だけど、それはそれで楽しいんだよねって思えました。(が、来年はもっと動ける人がほしいよ。。)
    • 今回は、特にゆどうふ委員長と、Webサイトやパンフレットのデザイン・更新作業などもろもろやってくれた id:kanreisa、プログラム・スポンサー担当共々よく動いてくれた id:Fivestar にお礼を言いたいと思います。
    • あと、僕が言うのも身内びいきっぽくてナンですが、nequal の面々は本当によく頑張ってくれて、id:yuchimiri はスポンサーディナーとかパンフレットとか、慣れないのに頑張ってくれたし、id:wozozoid:riaf は去年に引き続き技評さんのレポートうまくつないでくれて当日スタッフの方のサポートにもはいってくれたし、id:anatoo はもうだめやーって言ってるし、id:onodes は来ないしで、本当に頑張ってくれたと思う。ありがとう!
  • 当日スタッフを募集したのは今回からの試みですが、これも、本当にやってよかったと思います。いつもはなんとなく早く来た人が会場設営手伝ってくれたり、なんとなくなんとなくでなんとなくやってきてたけど、やっぱり、一緒に集まって、やろー!ってやったり、Tシャツきたり、そういう一体感大事だよね、とか。あと、普段勉強会とかで全然会ったこと無い人とかも参加してくれたりして、嬉しかったです。なにより、本当に、当日スタッフのみんながいなかったらカンファレンスが成り立たなかった。ありがとうございました!これからも色々絡んでくれるとうれしいなあ!
    • あ、いつもどおり、なんとなく早くきて手伝ってくれた人も結構いました。ありがとうございました!
  • 広報として
    • 広報としては今年から色々頑張った点はあって、告知から開催までの間のフォローアップをなるべくできるように、というのは心がけた。とはいえ、主にTwitterだったんだけど。
    • あとは、トライコーンさんがシステムを提供してくれたおかげで、リマインダーや、実後アンケートの配信なんかもできて、本当によかった。ありがとうございました。
    • 反省点としては、ビジネスデイの広報と、テーマの宣伝、参加者の期待値のすり合わせが全然できていなかったことで、ビジネスデイは、今年は「ソーシャルアプリとクラウド」という2大バズワードでいこう、と最初にテーマとして決めたはずなのに、そこを全然参加者に伝えられていなかった。だから、お願いして発表にきてくださった方で、参加者とのマッチングがちゃんとできてなかったセッションができちゃって、そこは本当に申し訳ないな、と思いました。。
      • 当日も「ソーシャルアプリネタが多いけど、流行ってるの?」とかつぶやかれたりもしたけど、いや、そうなんです、そういうネタで発表者集めたんですもの。。。って、このへんがちゃんと宣伝できていなかったのは僕のせいだったりする気がする。すいませんでした。
    • Twitter は、Followerもけっこうついてくれて、おかげでうまいこと情報伝えられたかな、という部分もあるし、それは良かったかな(伝えられる人に偏りはあったかなーとは思う)
  • 無線LAN
    • ネットワークスポンサー、本当に正解だったと思う。快適だった。MSさんありがとう。
  • あとはもうだいたい実行委員のほうで反省すればいいんだけど、単にものすごく準備が遅かった。ううーん、毎年これは反省するんだけど、なかなか。来年はちゃんとじゅんb。。んー、来年、やるのかな?w
  • まあ、そうは言っても僕が見えてないところもたくさんあるし、見えてないところで色々動いてくれた人もたくさんいたわけで、みんなありがとうって感じですね。
  • あとは、例年だと、燃え尽き症候群でみんな反省しなきゃーっていいながら放置しちゃうんだけど,今年こそはちゃんと反省点まとめて来年(あれば)につなげられるようにしたいな、と思う。

発表者のひとりとして、言い訳をするPHPカンファレンス

  • いや、まあ、Ethnaは、とりあえずえすにゃんで盛り上がったから良いんだけどw、それはそれとして、本当にこの1年あまり動けなかったなーという反省。
    • id:maru_cc になかった割には、ある風にはなしてた、ってほめられた(それはほめられてるのか?)
  • まあ、色々考えてるのは事実なんで、次の1年、胸をはってあれやったこれやったって言えるように色々アウトプットしていきたい。

で、発表資料おいときます。

適当なまとめ

超つぶやきエントリで申し訳ないけど、あんまり放置しても忘れちゃうから、一応これでポスト。

適当なまとめ。

  • 大変だった
  • が、楽しかった

PHPカンファレンス2010参加者受け付けてます&しゃべったりします

PHPカンファレンス2010参加登録が始まっています。
私も、テックデイのフレームワークアップデートにて、Ethnaに関する発表をします。まあ、Ethnaに関して言えば、この1年あまり動いていなかったのですが、色々引き伸ばして頑張って発表します!(笑

その他にも ( プログラム « PHPカンファレンス2010 )、

  • ビジネスデイでは、今流行のウェブネタで、PHPerでなくても楽しめる内容になってるかとおもいます。ソーシャルアプリや、クラウドなんかに焦点をあてたプログラムになってます。
  • テックデイでは、PHPの開発者Rasmus大先生が来日するほか、PHPC++にトランスレートして高速化してしまおうという野心的なプロダクト HipHop for PHP の開発者でFacebookのエンジニアScott MacVicarなどビッグタイトルが揃っています。
  • また、PHPの内部実装を知る国内屈指のPHPエンジニアたちとRasmus大先生のパネルディスカッションもきっと最高のショーになるとおもいます!
  • 懇親会では、Perlの(?)あの大物がLT予定との噂・・・・!見逃すわけにはいきませんね!

と、いうことで、みなさん、PHPカンファレンスにきてね!!

MessagePack ハッカソン 第2回に参加してきた

お久しぶりです。
今日は MessagePack Project のさらなる発展のためのハッカソン(?)に参加してきました。

自分は、「PHP拡張機能作る」のが目標でした。*1
いや、実は、MessagePackがリリースされた当初から言っていたのに、なんかグダグダしているうちに2つほどすでに実装があるという状況で、とはいえ、どちらにも今のところろ課題があるので、提案されてる実装から、より良いものを作る+peclでの公開を目指す、ってところが実際の目標ってところでしょうか。
とはいえ、拡張機能とか作ったことがないので、昨日からちょいちょい予習しつつ、今日、参加してきました。

で、まあ細かいことはともかく、PHPに関して言えば、

  • 今headに入っているバージョン では、unpacker が Unbuffered しかない。(+グローバルにバッファをもつ)のが嫌だ
  • 提案されているバージョンでは、実装が pack_templateやunpack_templateというMessagePack側から提供されているマクロを使わずに実装している
    • が、PHPのセッションシリアライザに指定できるのが良い。
    • Unpacker が Buffered API を提供してるのが良い

あたりの良いところをとって実装できないかなーと考えていました。

それと、オブジェクト(クラス)のpackに関しては、他の言語間との互換性やプロトコルに準拠する意味で、プロパティ名を持たない、ただの配列としてpackする方向で実装の変更を行うことにしました。unpack時に取り出される順番に応じてプロパティに詰め込むなど、運用でカバー。PHPだけでpack/unpackするだけなら、serializeと同じような挙動で良いんですけどね。

で、実装できたところは、

  • オブジェクトのpackの実装変更
  • その他pack実装のリファクタ
  • unpackerのクラス設計

unpackerは実装は全然すすみませんでした。。うーん、まあ、予想通りかな。ただまあ、イメージは湧いたので、地道にがんばろう。

これからの予定など

  • unpacker 全般
    • MessagePackUnpacker の実装
    • MessagePackIterator の実装
  • テスト書く

最後に

会場をかしてくださった楽天のみなさま、古橋くん、お疲れ様でした。
楽しかったです!

*1:いや自分なんかになにができるかわからないよーショボプログラマでごめんよ、という点はあったのだが、少しでもなにかやりたいなーと思って。

モダンなPHPの開発環境の構築方法

誰か書くんじゃないかと思いつつ、まあ、お決まりのパターンとしてPHP版も書いてみよう。
PHPのこと見てると、書き方とか取り巻く環境ってあんま変わってないなーとか思いつつ、そして何がモダンなんだっけ?新しければいいのか?って話だけど。

一般的な OSX 環境および Linux 環境における、モダンな PHP 開発環境の構築方法についてまとめてみた。最新のPHPxdebugがあれば十分。

PHP 5.3.2 のインストール

ソースから入れてた時期もあるけどやっぱパッケージが楽だな。。オフィシャルじゃないリポジトリを使えばパッケージで入れられる。
pearpeclは、パッケージ入れるときに一緒に入れちゃう。

pearpecl そのものは、PHPよりも頻繁にバージョンアップされるし、パッケージになってたりなってなかったりの管理が面倒だから基本的にpear/peclコマンドで。

Mac OS X

Snow LeopardならデフォルトでPHP 5.3.1入ってる。が、Mac Portsから入れるのがいいならPortsから入れる(Perl は脱Portsの流れなの?)。最近はvariantsで入れるのではなくモジュールごとにパッケージが分けられるようになった。ばんざーい。でもpearコマンドやらpeclコマンドのために +pear は必要っていうね...

% sudo port install php5 +pear
% sudo port install php5-mbstring

ports で入れたPHPを使うには、パスの調整が必要(以下は、OpenSolaris(!)、Mac(ports), Linux全般対応版)。

PATH=$HOME/bin:/usr/gnu/bin:/opt/local/bin:/usr/local/bin:$PATH:/sbin:/usr/sbin
Debian

squeeze ならデフォルトで PHP 5.3.3 が入る。
以下は、lenny の場合。dotdeb から PHP 5.3 むけのaptパッケージを入れる。

2012/1/19追記: dotdeb の source URLが変更されています。mirror リストの中から Japan のものを使えば良いと思います。 http://www.dotdeb.org/mirrors/

% sudo vim /etc/apt/sources.list

#末尾に以下の2行を追加
deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all

% sudo aptitude update
% sudo aptitude install php5 php5-dev php-pear php5-mbstring

update の時点で、以下のようなエラーが出る場合があるが、

W: GPG error: http://php53.dotdeb.org stable Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY E9C74FEEA2098A6E
W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれません

その場合は、以下のように対応(参考 Dotdeb packages are now signed! | Dotdeb)

% gpg --keyserver keys.gnupg.net --recv-key 89DF5277
% gpg -a --export 89DF5277 | sudo apt-key add -
CentOS

epelとremiを使えばyumで入る。remiはデフォルトでenabledにならないので、enabledにする。

% sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
% sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
% sudo vim /etc/yum.repos.d/remi.repo

### [remi] セクションで 0 を 1 に
enabled=1

% sudo yum install php php-devel php-pear php-mbstring

xdebug

開発環境なら当然xdebugは入れる。

% sudo pecl install xdebug

最後にiniに extension=xdebug.so って書け、と出てくるが、正しくは zend_extension。php.ini には書かないで、Config File Scan Dir に xdebug.ini ってファイルを作成して、そこに書く。

に、

zend_extension=/path/to/xdebug.so

を記述。zend_extensionには絶対パスを書かなければいけないので、分からない場合は pear config-show の ext_dir を参考にすること。

deploy の手法

pearのディレクトリをまるごとrsyncでもいいな。peclは、アーキテクチャによって違うから個別にインストールしたほうが良い。

xdebug

xdebugはdeploy環境にいれるなよ!

APC

開発環境には xdebug 必須だけど、本番環境にはやっぱAPCでしょ。PHP 5.3対応版はbeta。

% pecl install apc-beta

メモリなどの設定は、pear の doc_dir の doc/APC/INSTALL を参考。以下はdebianの場合のファイルの場合。

% sudo vim /etc/php5/conf.d/apc.ini

extension=apc.so

apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1

apc の管理画面は、pearphp_dir から apc.php をウェブでアクセス出来る場所にコピーして使う。

複数アプリケーションを開発していて、それぞれの依存モジュールがそれぞれことなる場合の運用

アプリケーション以下に lib/ などとディレクトリを作って、その中に pear コマンドなどでパッケージを入れる+ include_path を調整するのが良い(まあ、だいたいフレームワークがやってるよ)。

アプリケーションの中で include_path を調整するには以下。

<?php

set_include_path('/path/to/lib' . PATH_SEPARATOR . get_include_path());

ちなみにシステムのpearディレクトリじゃなくて任意のディレクトリのpearのインストールをするには、 .pearrc を作れば良い。kayacさんのブログをご参考のこと。


余談だけど、Ethnaなら pear-local コマンドってやつがあるよ!

異なるバージョンのPHPをまとめて入れる場合

id:hnw 先生による phpall を使って入れる。複数環境でテストを実行したい場合には非常に役に立つ。ただし、インストールには時間かかりまくる。

使用するPHPのバージョンの選定

PHP 5.3.2 択一(2010/07/17現在)。
PHP 5.3.0のころから5.3は使っているけど、今はだいぶ安定してるし(nequalのサービスは全部PHP 5.3で動いてるよ)、やっぱ名前空間や無名関数使いたい。PHP 5.2.x 使ってた人が移行する場合は、特に注意すべきはE_DEPRECATED。それ以外はわりとすんなりいくとおもう。

PHP 4とか使ってる場合すぐさま今すぐ本当に今すぐとにかく今すぐJust Now、PHP 5にアップグレードするべきですね。

追記

これはこれでイイ!のだが、個人的には開発環境と本番環境は極力バージョンやパッケージも含め完全同一化するほうが後で悩まされなくてすむと思う。ということでいつも仮想化。

はてなブックマーク - Ryuzeeのブックマーク - 2010年7月18日
  • 僕もいつも仮想化(ですが、それはまた別の話)。たぶん仮想化すべき、って話とこのエントリ自体は対立する話じゃなくて、仮想化した中での環境構築方法。本番と開発環境のバージョンは完全同一化すべきですね!モダンならね... 最新のPHP 5.3.2でね... (理想は)。