IntelliJ IDEAを「自分専用の副操縦士」に仕立てる:Intention Action開発入門
こんにちは。普段、皆さんは何気なくIntelliJ IDEAの「Alt+Enter(またはOption+Enter)」を使っているはずです。あの魔法のような自動修正機能、実はあれ、「自分で作ることもできる」という事実はあまり知られていません。
多くのエンジニアが、チーム独自の命名規則や、複雑なドメイン特有の定型コードを「手動」で修正し、レビューで指摘し合っています。しかし、その「指摘」をIDEの機能として組み込んでしまえば、レビューコストはゼロになり、開発の質は強制的に担保されます。
今日は、IntelliJ Platform Plugin SDKを使って、あなたとあなたのチームの生産性を劇的に向上させる「独自のインテンション・アクション(Intention Action)」開発の入り口へご案内しましょう。
—
1. なぜ「インテンション・アクション」なのか
IDEの機能は、単なるテキストエディタを超えた「コンテキストの理解」にあります。
- 既存ツールでは足りない理由: OSSのLinterや静的解析ツールは強力ですが、導入に時間がかかり、複雑なビジネスロジックに基づいた「社内ルール」までは検知できません。
- インテンション・アクションの真価: 開発者が「コードを書いているその瞬間」に介入し、ボタン一つで修正を完了させます。これは、教育コストをシステムに肩代わりさせるという、DevOps的な視点でも極めて投資対効果の高い戦略です。
—
2. 開発環境のセットアップ:最強の「Plugin DevKit」
IntelliJのプラグイン開発には、公式が提供する「IntelliJ Platform Plugin Template」を使うのが現代のベストプラクティスです。
最低限の準備
1. IntelliJ IDEA (UltimateまたはCommunity) をインストール。
2. JDK 17以上 を環境に設定。
3. [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template) をGitHubからテンプレートとして生成(Use this templateボタンを押す)。
このテンプレートには、GitHub ActionsによるCI/CD設定や、テスト環境が全て揃っています。ゼロからビルド設定を書くのは時間の無駄です。プロの現場では、常に「枯れた環境」から出発します。
—
3. Hello World: 「特定のコメントを削除する」アクションを作る
今回は、「`// TODO: デバッグコード`」という文字列を見つけたら、それを一瞬で消し去るアクションを作ります。
手順1: アクションの定義 (`plugin.xml`)
プラグインのメタデータを記述する設定ファイルです。`src/main/resources/META-INF/plugin.xml` に以下を追記します。
手順2: ロジックの実装
Javaクラス `RemoveDebugCommentAction.java` を作成します。`PsiElement`という、IDEがコードを解析した後の抽象構文木(AST)を操作するのが鍵です。
package com.example.plugin;
import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
public class RemoveDebugCommentAction extends BaseIntentionAction {
// ユーザーに表示されるアクション名
@NotNull
@Override
public String getText() { return “不要なデバッグコメントを削除する”; }
@NotNull
@Override
public String getFamilyName() { return “Custom Rules”; }
// アクションが有効になる条件判定
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
// 現在のカーソル位置の要素を取得
PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());
return element != null && element.getText().contains(“TODO: デバッグコード”);
}
// 実行ボタンが押された時の処理
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());
if (element != null) {
// 要素を安全に削除する(IDEのAST操作APIを使用)
element.delete();
}
}
}
—
4. なぜこれが「現場で震えるほど役立つ」のか
このコードのポイントは、`PsiElement`(Program Structure Interface)を操作している点です。
単なる文字列置換(正規表現など)でコードを修正すると、インデントが崩れたり、構文が破壊されたりするリスクがあります。しかし、Psiを使用すれば、IDEはコード構造を維持したまま安全に修正を適用します。
現場での活用例
- レガシーコードの撲滅: 廃止予定のメソッドを呼び出している箇所でAlt+Enterを押し、「最新のAPIに置換する」を選択させる。
- アーキテクチャの強制: Layered Architectureにおいて、コントローラーから直接DAOを呼んでいるコードに対し、「サービス層を経由してください」という警告と自動修正を出す。
—
5. 最後に:賢いエンジニアは「環境」を作る
プラグイン開発は、最初は少し腰が重いかもしれません。しかし、一度「自分たちのルールをIDEに教え込む」体験をしてしまえば、あなたの開発スタイルは劇的に変わります。
「手作業の繰り返し」は、エンジニアにとっての敗北です。
今回作成した小さなアクションが、やがてチーム全体のコーディング規約を自動化し、あなたのチームを世界で最も効率的な開発チームへと進化させる礎になるはずです。
まずは、このコードを動かして「自分でIDEをハックした」という成功体験を味わってください。質問があればいつでもどうぞ。あなたのエンジニアリングライフが、より創造的で楽しいものになることを心から願っています!