ファイルを作った後に必ず書かないといけないコードがあれば、自動生成されるようにしたいですよね。Lombok
みたいなプラグインもありますが、そうはいってもプロジェクト個別なデフォルトなコードがあったりします。
デフォルトなコードを自動生成する方法はいくつかあるかもですが、私は IntelliJ のファイルテンプレート機能を使っています。
環境
IntelliJ IDEA 2018.1.7 (Ultimate Edition)
(昔、もっと古いバージョンでも利用できたので、今使ってる人ならまず使えるかと思います)
ファイルテンプレート機能
ファイルテンプレート機能といっているのは、以下の項目における設定のことです(コードテンプレート機能というのも含まれていますがこの記事では触れません)。
Preference -> Editor -> File and Code Templates
使い方
構文は Apache Velocity テンプレート言語に沿って書きます。
例えば、Java
(Spring Boot
)でリポジトリを実装するときに、必ず implements
するものや、オーバライドしないといけないものを自動で用意したいとすれば、以下のようにします。
# if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
# parse("File Header.java")
# set ($name = ${NAME})
# if ($name.contains("RepositoryImpl"))
import web.app.repo.BaseRepository;
@Repository
public class $name implements BaseRepository {
@Override
public void findOne() {
}
}
# else
public class $name {
}
# end
実際には findOne()
の戻り値が void
や、仮引数が無いということはないと思います。
なのでこのままだとエラーになるでしょうが、補うのは簡単なので例としては気にしないことにします。
以下は、説明をつけたものです(//している文が説明)。
// パッケージ名
# if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
// 外部テンプレート(File Header.java)のインポート
# parse("File Header.java")
// クラス名を変数に退避(${NAME}のままだと.contains()などチェインできなかったので)
# set ($name = ${NAME})
// クラス名に RepositoryImpl が含まれているなら自動で生成される部分
# if ($name.contains("RepositoryImpl"))
import web.app.repo.BaseRepository;
@Repository
public class $name implements BaseRepository {
@Override
public void findOne() {
}
}
// 条件に該当しない場合に生成される部分(デフォルト)
# else
public class $name {
}
# end
おわりに
他にもいくつかテンプレート化したコードがあり、個人的には、大いに楽をできています。
人によっては、エディタを使いこなせば、これぐらいのコードは秒で書けるじゃんと思うでしょうし、実際に言われたこともありますが、最初からあったほうが楽だし、結構なにを書くか忘れちゃうもので……。
いったんこれで満足してますが、機能をもっと使いこなせば、もっといろいろできるかもですね。