Eclipse PDT で PHP デバッグをする

PHP の統合環境は長らく PHPEclipse を使っていましたが、Eclipse 本家で PDT (PHP Development Tools) の開発がはじまって、両者使い分ける感じでいました。 最近は PDT のほうが良さそうになったのでこちらがメインになっています。

PDT は WordPress のプラグインをかくときなどに、シンタックスエラー検出や定義ジャンプなど基本的な機能だけ使っていましたが、 Shiroica さんが PDT にデバッガの設定をしていて便利そうだったのでぼくもまねしてみました。 🙂

Eclipse PDT+Aptana+Subclipse – SharpLab.

おおー!これは凄い。そしてこれまでテキストエディタでWordPressのThemeを書いて、var_dump()を使ってデバッグをしていた自分の努力はなんだったんだ…。

デバッガというのはプログラムのソースを指定の行で止め、一行ずつ目で確認しながら実行したり(ステップ実行)、変数の中身を画面から確認したり(ウォッチ)するツールのことです。

これがね~、特になにかプログラムが想定と違う動作するときにあるとないとでは修正効率がまったく違うという、素人お断りの大人ツールです(嘘)

Web のプログラムの場合、操作によって起動スクリプトがまちまちだったりエントリポイント問題が面倒なせいか、デバッガ使う人はなんだか少なく思えますが、PDT + xdebug を使うとなにも考えずにデバッグ可能でした。 すごす。

昔、PHPEclipse にデバッガいれていたことありましたが、起動スクリプトごとに設定を変更しなければいけなかったり結構面倒だった覚えがあります。

てなわけで、Windows のほうは Siroica さんのサイトが参考になります。 ぼくはせっかくなので違うことということで、Linux の Eclipse PDT に設定してみました。 🙂

Windows の xampp には最初から xdebug という PHP デバッグに必要な拡張モジュールがはいっているそうなのですが、 Linux 版の xampp にははいっていないようでしたのでコンパイルして xdebug.so を作成します。

コンパイルには xampp の Development package が必要ですので、ダウンロードして /opt/lamm/ にいっしょにいれて、xampp 環境にあわせた xdebug をソースからコンパイルします。 詳細手順は以下の感じでOKです。

Install ‘xdebug’ PHP extension for XAMPP on linux at SANIsoft – PHP for E Biz

Following is the procedure for installing PHP’s ‘xdebug’ extension for XAMPP on linux (most of the installation procedure is same as http://www.xdebug.com/docs/install but there are a few quirks).

で、 /opt/lampp/etc/php.ini に xdebug.so を読み込ませる設定をします。 上の設定だけだと remote_debug が enable にならないので一行追加です。

zend_extension=/opt/lampp/lib/php/extensions/xdebug.so
xdebug.remote_enable=1

これで、Apache 起動して phpinfo() みると xdebug が読まれていることが分かります。

で、Eclipse PDT 側の設定です。 デバッグのダイアログをひらき、アクセスする URL とワークスペースのファイルの位置をあわせてあげます。

debug01

ちょいと見にくいですが、File のところが /wordpress-27x/index.php ってことでEclipse ワークスペース上のファイルです。 デバッガプロセス一発目の起動に使うだけなので適当にとりあえず index.php にしておきましょう。

で、下の URL の欄で http://localhost/wp/wordpress27x/ ってことで実際に Apache で index.php が動くときの URL をいれて対応させてあげます。 xdebug は mod_rewrite がはいっていて URL が疑似られていても平気みたいです。

でけたら、ソースコード上の好みの位置でデバッグブレイクを設定して、上のダイアログのデバッグボタンを押下。 これで、デバッグプロセスに PDT が繋がります。

debug02

デバッグ時に表示される Eclipse のインターナルブラウザでたとえば WordPress が表示されるので、デバッグブレイクを設定したソース部分が動く位置まで操作していくとブレイクして上のようにとまってくれます。 あとは変数の中身をウォッチしたり、ステップインして次の行にすすめるなりできます。

このデバッグモードはデバッグビューからデバッグプロセスをとめるまで続いてくれます。 なのでその間にソースを修正して、インターナルブラウザで再度操作すればそのソースで止まってくれます。 なんの意識もせずにブレイクできるので昔に比べるて相当進化していました。。(汗 とてもいい感じです。 🙂

一点注意するのは、メソッド宣言行にブレイクしてもとまってくれないところです。 メソッドの実処理頭の一行目にブレイクをはりましょう。(ちょっとこれではまりました)

さて、PDT ですがデバッグも含めてなかなか便利です。 Siroica さんのように Aptana もいれるとかなり強力な環境になると思います。

最後に、PDT でちょっと気に入っている機能をひとつ紹介します。

PHP って、なんだかちゃんぽんで組み込み関数名がぼくはなかなか覚えられないのですが、こういうサポートもしてくれる機能があります。

PHP Function というビューがあって、フィルターにたとえば mb_ とかいれると組み込み関数を絞り込んでくれます。 でもって、右クリックマニュアルで Web からドキュメントをひいてくれて大変便利です。

debug04

もちろんソース上の組み込み関数名の上で、Shift + F2 するなどしてもマニュアルはひらけます。 デフォルトは英語マニュアルですが、日本語のマニュアルにしたい場合は以下のように設定に ja をいれるだけでOKです。

debug05

てなわけで、ちょっとね Eclipse はヘビーなソフトなので万人向けではないのですが、少し大きめのアプリかく場合はテキストエディタオンリーより全体的な作業効率はかなり良くなると思います。 Eclipse ばっかりみてればいいので、精神衛生上もよいですね。

よければお試しください。 🙂

XBOX に XBMC 8.10 ‘Atlantis’ をいれてみた

CentOS くんがうちのセンターサーバなら、クライアントの要は XBOX なのかもしれません。 CentOS に格納されているマルチメディア系のデータは XBOX がテレビやオーディオまでネットワークを経由してひっぱりだしてくれます。 このまえ Ubuntu にもいれていた、マルチメディアプレイアー XBMC の最新版ですが、XBOX も最新版の 8.10 にしてみました。 🙂

 xbox06

XBMC はもともと XBOX で動くアプリなので、テレビにうつしてリモコンで使うのが一番しっくりきます。 テレビにつないだ XBOX で XBMC 8.10 を動作させると上の写真のようになります。

もちろん XBOX は、

xbox05

こっちじゃなくて、初代

xbox04

こっちです。  あと2年くらいうごいてくれよ~。 😛

XBMC はたしか 2005年ころチャイナの方が、true type を表示可能にするパッチを提出してマルチバイト圏でもフォントが表示できるようになりました。 そこから、DVD の再生メニューに対応したり、様々な進化をとげ 8.10 に。 昔は、.xml を直接かきかえないとできない設定があったりしましたが、現在はほとんどの設定を画面から行うことができます。

trunk 追ってたときもありましたが、こうオープンソースアプリの進化をみているのは楽しいし、1.0 とかマイルストーンリリースがあると感無量なものです。 最近、商売のために、明確なバージョンポリシーもなく強引に 1.0 にあげたどっかのブラウザとは大違いです(笑)

さて、 XBMC 8.10 ですが、Ubuntu でみていたのである程度分かっていましたが、やっぱりいいっすね。 🙂

xbox00

音楽を聴くことがおおいですが、その対応メディア(ネットワーク含む)は標準で以下の通りです。

xbox02

XBOX ローカルの HDDから、DVD メディア、ネットワーク越しは Windows 共有もみれます。 あと、ネットラジオも対応。

xbox01

あと、お天気がみれたり。 RSS も流せるかも。

xbox03

以上はデフォルトのテーマですが、WP みたくいろいろ変更できます。

Apple が AppleTV という機械をだしていますが、XBMC はその AppleTV でも動いたりするようです。 わけわからない縛りがないので、たぶんこっちにいれかえたほうがいいかも。。(笑)

あと、Python のプラグインスクリプト実行環境が動作します。 サンプルでXBMC 上で Python 版テトリスが XBOX で動作していました。 面白いですね。

てなわけで、最近はいろいろなプラットフォームで動作するようになりましたし、PC で USBブート可能なものもありますのでテレビ・オーディオの近くに一台どうでしょうか。

これとかにいれてテレビにつないでブートさせるといろいろ便利そうですね。 🙂

xbox07

本家版 WordPress 2.7 をロケール ja で使っている場合

本家版 WordPress 2.7 をロケール ja で使っている場合に、2.7 が入っているのにもかかわらず「WordPress 2.7 が利用可能です ! アップデートしてください。」が表示される現象がでているようです。 どうも api.wordpress.org のバージョンチェック API が、せっかく組み込まれているローカルパッケージ判定の優先順位を下げてしまっているのが原因のようです。

 wp2701

日本語版など各国で作成したパッケージ(.zip) は$wp_local_package というグローバル変数に値をセットし、ローカルパッケージである旨、wordpress.org に配置されたバージョンチェック API に通知するようになっています。 また、使っているロケール(ja)もあわせて通知します。

でもって、本家版をロケール ja にして ja.mo を別途インストールしている場合などは、ロケール を「ja」、ローカルパッケージ を「空(たぶん未使用という意味)」として API に送信しますが、ロケールチェックが優先になるため”日本語版の 2.7″ に”なっていない”、、ということでアップグレード通知がきてしまうようです。

これが仕様なのか不具合なのかちょっと判断つきませんが、コアファイルは本家版なわけなので通知はこないほうが正解のような気もしますがはたして。

wp-config.php で値セットして疑似ってでないようにできるかな、、と思いましたがだめそうです。 subversion でアップグレードしているなど特別な理由で日本語版にできない人は、もしかすると API が対応されるかもしれないので、とりあえずそっとしておきましょう。。(笑

wp2700

さて、 WP 2.7 ですが管理画面もきれいになっていい感じですね。 コアのオートマティックアップグレードもうまく動けば初めての利用する人にも安心でしょう。(ぼくはデータベースアップグレードしなければ簡単にダウングレードできる安心をとって、subversion を使っていこうと思っています。)

いろいろギミックがあるようなので、時間できたら少しずつ見ていこうと思います。 🙂