IntelliJ に package prefix を省略してくれるPluginが追加されていた。

JetBrainsのブログ

試したいことがあり、新しく Scala のプロジェクトを作成しようとしたら、見慣れないものが追加されていた。

Package prefix なるものが追加されていたPackage prefix なるもの

以前からあったものを見落としていたのかと思ったが、どうも一番上に載せた記事をみると、最近追加されたようだ。

プロジェクトを作成してみると、plugins.sbt となんだか見慣れない下記のプラグインが追加されていた。

addSbtPlugin("org.jetbrains"     % "sbt-ide-settings" % "1.1.0")

build.sbt には下記が追加されていた。

idePackagePrefix := Some("dev.tchiba")

プロジェクトのパネルを見てみると、build.sbt で設定したpackage prefixが表示されている。(build.sbtで idePackagePrefix := Some("dev.tchiba.domain") に書き換えてる)

IDEでの表示を短くしてくれるのかな?と思った(通常は dev.tchiba.domain.model のようにルートディレクトリがなる。すごい見づらい)が、ディレクトリの構造を見てみると違うようだ。

$ tree
.
├── main
│   └── scala
│       └── models
│           ├── circle
│           │   ├── Circle.scala
│           │   ├── CircleFactory.scala
│           │   ├── CircleId.scala
│           │   ├── CircleName.scala
│           │   └── CircleRepository.scala
│           └── user
│               ├── User.scala
│               ├── UserFactory.scala
│               ├── UserId.scala
│               ├── UserName.scala
│               ├── UserRepository.scala
│               └── UserType.scala
└── test
    └── scala

7 directories, 11 files

見た目だけが違う訳ではないらしい。scala配下に dev.tchiba.domain pacakgeは見当たらず。最初から models がある。おそらくコンパイルしたものに含まれるのだろうと思い target の方を見にいくことにした。

scala-2.13
├── classes
│   └── dev
│       └── tchiba
│           └── domain
│               └── models
│                   ├── circle
│                   │   ├── Circle$.class
│                   │   ├── Circle.class
│                   │   ├── CircleFactory.class
│                   │   ├── CircleId$.class
│                   │   ├── CircleId.class
│                   │   ├── CircleName$.class
│                   │   ├── CircleName.class
│                   │   └── CircleRepository.class
│                   └── user
│                       ├── Normal$.class
│                       ├── Normal.class
│                       ├── Premium$.class
│                       ├── Premium.class
│                       ├── User$.class
│                       ├── User.class
│                       ├── UserFactory.class
│                       ├── UserId$.class
│                       ├── UserId.class
│                       ├── UserName$.class
│                       ├── UserName.class
│                       ├── UserRepository.class
│                       └── UserType.class
├── update
│   └── update_cache_2.13
│       ├── inputs
│       └── output
└── zinc
    └── inc_compile_2.13.zip

10 directories, 24 files

予想通り、成果物の方は dev.tchiba.domain が追加されていた。このプラグインは実装時はpakcage prefixを省略し、コンパイル時はpackage prefix を追加してくれる仕組みのようだ。