Eclipse PDT (PHP Development Tools) - Context Launching

 Eclipse 3.3 の新機能に Context Launching(状況依存起動?^^;)があります。これは現在選択されているリソースに応じた起動構成を自動選択する機能です。
 フォーカスが Package Explorer(や、Project Explorer など)にあるのかエディタにあるのか、そのリソース(ファイル、プロジェクト、etc.)が起動ヒストリの中にあるか無いか、起動したことが無い場合は何を起動すべきなのか、そういった状況に応じて Run/Debug ボタンの動作が変わります。(設定は Preferences~Launching の Launch Operation で)
 例えば JDT の場合、Java ファイルを編集中にマウスを Run(または Debug)ボタンに持っていくと、起動したことがあるファイル(ヒストリの中にある)であればそのファイル名がツールチップに表示され、1クリックで起動できます。一度も起動したことが無く Applet なのか Application なのか自動判定もできない場合はツールチップに「Run As...」と表示され、クリックすると Applet なのか Application なのかを選択するダイアログが現れます。自動判定可能な場合は(たぶん public void main() の有無で判定していると思うのですが…)一度も起動したことが無いファイルであってもツールチップにファイル名が表示され、1クリックで起動できます。フォーカスを Package Explorer に移せば、編集中のファイルとは関係無く Package Explorer で選択されているものに応じてボタンの動作が変わります。
 文章で書くと判りにくいですが、実際に操作してても判りにくいです(^^;。言ってみればボタンの動作がフォーカスに連動しているわけで、意図せぬ結果を招く(例えば直前に実行したファイルを再度実行しようとして、フォーカスが違う所にあったために全然別物を実行してしまう、とか)ことがありがちなような…

 で。PDT はこの新機能に対応していません。その上、まずいことに WST がこの機能を一部阻害しています。

 Eclipse を起動し、PHP Projectをクリックして Run ボタンにマウスを持っていくと、ツールチップには「Run プロジェクト名」と表示され、クリックすると「Server Error」なるエラーメッセージが出てきてしまいます。これは、起動後の初期状態では WST がすべてのプロジェクトに対して「Run on Server」を有効にしてしまっているからです。PHP Project は Web Project ではありませんので、当然エラーになります。この後、再度 Run ボタンをクリックすると今度は「Unable To Launch」なる情報メッセージが出ます。これは、エラーを起こした「Run on Server」が退場したためで、PHP Project はそもそも「起動」はできませんから、こういう(正しい)メッセージが表示されることになります。
 別の角度から見てみましょう。いったん Eclipse を終了して再起動し(初期状態に戻すため)、PHP Project を右クリックして Properties を開き、Server をクリックしてみて下さい。「This project cannot be used with servers」と表示されます。実はこの時点で「Run on Server」は使えないと内部的に認識されます。Cancel で Properties を閉じて、再度開いてみて下さい。もう Server はありません。この状態で先のようにPHP Projectをクリックして Run ボタンにマウスを持っていくと、ツールチップには「Run As...」と表示され、クリックすると「Unable To Launch」が出てきます。要するに、WST は起動時に全プロジェクトについて Server が使えるかどうかチェックすべき、ってことです。

 では、PHP ファイルが選択状態にある時はどのような動作になるでしょうか。起動構成(履歴)が全く無い白紙の状態で、PHP ファイルを選択し、Run ボタンをクリックしてみて下さい。「Run As」ダイアログボックスが現れて、PHP Script として実行するのか PHP Web Page として実行するのかが選択できます。いずれかを選択して OK ボタンをクリックすると直ちに実行されます。
 次に、別の PHP ファイルを選択してRun ボタンにマウスを持っていくと、ツールチップには先ほど起動したファイル名が表示され、クリックすると選択したファイルではなく先ほどのファイルが直ちに実行されてしまいます。これは PDT が Context Launching に対応していないためです。PHP ファイルが選択されていると、起動履歴から直近の起動が採用されてしまうのです。

 さて。パッチをあてたらどうなるか、ですが。
 選択されている PHP ファイルが起動履歴の中にあればそれが適用されます。例えば、今 file1.php、file2.php、file3.php があって、file1.php と file2.php は起動したことがあるとします。PHP Explorer で file1.php を選択するかまたは開いて編集状態にした場合、Run ボタンをクリックすれば file1.php が直ちに実行されます。同様に file2.php を選択した場合、Run ボタンをクリックすれば file2.php が直ちに実行されます(直前に実行したのが file1.php であろうが file2.php であろうが)。file3.php を選択した場合は、Run ボタンをクリックすると Script なのか Web Page なのかを選択するダイアログが現れます。
(起動構成は新規作成するか保存し直す必要があります)

 ファイルではなくプロジェクトを選択していたり、あるいは他のビューにフォーカスがある場合などは、それぞれの場合に応じて Run ボタンの動作が変わります。
 この動作が嫌な場合(私は嫌なんです^^;)Preferences>Run/Debug>Launching の Launch Operation で「Always launch the previously launched application」をONにすれば、昔ながらの「最後に起動したものを起動する」動作になります。

2008/06/15


⇒INDEX

inserted by FC2 system