第6回目の記事 ではAdobe製品群の一員となったことで強化されたPDFに関連する機能を学びました。ColdFusion 8で新たに追加されたcfpdfタグ では、PDFの各種情報の取得・2つ以上のPDFファイルのマージ・PDFファイルのパスワードでの保護及び暗号化・PDFの各ページのサムネイルの作成などをタグ1つで行うことが出来ることが分かりました。第4回 で紹介したグラフ描画と同様に、他の言語では煩雑な操作を伴う処理が1つのタグにカプセル化されていること、及び外部ライブラリなどを導入しなくてもそれらの処理を行うことが出来ること、また買ったその日からその機能を使うことが出来ることはColdFusionが持つ大きなメリットでしょう。
今回はColdFusionでのデバッグ手法を学びます。
ラインデバッギングとは
ラインデバッギングとは、他のJavaやC言語などではおなじみの、行単位でブレークポイントを設定し、その時点での各種変数の値を確認できる、と言うものです。
ColdFusion MX 7まではFusionDebug などのサードパーティのデバッグツールを使う必要がありましたが、ColdFusion 8からはEclipse向けにColdFusionのデバッグプラグインが提供されるようになりました(EclipseベースのAdobe Flex Builderでも使用可能なようです) 。
FusionDebugを使わずにデバッグをしようと思った場合、デバッグ用にcfoutputタグ やcfdumpタグ を用いてブラウザ上で変数の値を確認していたところを、コードに一切手を加えることなくIDE上で直接変数の値を確認できるので、デバッグの手間を大幅に省くことが出来るでしょう。
また、知りうる限り、ライトウェイトなWeb開発言語で、このようなIDEベースのGUIデバッガがビルドインで提供されているのはColdFusionのみのようです(PHPはZend DebuggerやPDT の追加インストールが必要で、Ruby on Railsはソースコードのブレークポイントを設定したい箇所に「breakpoint」と書き込み、irbベースのCUIでのデバッグとなるようです) 。
ColdFusionデバッグ用プラグインをインストールする
ColdFusionデバッグ用プラグインはEclipse 3.2以上が必要になります(本稿はEclipse SDK 3.2.2を使用しています) 。なお、現時点ではプラグインがEclipse 3.3以上には対応していないので注意が必要です。Eclipseのインストールおよび基本的な使用方法は本稿の範疇を超えるので省略します(基本的にEclipseのダウンロードページからEclipseをダウンロードし、解凍するだけで使用できるようになります) 。
まず、ColdFusion 8 Extensions for Eclipse (ColdFusionデバッグ用プラグイン)をダウンロードします。
次に、Eclipseを起動します。
そして、通常のEclipseの拡張機能をインストールする手順を取ります。具体的には、メニューから[Help]-[Software Updates]-[Find and Install...]を選びます。ダイアログが表示されるので、「 Search for New Features to Install」を選び、「 Next」を押します。次に、「 New Archived Site...」ボタンを押します。ファイル選択ダイアログが表示されるので、先ほどダウンロードしたCF8-Extensions-for-Eclipse.zipを選択し、「 開く」を押します。名前の入力を求められるので「cf8_extensions_for_eclipse」と入力しておきます。「 cf8_extensions_for_eclipse」にチェックが入っていることを確認し、「 Ignore features not applicable to this environment」のチェックを外し「Finish」ボタンを押します。再度ダイアログが表示されるので「cf8_extensions_for_eclipse」にチェックを入れ「Next」を押します。ライセンス条項が表示されるので、一読し同意の上(同意するには「I accept the terms in the license agreement」を選択します) 、「 Next」を押します。次に「Finish」を押し、インストールを開始します。途中「Feature Verification」の画面が出ます。これは拡張機能がAdobeによってデジタル署名されているかどうかを確認するステップです。「 O=Adobe Systems Incorporated」の文字が見えたら問題ないので、「 Install All」を押します。最後にEclipseを再起動するように促されるので、「 Yes」ボタンを押しEclipseを再起動します。
CFEclipseをインストールする
CFEclipse はEclipse上でColdFusionの開発をするための拡張機能で、有志の手によって開発されています。cfmファイルをEclipse上で編集するためにはこの拡張機能が必要になりますので、インストールします。
CFEclipseも通常のEclipseの拡張機能をインストールする手順を取ります。具体的には、メニューから[Help]-[Software Updates]-[Find and Install...]を選びます。ダイアログが表示されるので、「 Search for New Features to Install」を選び、「 Next」を押します。次に、「 New Remote Site...」ボタンを押します。ダイアログが表示されるので、Name欄に「CFEclipse」と、URL欄に「http://www.cfeclipse.org/update」を入力し、OKボタンを押します。その後、「 Finish」ボタンを押すとダイアログが表示されます。「 CFEclipse」にチェックを入れ、「 Next」ボタンを押します。ライセンス条項が表示されるので、一読し同意の上、「 Next」を押します。次に「Finish」を押し、インストールを開始します。「 Feature Verification」のダイアログが表示され、インストールしても良いかどうかを確認してくるので、「 Install All」ボタンを押します。最後にEclipseを再起動するように促されるので、「 Yes」ボタンを押しEclipseを再起動します。
ColdFusionのラインデバッガーを有効にする
ColdFusionでは、デフォルトではラインデバッガーが無効になっています。デバッグでは内部的に使っている変数など、本来外部に公開しないものまで見ることが出来てしまうため、セキュリティー上のリスクがあるからです。従って、ラインデバッガーは開発環境でのみ有効にするようにし、本番環境では有効にしないようにしましょう。
ColdFusionのラインデバッガーを有効にするには、ColdFusion Administratorを開きます(お使いの環境にもよりますがhttp://127.0.0.1:8500/CFIDE/administrator/が標準です) 。次に、左のペインから「デバッグとロギング」という項目を開きます。メニューが展開されるので、「 デバッガの設定」という項目を選びます。
すると、デバッガーの設定画面が右ペインに表示されます。「 ラインデバッグの許可」にチェックを入れ「変更の送信」ボタンを押します(「 デバッガポート」と「同時デバッグセッションの最大数」に関しては、それぞれ「5005」と「5」のまま触らないようにしてください) 。その後、ColdFusionを再起動するように促されるので、ColdFusionを再起動します(図1 ) 。
図1 デバッガの設定画面
本連載2回目 で紹介したインストール方法を取った場合、ColdFusionのRDS(Remote Development Service)が有効になっているかと思いますが、念のため有効になっているか確認します。なお、RDSもラインデバッガー同様にセキュリティー上のリスクがあるため、本番環境では無効にしておき、開発環境でのみ有効にするようにしましょう。
左ペインの「セキュリティ」の項目を開き、「 RDS」を選択します。「 単一のパスワードのみを使用する(デフォルト) 」が選択されていることを確認します。なお、インストール時に設定したRDSパスワードを忘れてしまった場合は、「 単一のRDSパスワード」の2カ所にパスワードを入力し、「 変更の送信」ボタンを押すことで、そのパスワードでRDSにアクセスできるようになります。
Eclipseのデバッガープラグインを設定する
ColdFusionサーバー側の設定が終わったら、今度はEclipseプラグインに「どのColdFusionサーバーにデバッグで接続するか」を設定します。
まず、Eclipseを起動します。
次に、[Window]-[Preferences...]を選び、図2 にある「RDS Configuration」を選択します。
図2 RDS Configuration
そして、サーバーへの接続情報を入力します。「 New」ボタンを押し、Description欄に適当な説明を(今回は「localhost」 ) 、Host Name欄にColdFusionサーバーのIPアドレスを(今回は「127.0.0.1」 ) 、Port Number欄にRDSのポート番号を(今回は「8500」 ) 、User Name欄に「admin」を、Password欄にインストール時に設定したRDSパスワードを入力します(ここのパスワードはColdFusion AdministratorのRDS設定画面で指定したパスワードになります) 。なお、「 Prompt for Password」にチェックを入れておくと、RDS接続する度にパスワード入力を求められますので、それが面倒な場合チェックを外しておきましょう。
その後、「 Test Connection」ボタンを押し、「 Test Connection was successful.」と表示され、Eclipse上のデバッガープラグインとColdFusionが接続できたことを確認します(図3 ) 。
図3 RDSでの接続が成功した画面
なお、デバッガープラグインには複数のColdFusionサーバーを接続先として登録しておくことが出来ます。複数のColdFusion開発環境がある場合にも柔軟に対応することができます。
CFEclipseプロジェクトを作成する
ColdFusionのファイルをEclipse上でデバッグするためには、デバッグ対象のファイルがEclipseのプロジェクト内に入っている必要があります。今回はColdFusion開発環境としてインストールしたCFEclipseのプロジェクトを作成することにしましょう。
メニューから[File]-[New]-[Project...]と選びます。次に、「 CFEclipse」の中の「CFML Project」を選択し「Next」を押します。次に、Project name欄に「gihyo 7」と入力し、「 Use default location」のチェックを外し、「 Browse...」ボタンを押します。ダイアログが出るので、{cf_root}/wwwroot/gihyo/7/(Windowsであれば『C:\ColdFusion8\wwwroot\gihyo\7』になります)を選択し、OKボタンを押します。最後に「Finish」ボタンを押します。CFEclipseのパースペクティブに切り替えるように促されると思うので「OK」を押します。手動でCFEclipseのパースペクティブに切り替えるには、メニューから[Window]-[Open Perspective]-[Other]と選び、「 CFEclipse」を選択し、「 OK」を押します。
次に、今回デバッグに使用するcfmファイルを作成します。左ペインの「gihyo 7」上で右クリックし、[New]-[CFML Page]と選びます(図4 ) 。
図4 Eclipseでcfmファイルを新規作成する
ファイル名を求められるので、debug_test.cfmと入力し「Finish」ボタンを押します。debug_test.cfmが開かれるので、以下のような内容を入力してください。
<cfset aString = "ColdFusion 8">
<cfset aAry = ArrayNew(1)>
<cfset aAry[1] = "Str 1">
<cfset aAry[2] = "Str 2">
<cfloop from="1" to="#ArrayLen(aAry)#" index="i">
<cfset aItem = aAry[i]>
<cfoutput>#aItem#</cfoutput>
</cfloop>
ブレークポイントを設定し、デバッグする
ColdFusion 8 Extensions for Eclipseを設定しただけではデバッグを行うことは出来ません。Eclipseのデバッグパースペクティブに先ほど設定したColdFusionデバッガープラグインの設定を関連づける必要があります。
まず、Eclipseのメニューの「虫マーク」の隣の三角をクリックし、「 Debug...」を選択します(図5 ) 。
図5 Eclipseでデバッグを開始する
ダイアログが表示されるので、「 ColdFusion Application」の文字の上でダブルクリックします。
すると、図6 のように設定画面となります。Name欄に「Local ColdFusion 8」を、Debug home page URL欄に「http://127.0.0.1:8500/」を、RDS server欄に「localhost」をそれぞれ入力し、「 Debug」ボタンを押します。
図6 Eclipseのデバッグ設定をする
その後、EclipseをDebugパースペクティブに切り替えます。切り替えるには、メニューから[Window]-[Open Perspective]-[Other]と選び、「 Debug」を選択し、「 OK」を押します。するとデバッグパースペクティブに切り替わります。
適宜ブレークポイントを設定します。今回はcfoutputタグの位置にブレークポイントを設定することにしましょう。cfoutputタグの左側の灰色の部分あたりをダブルクリックすると、水色の丸が表示され、その地点がブレークポイントになります(図7 ) 。
図7 ブレークポイントを設定する
実際にデバッグを行うことにしましょう。Internet Explorerなどのブラウザで、http://127.0.0.1:8500/gihyo/7/debug_test.cfmにアクセスします。すると、先ほど設定したブレークポイントで停止し、Variablesペインに現在の値が表示されます(図8 ) 。もちろん表示するだけではなく、Valueの欄に表示されている値の部分をクリックすると、動的に値を書き換えることが出来ます。
図8 ブレークポイントで停止中の様子
ブレークポイントから抜け出るにはDebugペインの緑三角(Resume)をクリックするか、「 Step Into」や「Step Over」ボタンをクリックします。
なお、デバッグを長時間していると、ブラウザ上に「リクエストは時間制限タグを越えました」と言うようなエラーメッセージが出ることがあります(図9 ) 。
図9 1リクエストに長時間かかった場合のエラーメッセージ
ColdFusionは1リクエストの処理時間を制限しており、その制限時間を超えるとcfmファイルの実行を停止します。1リクエストの処理時間はColdFusion Administratorで変更することが出来ます。ColdFusion Administratorの左ペインから「サーバーの設定」メニューを開き、「 設定」の項目を選びます。「 リクエストタイムアウト」という項目があるので、そこの秒数を大きな値に変更するか、チェックボックスを外し、1リクエストの処理時間制限を外すと良いでしょう(図10 ) 。なお、処理時間制限はcfmファイル内の意図しない無限ループなどを防ぐために設定されているので、本番環境ではあまり長い時間を設定しない方が賢明です。
図10 1リクエストタイムアウトの設定画面
まとめと次回予告
今回はColdFusion 8で追加されたラインデバッギングをご紹介しました。
Eclipse上でブレークポイントを設定し、その時点での各種変数が参照できたり、その値を動的に書き換えることが出来ます。ColdFusionはライトウェイトなWeb開発言語の中でも、GUIでインタラクティブにデバッグできる数少ない言語です。これは他の言語に対する大きなアドバンテージとなるでしょう。
次回は米Adobe SystemsのColdFusionシニアマーケティングマネージャーTim Buntel氏へのインタビューを掲載します。