マルチプロジェクトビルドとデプロイ
大規模アプリケーション向けに、複数プロジェクトのSBTビルドを設定・管理し、デプロイに備えます。
「マルチプロジェクトビルドとデプロイ」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。
マルチプロジェクトビルドを使う理由
Scalaアプリケーションが大きくなると、すべてのコードを1つのプロジェクトで管理するのは難しくなります。マルチプロジェクトビルドを使うと、コードベースを整理できます。
マルチプロジェクトビルドでは、次のことが可能です。
- 異なるモジュール(コアロジック、API、ユーティリティなど)を分離する。
- モジュール間の依存関係を明確に管理する。
- アプリケーションの各部分に固有の設定を適用する。
この方法により、モジュール性と保守性が向上します。
複数のプロジェクトを定義する
SBTでは、メインのbuild.sbtファイル内に複数のプロジェクトを定義します。各プロジェクトは通常、lazy valとして定義します。
ルートプロジェクトは通常、これらのサブプロジェクトを集約するか、依存します。
ルートプロジェクトと2つのサブプロジェクトの基本的な構成は次のとおりです。
lazy val root = project
.in(file("."))
.aggregate(core, api)
lazy val core = project
.in(file("core"))
lazy val api = project
.in(file("api"))サブプロジェクトのディレクトリ構成
マルチプロジェクトビルドでは、通常、各サブプロジェクトをプロジェクトのルートレベルにある専用のディレクトリに配置します。
標準的な構成は次のとおりです。
my-app/(ルートプロジェクトのディレクトリ)build.sbt(メインのビルドファイル)project/(SBTのビルド定義ファイル)core/(サブプロジェクト「core」のディレクトリ)src/(「core」のソースコード)
api/(サブプロジェクト「api」のディレクトリ)src/(「api」のソースコード)
サブプロジェクトのコード例
各サブプロジェクトには、独自のScalaソースファイルを含めることができます。たとえば、coreプロジェクトに簡単なユーティリティを用意できます。
coreプロジェクト内でこの例を実行してみてください。
package com.coddykit.core
object Greeter {
def greet(name: String): String = s"Hello, $name!"
}
object CoreApp {
def main(args: Array[String]): Unit = {
println(Greeter.greet("CoddyKit"))
}
}プロジェクト間の依存関係
あるサブプロジェクトが、別のサブプロジェクトのコードを使用する必要があることはよくあります。たとえば、apiプロジェクトでcoreプロジェクトのGreeterが必要になる場合があります。
このような依存関係は、build.sbtで.dependsOn()を使用して宣言します。
lazy val root = project
.in(file("."))
.aggregate(core, api)
lazy val core = project
.in(file("core"))
lazy val api = project
.in(file("api"))
.dependsOn(core)共通設定を共有する
Scalaのバージョンや共通の依存関係など、多くの設定はすべてのサブプロジェクトで同じになることがあります。
重複を避けるために、commonSettingsブロックを定義し、各プロジェクトに適用できます。
lazy val commonSettings = Seq(
scalaVersion := "2.13.8",
organization := "com.coddykit"
)
lazy val root = project
.in(file("."))
.aggregate(core, api)
.settings(commonSettings)
lazy val core = project
.in(file("core"))
.settings(commonSettings)
lazy val api = project
.in(file("api"))
.dependsOn(core)
.settings(commonSettings)タスクを集約する
ルートプロジェクトがサブプロジェクトを集約している場合、ルートでcompileなどのタスクを実行すると、集約されたすべてのサブプロジェクトでそのタスクが自動的に実行されます。
たとえば、ルートディレクトリでsbt compileと入力すると、coreとapiの両方がコンパイルされます。
この動作の鍵となるのが.aggregate()メソッドです。
デプロイ用にパッケージ化する
アプリケーションをビルドしたら、デプロイ用にパッケージ化する必要があります。通常は、実行可能なJAR(Java Archive)ファイルを作成します。
マルチプロジェクトビルドでは、プロジェクトのすべてのコードと依存関係を含む単一のJARが必要になることがよくあります。これは「fat JAR」または「uber JAR」と呼ばれます。
SBTはデフォルトではfat JARを作成しませんが、プラグインを利用できます。
fat JAR用のSBT Assembly Plugin
sbt-assemblyプラグインは、fat JARの作成に広く使われています。コンパイル済みのすべてのクラスと依存関係を、1つの実行可能なJARにまとめます。
まず、project/plugins.sbtにプラグインを追加します。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.0.0")マルチプロジェクトのパッケージ化
マルチプロジェクトScalaアプリケーションをデプロイ用にパッケージ化することについて、正しい記述は次のうちどれですか。
振り返りと次のステップ
SBTでマルチプロジェクトビルドを構成・管理する方法を学びました。
build.sbtでサブプロジェクトを定義する方法を学びました。- ディレクトリを整理し、
.dependsOn()でプロジェクト間の依存関係を管理する方法を確認しました。 - 共通設定の共有とタスクの集約について説明しました。
- 最後に、
sbt-assemblyプラグインを使ってfat JARを作成する、デプロイ用のパッケージ化について学びました。
マルチプロジェクトビルドを習得することは、より大規模で複雑なScalaアプリケーションにおいて、モジュール性と効率的な開発ワークフローを実現するために非常に重要です。
よくある質問
「マルチプロジェクトビルドとデプロイ」レッスンは無料ですか?
はい。「マルチプロジェクトビルドとデプロイ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。
「マルチプロジェクトビルドとデプロイ」で何を学びますか?
大規模アプリケーション向けに、複数プロジェクトのSBTビルドを設定・管理し、デプロイに備えます。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「マルチプロジェクトビルドとデプロイ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SBTプロジェクトのセットアップと基礎
- 依存関係の管理とプラグイン
- マルチプロジェクトビルドとデプロイ