【blog.soichiro.orgの閉鎖にともない転載しました】
今まで散々VimとSublime Text2のエントリーばかり書いていた自分ですが、運良くIntelliJ IDEA UltimateのオープンソースライセンスをJet Brain社から頂いたこともあってPHPStorm (IntelliJのPHPプラグイン)を利用し始めました。 このスクリーンショットのようなUIです。
PHPStorm、さすがは有料のPHP用のIDEだけあってST2やVimのプラグインでできる機能とは格が違う自動生成やリファクタリング機能を持っています。お値段はコマーシャルライセンスで$199、個人で$99、学生で$29という高価格帯。にも関わらず、FacebookやMediaWiki、zyngaやVALVE(洋ゲー販売のSteamで有名な)で正式採用されるIDEなだけあります。
ぶっちゃけて言うと、このクソ言語を使って大規模開発をせざるを得ないPHPerで、懐に余裕のある方にはぜひオススメしたいIDEです。
一日3時間以上PHPを書いたり、読んでいたりする人は買って損はないかと思いますが、ただこの価格なので無理強いすることはできません。なので、利用するかどうかの判断材料になるようにとVimやST2にはできないけれどPHPStormにはできる機能だけをまとめることにしました。
ちなみに、それVimやST2でもできるよ、って言いたくてVimのプラグインやST2のパッケージを作って下さる方もいるとは思いますが、2013年3月12日時点で自分が満足にいく拡張を見つけられなかったものだけをまとめてあります。
1. 型情報のあるコメントを補完するゲッターセッターの自動生成
GetterSetterのジェネレーターというのは結構エディタにもプラグインが存在しているのですが、型情報のコメントまで丁寧に作ってくれるジェネレーターはなかなかありません。以下の様な手順です。
以上のエンティティクラスで右クリックしてGenerate...を選択します。
その後出てくるコマンドでGetters Settersを選択します。
GetterやSetterを生成したいフィールドを選択します。
このように型情報コメントを保管するゲッターセッターを自動生成してくれます。
さすがにここまでやってくれるエディタのプラグインはありませんでした。
2. コンストラクタの自動生成
ゲッターセッターの自動生成プラグインは結構な数あるのですが、コンストラクタの自動生成は中々ありません。先ほどのエンティティクラスで右クリック、Generate...で出てくるコマンドで、Constructorを選択します。
コンストラクタで代入したいフィールドを選択します。
このように簡単にコンストラクタが自動生成されます。
3. オーバーライド可能なメソッドの自動生成
継承クラスのオーバーライドしたいメソッドも自動生成してくれます。以下のようにまずクラスを継承します。
その後、また右クリックのGenerate...からOrveride Methods...を選択します。
次にオーバーライドしたいメソッドを選択します。
すると以下のようにメソッドが自動生成されます。
4. 未実装のインターフェースのメソッドの自動生成
クラス宣言のimplements句にインターフェースを設定します。メソッドが未実装なので赤いラインでエラーが出ていますが、右クリックのGenerate...からImplement Methods...を選択します。
このように、実装しなくてはいけないメソッドが自動生成されます。
5. メソッドの呼び出し階層の表示
メソッドの呼び出しがどこで行われているのかを、再帰的に知りたい場合はメソッドを選択して、メニューのNavigateからCall Hierarchyを選択します。
すると、再帰的にどういうふうにメソッドが呼ばれているのか見ることができます。
この場合は、handleメソッドを呼んでいるstartメソッドが更にBasicAuthenticationLitenerのhandleメソッドから呼ばれていることがわかります。
6. クラス名、メソッド名、変数名の全ファイル自動リファクタリング
命名を変更するリファクタリングも強力で、全てのファイルを自動的に修正してくれます。まずクラス名などを選択して右クリック、Refactor > Rename...を選択します。
変更したいクラス名を入力します。
ファイル自体の変更を確認したOKを押すとリファクタリング完了です。
ファイル名はもちろんのこと、全ての呼び出し元のクラス名が修正されます。非常に強力です。
ただしこのリファクタリング、全ファイルを自動的に書き換えるという強力さ故にUndoはできないようですので、慎重に実施ください。
7. 変数、定数、フィールドへの抽出
変数、定数、フィールドへのくくりだしも簡単です。変数にくくり出したいときは、くくりだしたい部分を選択して、右クリックRefactor > Extract > Variableです。定数の場合はConstant、フィールドの場合はFieldを選択します。
変数名は何がいいか聞かれるので入力します。
このように変数に抽出されます。
8. 処理のメソッドへのくくり出し
処理のメソッドへのくくりだしも自動です。どの変数使ってるんだっけなというように頭を悩ませることもありません。処理を選択して、右クリック Refactor > Extract > Methodを押します。
メソッド名と引数の順番を聞かれるので設定します。
このように処理がメソッドに抽出されます。
9. 使ってないインポート文(use句)の表示
使ってないインポート文はこのように、灰色に表示されてわかりやすくなっています。
10. タイプヒンティングとデフォルト値を元に型情報を補完するPHPDocの自動生成
GetterSetterの所で型情報の入ったコメントが自動生成されるので基本的に同じなのですが、ファイル上で右クリックしてGenerateを選択した後、PHPDoc Blocks..を選択します。
このように、タイプヒンティングとデフォルト値を元に自動的に型情報を持ったPHPDocを自動生成してくれます。うーん便利。
以上です。まとめると、
1. 型情報のあるコメントを補完するゲッターセッターの自動生成
2. コンストラクタの自動生成
3. オーバーライド可能なメソッドの自動生成
4. 未実装のインターフェースのメソッドの自動生成
5. メソッドの呼び出し階層の表示
6. クラス名、メソッド名、変数名の全ファイル自動リファクタリング
7. 変数、定数、フィールドへの抽出
8. 処理のメソッドへのくくり出し
9. 使ってないインポート文(use句)の表示
10. タイプヒンティングとデフォルト値を元に型情報を補完するPHPDocの自動生成
これが自分がまとめたVimやST2にはない、PHPStormの機能でした。
細かい所で言うと各種タグジャンプや補完機能、シンタックスハイライトやコードスタイルの設定などもIDEならではの上をゆく便利さがあります。ただこのへんの機能は頑張ればVimやST2でもある程度用意可能なので割愛します。
なお自分は、リモートのPHPファイルを編集する必要があったので、ローカルにバージョン管理システムを使ってチェックアウトしたソースコードをPHPStormのDeployment機能のAutomatic Upload機能を使って、リモートのマウントしているディレクトリに自動送信させて使っています。
リモートにしかPHPが動かせるサーバー環境があいよという方は、このようにSSHやSambaなどでリモートディレクトリをマウントして、Deployment機能を使ってやるこのやり方がよいと思います。ちなみに最初はマウントしたリモートディレクトリをそのままPHPStormのワークスペースとして利用しようとしましたが、あまりの重さに使い物になりませんでしたw
一応PHPStormは30日間は無料でお試しできますので、一度は使ってみるのも一つなのではないかなと思います。
以上、ここまで読んでくださり誠に頂きありがとうございました。