電通総研 テックブログ

電通総研が運営する技術ブログ

IntelliJプラグイン「Doma Tools」のご紹介~OSSなプラグイン開発~

はじめまして。電通総研ITの寺尾です。
本記事では、私が開発に携わったJetBrainsのIntelliJ向けのプラグインDoma Tools for IntelliJ」(以下、「Doma Tools」と表記)についてご紹介します。

Doma Tools」とは

Doma Tools」は、IntelliJ IDEA上でDomaを用いた開発を支援するためのツールです。
IntelliJ IDEAのUltimateやCommunity Editionで動作し、DomaのDAOやSQLに焦点を当てた便利な機能を提供します。

Domaとは?

Domaは、JavaやKotlinで実装されたアプリケーションにおいて、データの取得や更新を実現するOSSフレームワークです。
詳細は、公式のドキュメントをご参照ください。
Doma

主要機能紹介

ver1.0.0時点での「Doma Tools」のメイン機能の一部について紹介させていただきます。

その他の機能については、プラグインリポジトリREADMEをご参照ください。

ファイルジャンプ

大きなプロジェクトになると、DAO名から対応するSQLファイルを探す作業がかなりの手間になります。

似たようなメソッド名が多いとなおのこと。IntelliJの検索アクションを利用しても開くファイルを間違えてしまうかもしれません😭

Doma Tools」ではアクションとガターアイコンにより、一発でDAOインタフェースファイルとSQLファイルを相互移動できるようにします。

DAOメソッド名上でメニューを開き、Doma Tools > Jump to SQLを選択、またはショートカットキーで対応するSQLファイルを開くことができます。
DAOメソッドの行に表示されるガターアイコンをクリックすることでも、SQLファイルにジャンプ可能です。

その逆も然り、SQLファイル上でも同様にアクションやガターアイコンからDAOメソッド定義箇所にジャンプすることができます。

FileJump

コード検査

ビルド時に初めてDomaにエラーを出されてしまい、地道な修正作業が始まる……。
コーディング時に問題箇所が分からないとストレスになることはないでしょうか。

このプラグインではDomaのルールに違反している箇所をエラーハイライトし、コーディングしながら問題箇所も発見できるコード検査機能を提供します。

DAOメソッドに紐づくSQLファイルチェック

DAOメソッドに対応するSQLファイルが存在しない場合、メソッド名が赤文字でハイライトされます。
同時にクイックフィックスが提案され、ワンクリックで対応するリソースディレクトリにSQLファイルが生成されます📝

GenerateSQL

未使用の引数チェック

SQL内で使用されていないDAOメソッドパラメーターをエラーハイライトし、実装漏れを発見できるようになります。

inspection

不正なバインド変数チェック

SQLファイル内で、DAOメソッドのパラメーターにないバインド変数や、存在しないフィールド、メソッドの呼び出しなどをエラーハイライトします。

コピペしたままで混入した、誤った変数名やクラス名も即座に発見できます🔍

inspectionValidParameter

inspectionPackageName

コード補完

SQL内でバインド変数のコーディングを行う際、「こんな変数名だったっけ…」となりDAOメソッドやEntityクラスの定義を見に行くことはないでしょうか?

コード補完機能により、DAOメソッドのパラメーターから変数名候補を提供します。
また、パラメーターの型に基づいたフィールド、メソッドも補完されます。

Completion

静的フィールド、メソッドへのアクセスでも同様に、クラス名からstaticなプロパティの補完までサポートします。
CompletionStatic

SQLフォーマット(プレビュー機能

フォーマットを統一することが大事なことは分かっていても、外部のフォーマットツールの選定は大変…。ということもあるでしょう😔

Doma Tools」でも、SQLフォーマットルールを統一できる機能の提供を目指しています。
こちらはまだプレビュー版となります。現在は基本的なクエリのフォーマットをサポートしています。

SQLキーワードをレベル分けし、レベルやキーワードの組み合わせによって改行、インデントルールを指定しています。
そのほか、複数のカラム行が見やすくなるような改行や、サブクエリグループを視覚的に判別しやすくなるようなフォーマッターの開発を進めています。

Format

さいごに

初めてのプラグイン開発、そして初めてのKotlin実装でしたが、無事リリースができたことを嬉しく思います。

プラグイン開発において課題解決に試行錯誤を重ね、実装だけでなくOSSとすることを意識した今回のプロジェクトからは、
技術者として多くの学びを得られました😊

今後は「Doma Tools」の開発経験を基にした、具体的なプラグイン機能実装についてもご紹介していきますので、引き続きご覧いただけますと幸いです。

これからも多くのDomaプロジェクト開発者の貢献に繋がるようアップデートを重ねていきますので、IntelliJ+Domaを使った開発をされている方はぜひご活用ください!

レビューも投稿していただけますと大変励みになります🙇‍♀️

Doma Tools マーケットプレースページ

プラグインOSSとしてDomaコミュニティへ寄贈されています。
不具合修正や機能要望、ディスカッションにもぜひご参加ください。

採用ページ

執筆:@terao.haruka、レビュー:@nakamura.toshihiro
Shodoで執筆されました