ディレクトリ構造の理解

Scalaのプロジェクトを構築する際、特にsbt (Scala Build Tool)を用いた場合、一般的に採用される標準的なディレクトリ構造があります。この構造はScala開発における可読性、保守性、ビルドの自動化に適したものです。以下では、そのディレクトリ構造の概要と各フォルダの役割について詳しく説明します。


Scala(sbt)の標準的なディレクトリ構造

bash
your-project/ ├── build.sbt ├── project/ │ └── build.properties ├── src/ │ ├── main/ │ │ ├── scala/ │ │ │ └── your/package/structure/ │ │ └── resources/ │ ├── test/ │ │ ├── scala/ │ │ │ └── your/package/structure/ │ │ └── resources/ └── target/

各ディレクトリ・ファイルの詳細

build.sbt

  • プロジェクトのビルド設定を記述するファイルです。

  • 依存ライブラリ、Scalaのバージョン、プロジェクト名などを定義します。

  • 例:

    scala
    name := "MyScalaProject" version := "0.1.0" scalaVersion := "2.13.12" libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.17" % Test

project/

  • sbt自身やプラグインの設定などを記述します。

project/build.properties

  • 使用するsbtのバージョンを指定します。

  • 例:

    ini
    sbt.version=1.9.7

src/main/scala/

  • アプリケーションのScalaコードを配置します。

  • パッケージに応じたディレクトリ構造を維持するのが一般的です(例:your/package/structure/)。

src/main/resources/

  • 設定ファイルやテンプレートファイルなど、アプリケーションが利用するリソースを配置します。

  • これらのリソースはクラスパスに含まれ、Scalaコードから参照可能です。

src/test/scala/

  • テストコードを記述する場所です。

  • 単体テストや統合テストのScalaコードを配置します。

src/test/resources/

  • テスト時に必要な設定ファイルやデータファイルなどを配置します。

target/

  • sbtがビルドした成果物(クラスファイルやJARファイル)が保存されます。

  • 通常、手動でこのディレクトリを編集することはありません。


よくある追加ディレクトリ

  • lib/
    外部JARファイルを直接配置する場合に使用されます。

  • doc/
    プロジェクトのドキュメントを配置します。


補足:パッケージ構造の例

ScalaではJavaと同様にパッケージ構造を明確にすることが推奨されます。例えば以下のようにします:

scala
// ファイル: src/main/scala/com/example/app/Main.scala package com.example.app object Main extends App { println("Hello, Scala!") }

この場合、対応するディレクトリは src/main/scala/com/example/app/ となります。


まとめ

Scalaプロジェクトでは、sbtを使うことで標準的かつスケーラブルなディレクトリ構造を簡単に構築できます。各ディレクトリには明確な役割があり、これを理解・遵守することは、大規模な開発やチーム開発においても重要です。

この構造に慣れることで、効率的な開発や保守性の高いコードベースの構築が可能になります。

生成日:2025/05/04