メインコンテンツまでスキップ

IDEA 定番プラグインと開発ツール

· 約8分

IDEA はそれ自体で十分に強力ですが、適切なプラグインをいくつか入れるだけで、コード品質チェック、依存関係の調査、フォーマット規約といった日常の雑務にかかる時間を大きく削減できます。この記事では、私が Java 開発でよく使うプラグインとツールを用途別に分類して整理します。必要に応じて選んで使ってください。

静的コード品質管理ツールのデプロイプラットフォーム

Code Quality and Code Security | SonarQube

SonarQube は厳密には IDEA プラグインではなく、独立してデプロイするコード品質管理プラットフォームです。静的解析でコード内のバグ、脆弱性、コードスメル(code smell)をスキャンし、定量的な品質レポートを出してくれます。一般的な使い方は、チーム内にサービスを一式デプロイし、CI フローと組み合わせてコミットやマージのたびに自動スキャンを走らせ、品質問題をマージ前に食い止めるというものです。IDEA 側にも対応するプラグインがあり、サーバーに接続してローカルでスキャン結果を確認できます。

コード品質チェックプラグイン FindBugs

IDEA IDE にプラグインとして直接インストールできます。

FindBugs™ - Find Bugs in Java Programs (sourceforge.net)

FindBugs の原理は、コンパイル後のバイトコードを解析して既知の欠陥パターンとマッチングすることです。例えば null ポインタのデリファレンス、リソースのクローズ漏れ、equals と hashCode の不整合などです。SonarQube とは位置づけが補完的で、SonarQube がチームレベルの継続的な品質管理に向いているのに対し、FindBugs はローカルでコードを書き終えた後にさっと一回スキャンする用途に向いています。

翻訳プラグイン(英語が苦手な人の必需品)

Translation はコード開発ビューの中で直接翻訳できます。

変数名、コメント、ドキュメント文字列を選択してショートカットキーを押すだけで訳文が表示され、ブラウザに切り替えて辞書を引く必要がありません。英語のソースコードコメントを読むときや、変数名を考えるときに特に便利です。

コードフォーマット規約プラグイン

CheckStyle-IDEA は、コードのフォーマット、命名規則、Javadoc、クラス設計などの面からコードの規約とスタイルをチェックすることで、開発者がコーディング規約をより良く遵守できるよう効果的に支援します。

FindBugs とは重点が異なります。FindBugs が探すのは「バグを生みそうなコード」であり、CheckStyle が管理するのは「規約に沿っていないコード」です。チームで 1 つのルールファイル(例えばアリババや Google の Java スタイル規約をベースにカスタマイズしたもの)を共有すれば、全員が生み出すコードのスタイルが揃い、レビュー時にフォーマットの問題で何度もやり取りする必要がなくなります。

Java Maven パッケージ競合検出ツール

Maven Helper はプロジェクト全体の pom.xml 内の依存関係の競合を検出できます。

Maven の依存関係は推移的なので、プロジェクトが大きくなると、同じパッケージが異なる依存経由で異なるバージョンとして間接的に取り込まれることはほぼ必然です。デフォルトの mvn dependency:tree の出力は非常に読みにくいですが、Maven Helper なら IDEA で pom.xml を開くだけで依存関係分析ビューが追加され、競合する依存は赤くマークされ、右クリックで不要なバージョンを exclude できます。バージョン競合が原因の NoSuchMethodError や ClassNotFoundException といった問題を調査するときに非常に役立ちます。

コードミニマップ表示プラグイン

CodeGlance は VSCode のミニマップ表示に似たものです。

エディタの右側にファイル全体のサムネイルを表示します。長いファイルの中でジャンプしたり、おおよその位置を特定したりするとき、スクロールバーをドラッグするより直感的です。

プロジェクトホットデプロイプラグイン(有料)

JRebel はコードや mapper.xml を修正した後の再起動を減らし、作業効率を高めます。

IntelliJ IDEA 2020 JRebel破解

従来の開発フローでは、Java コードを 1 行変えるだけでアプリケーションの再起動が必要で、プロジェクトが大きくなると 1 回の再起動に数十秒から数分かかることもあります。JRebel のアプローチは JVM レベルでクラスのホットスワップを行うというもので、コードを修正しても再起動なしで反映され、MyBatis の mapper.xml の変更までカバーできます。Spring Boot 標準の devtools による再起動方式よりカバー範囲が広いのが特徴です。欠点は商用の有料製品であり、個人で使うにはコストが安くないことです。

JSON 文字列オブジェクトを Java ファイルに変換するプラグイン

GsonFormat

サードパーティ API と連携するとき、JSON レスポンスを受け取って対応する Java Bean を手書きするのは遅いうえにフィールドの書き間違いも起きがちです。GsonFormat なら JSON 文字列をそのまま貼り付けるだけで、フィールドと型が正しく対応したエンティティクラスを自動生成でき、ネスト構造も処理できます。

開発効率ツール

Lombok は Java 開発においてアノテーションで JavaBean の記述を簡略化し、冗長なボイラープレートコードをなくすために生まれたプラグインで、書くクラスをより簡潔にしてくれます。

その原理は、コンパイル時にアノテーションプロセッサでコードを生成することです。@Getter/@Setter は読み書きメソッドを、@Builder はビルダーを、@Slf4j はロガーオブジェクトの宣言を生成します。ソースコード上ではこれらのメソッドは見えませんが、コンパイルされた class ファイルにはすべて含まれています。注意点として、Lombok は両側の連携が必要です。プロジェクトに依存関係を追加し、IDEA にプラグインをインストールする——どちらか一方が欠けても画面中が赤いエラーだらけになります。

ショートカットキー提示プラグイン(ほぼ必須)

Key Promoter X は IntelliJ 系製品(IDEA、Android Studio、CLion など)向けのプラグインで、作業中のマウス操作から基本的なキーボードショートカットを学ぶのを助けてくれます。IDE 内のボタンをマウスで操作すると、Key Promoter X が本来使うべきキーボードショートカットを表示してくれます。これにより、面倒なマウス操作をキー操作に置き換える方法を簡単に学べ、より速いマウスレス開発への移行を後押ししてくれます。現在、ツールバーボタン、メニューボタン、ツールウィンドウとその中の操作をサポートしています。

プラグインのページ:https://plugins.jetbrains.com/plugin/9792-key-promoter-x

この種の「教育型」プラグインの良さは受動的な学習にあります。ショートカット一覧をわざわざ暗記する必要はなく、マウスで頻繁にクリックしている操作ほど繰り返し提示してくれるので、最もよく使うものから自然に覚えられます。

ハマりどころと注意点

1)プラグインは多ければ良いというものではありません。各プラグインはメモリを消費し、インデックス作成や起動速度を遅くします。IDEA が重くなったら、まずプラグインの入れすぎを疑い、使わないものは早めに無効化しましょう。

2)Lombok 関連のコンパイルエラーは、まず依存関係とプラグインの両方が入っているか、そしてアノテーション処理(Annotation Processing)が有効になっているかを確認してください。

3)品質チェック系のプラグイン(FindBugs、CheckStyle)は大きなプロジェクトでフルスキャンすると時間がかかるため、変更したモジュールやファイルだけに増分チェックをかけるのがおすすめです。

4)依存関係の競合を Maven Helper で調査した後の exclude は慎重に。除外するバージョンが本当に他のモジュールから必要とされていないかを確認しないと、問題をコンパイル時から実行時に先送りしてしまう可能性があります。

まとめ

この 10 個のツールは日常のニーズをおおよそ数カテゴリでカバーしています。品質と規約(SonarQube、FindBugs、CheckStyle)、依存関係管理(Maven Helper)、コーディング効率(Lombok、GsonFormat、Translation、CodeGlance)、開発体験(JRebel、Key Promoter X)です。一度に全部入れる必要はありません。自分のプロジェクトの痛点に合わせて選んで入れ、使い慣れてから買い足していくのが、プラグインの正しい付き合い方です。

COMMENTS