コードのデバッグ
コードをデバッグする場合、Flash Builder 4とZend Studioでは少なくとも3つの方法があります。
Flash Builder 4には、コードのデバッグ用に、[Network Monitor(ネットワークモニター)]と[Test Operation(操作をテスト)]の2つの新しいビューが追加されています。これらのビューが表示されていない場合は、[Window(ウィンドウ)]-[Other Views...(他のビュー...)]を選択し、Flash Builderノードのビューを探すことで追加できます(ネットワークモニターはFlash Builder Premiumでのみ使用できます)。
ネットワークモニタービューを使用すると、Flexクライアントとサーバーとの間でやりとりされるすべての通信を見ることができます。元データとオブジェクトの両方が見られます。この機能を使用したい場合、まずこれを有効にする必要があります。[Enable Monitor(モニターを有効にする)]アイコンをクリックします(図31を参照)。
その後、アプリケーションを実行します(デバッグモードで実行する必要はありません)。アプリケーションの使用中にサーバーとの間でデータが交換されると、要求、所要時間、送受信データが表示されます(図32を参照)。
[操作をテストビュー]は、名前からわかるように、使用可能な操作をテストするためのものです。[操作をテストビュー]を選択し、getData()操作を選択して、[Test(テスト)]ボタンをクリックします。4つのVOAuthorオブジェクトが表示されます(図33を参照)。操作に引数が必要な場合、このビューから引数の値を定義できます。
バグを発見する最も強力な方法は、もちろんデバッグすることです。Flexのデバッガーは、バグをすばやく特定して解決するための強力なツールです。以下では、FlexとPHPのコードをデバッグする方法を説明します。
まず、プロジェクトをデバッグモードで実行します(Flashパースペクティブにいることを確認し、ツールバーのデバッグボタンをクリックするか、flex_project.mxmlを右クリックして[Debug(デバッグ)]-[Web Application(Webアプリケーション)]を選択します。これにより、Flexデバッガーが開始されます。dataGrid_creationcompleteHandler()関数内部にブレークポイントを設定してデバッグモードで実行すると、Flexデバッガーの動作を確認できます(図34を参照)。
次はPHPコードのデバッグ方法です。PHPデバッガーをZend Studioから使用することもできますが、現在FlexとPHPコードの両方をデバッグする場合に問題が発生します。Zend Frameworkによって動的にインクルードされるスクリプトを、PHPデバッガーが正しく認識できないようです。このため、例えばMyService.phpのgetData()メソッドに設定したブレークポイントに到達できません。この問題を解決できたら、この記事を更新してPHPデバッガーの使用法を説明します。
この制限を回避するために、筆者は次のようなワークフローを使用しています。
- 最初に、作成したPHPクラスに構文エラーがないことと、使用するメソッドが期待する結果を返すことを確認します。これは、テストするサービスクラスをブラウザにロードすることで簡単に実行できます。そのクラスに初期化コードを追加して、テストしたいメソッドへの呼び出しを行えば、コードの実行もテストできます。具体的には、セットアップで次のURLをブラウザにロードします。
- http://localhost/zendamf_remote/MyService.php(これはPHPサービスのURLです)
- もう1つ有効なワークフローとして、渡された変数をフラットファイルに記録する関数を使用する方法があります。例えば、次のような関数を使用します。
構文エラーがなければ、次のコードを(クラス定義の上に)追加することにより、getData()が期待した結果を返すことを確認できます。
$service = new MyService(); print_r($service->getData());
function logMe($var) { $filename = dirname(__FILE__) . '/__log.txt'; if (!$handle = fopen($filename, 'a')) { echo "Cannot open file ($filename)"; return; } $toSave = var_export($var, true); fwrite($handle, "[" . date("y-m-d H:i:s") . "]"); fwrite($handle, "\n"); fwrite($handle, $toSave); fwrite($handle, "\n"); fclose($handle); }
そこで、saveData()メソッドが呼び出されたときにFlexが送信する引数を記録したい場合は、saveData()メソッド内部に次の行を追加して、Flexアプリケーションを実行し、画面上で行を編集します。
logMe($author);
ログファイルには次のような内容が記録されます。
[10-02-18 14:20:01] stdClass::__set_state(array( 'lname_aut' => 'Corlan', 'fname_aut' => 'Mihai', 'id_aut' => '15', ))
作業手順は以上です。思ったより簡単ではなかったでしょうか?
次のステップ
Flash BuilderとZend Studio for Eclipseを組み合わせることで、Flex+PHPプロジェクトを作成し、このようなセットアップでFlexとPHPのファイルを編集する機能を利用できます。プロジェクトの範囲が拡がり、複雑さが増してきたら、FlexとPHPのコードを同時に簡単にデバッグできます。
Flex、PHP、AMFについて詳しくは、Flexデベロッパーセンター – FlexとPHPについて学ぶのページを参照してください。
Adobe AIR Galleryに登録された優秀なAIRアプリケーションを決定するコンテスト、Adobe AIR Contest 2010が今年も開催されます。優秀作品には、Adobe MAX 2010(2010年10月/米国ロサンゼルス)への招待、Adobe Creative Suite製品のプレゼントが贈られます。登録締め切りは、2010年8月31日まで。【詳細はコチラ】