0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sbtのprojectディレクトリについて

Posted at

今までなんとなくでやってきたので、自戒を込めてメモです。

sbtでサブプロジェクトを定義する方法を調べている最中に見つけたものです。

初期状態

sbtでプロジェクトを作成すると、だいたいこんな構成になります。

app
  /project
    build.properties
  /src
    /main
      /scala
  build.sbt

build.sbtの中身はこんな感じです。

build.sbt
name := "app"
version := "0.1"
scalaVersion := "2.12.8"

初期だと、アプリ名とバージョン指定するものに見えるので、役割が分かりづらいです。

build.sbtの役割

ビルド定義のルートファイルとしての役割を持ちます。

ビルド定義として記述するのは、おおむねこのようなものになります。

  • 参照するライブラリ定義
  • 警告やエラーの定義
  • 特定のコマンドを拡張

build.sbtの中に、すべてのプロジェクトのビルド定義を記載することも可能です。

projectディレクトリ

sbtの文書 によれば、

project ディレクトリは、ビルドをビルドする方法を記述したビルドの中のビルドだ。

と記載されています。要するに、ビルド定義を分割して記述できる、ということです。

なお、最初から格納されているbuild.propertiesは、ビルドに使うsbtのバージョンを指定します。

参考:sbtバージョンの指定

よくある分割

依存関係のライブラリを管理する場合、Dependencies.scalaという名前が良く使われるようです。

sbtのページで紹介されている

sbt new sbt/scala-seed.g8

コマンドで作成できるプロジェクトでは、以下のように定義されています。

Dependencies.scala
import sbt._

object Dependencies {
  lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
}

そして、build.sbtはこのように記述されています。

build.sbt
import Dependencies._

ThisBuild / scalaVersion     := "2.12.8"
ThisBuild / version          := "0.1.0-SNAPSHOT"
ThisBuild / organization     := "com.example"
ThisBuild / organizationName := "example"

lazy val root = (project in file("."))
  .settings(
    name := "Hello",
    libraryDependencies += scalaTest % Test
  )
# 以下省略

このように、import Dependencies._で、projectディレクトリ配下のファイルを参照できます。

ファイル名など

慣例的に、依存ファイルの管理にはDependencies.scalaというファイルが使われるようです。ただ、sbtの仕様としては、

ファイル名は何でもよい

となっています。projectディレクトリ以下に、拡張子が.scalaまたは.sbtのファイルが格納されていればよい、と記載されています。

ファイル分割が必要なケース

build.sbt において、トップレベルで object や class を定義することはできない。 それらが必要なら project/ 配下にScala ソースファイル (.scala) を置くべきだろう。

とのことです。どうしてもclassが必要な場合、というのが、私には思いつかないです。いろいろなプロジェクト調べてみると、何かわかるかもしれません。

とはいえ、

また .scala ファイルを使うかどうかの判断には、君や君のチームがどれくらい Scala に慣れているかということも関係するだろう。

という記述もあるので、慣れるまでは無理に使わないほうが良いのだろうと思います。

sbtの文書を読まないと、と思い始めたあたりが、使い始める良い頃合いなのかもしれません。

参考

sbt - ビルド定義

sbt - ビルドの整理

sbt - Hello World!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?