GMOアドマーケティングのSSP開発チームのT.Kです。
コードレビューで処理を追いかける際にPhpStormを良く使いますが
ビューからコントローラへのジャンプが出来ず、不便に感じていました。
既存のプラグインで対応できるかもしれませんが、ブログの執筆を兼ねて
ビューから呼び出しコントローラを検索するプラグインを作ってみます。
環境構築
プラグインの開発はJavaとIntelliJ IDEAを使う必要があるので、公式からDLしてインストールします。
- JDK
- IntelliJ IDEA(Community Editionで問題ない)
プロジェクトを作成
IntelliJ IDEAを起動したら、下記の手順でプロジェクトを作成します。
- [File] -> [New] -> [Project] でプロジェクト作成画面を開く
- [IntelliJ Platform Plugin] を選択して [Next] をクリック
リストに[IntelliJ Platform Plugin]が無い場合は
[File] -> [Settings] -> [Plugins] から [Plugin DevKit] を有効にしてください - [Project name] を入力して [Finish] をクリック
plugin.xmlを編集
プラグインの基本情報や依存関係などの設定ファイルです。
初期状態ではPHPStormで動作しないので、下記行のコメントを外します。
1 |
<depends>com.intellij.modules.lang</depends> |
アクションを作成する
プロジェクトツリーのsrcディレクトリを右クリックして
[New] -> [Plugin DevKit] -> [Action] でアクション作成画面を開きます。
[Action ID] [Class Name] [Name] を入力します。
アクションの種類が大量にあり、全体を把握するには無理がありました。
今回はコンテキストメニューに追加したいので [PopupMenu] で検索し
[Groups] から [EditorPopupMenu(Editor Popup Menu)]
[Actions] から [EditorPopupMenu1(Editor Popup Menu Actions(1))] を選択しました。
[OK] をクリックするとクラスファイルが作成されます。
plugin.xmlを見ると <actions> に作成したアクションの情報が追加されています。
コードを書く
作成されたクラスファイル内のactionPerformedに処理を実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
@Override public void actionPerformed(AnActionEvent e) { // 作業ディレクトリからの相対パス final String viewRelativePath = "/application/views"; Project project = e.getData(PlatformDataKeys.PROJECT); String viewBasePath = project.getBasePath() + viewRelativePath; // アクティブになっているファイルを取得 final VirtualFile[] vFiles = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); if (vFiles == null || vFiles.length == 0) { Messages.showWarningDialog("No file to be review", "Error"); return; } VirtualFile target = vFiles[0]; /* * viewのフルパス * {projectBasePath}/application/views/manager/report/network.php * コントローラ側の呼び出し * $this->setTemplate('manager/report/network'); * 検索に使いたい文字列 * manager/report/network */ String filePath = target.getCanonicalPath() .replace(viewBasePath + "/", "") .replace("." + target.getExtension(),""); // 検索実行 FindManager findManager = FindManager.getInstance(project); FindModel findModel = findManager.getFindInProjectModel().clone(); findModel.setStringToFind("['\"]" + filePath + "['\"]"); findModel.setRegularExpressions(true); FindInProjectManager.getInstance(project).startFindInProject(findModel); } |
動かしてみる
[Run] -> [Debug Plugin] から実行すると、 IntelliJ IDEA が別プロセスで起動します。
jarファイルの作成
[Build] -> [Prepare Plugin Module ‘<module name>’ for Deployment] で jar ファイルを作成します。
PhpStormにインストール
[File] -> [Settings] -> [Plugins] -> [Install plugin from disk] から作成した jarファイルをインストール
PhpStormを再起動すると反映されます。
PhpStormで動作確認
コンテキストメニューを開くと作成したプラグインの項目が追加されています。
実行すると検索結果が表示され、コントローラへのジャンプが楽になりました。
まとめ
Java初心者で最初は不安でしたが
IDEの補助と公開されているコードを参考に、最低限の機能は実装できました。
検索オプションでまだ不明な箇所があるので、引き続き調査&改良していきたいです。