xml
<topic xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
title="サーバーの依存関係を追加する"
id="server-dependencies" help-id="Gradle">
<show-structure for="chapter" depth="2"/>
<link-summary>既存のGradle/MavenプロジェクトにKtorサーバーの依存関係を追加する方法を学びます。</link-summary>
<p>
このトピックでは、Ktorサーバーに必要な依存関係を既存のGradle/Mavenプロジェクトに追加する方法について説明します。
</p>
<chapter title="リポジトリを構成する" id="repositories">
<p>
Ktorの依存関係を追加する前に、このプロジェクトのリポジトリを構成する必要があります:
</p>
<list>
<li>
<p>
<control>プロダクション</control>
</p>
<p>
KtorのプロダクションリリースはMavenセントラルリポジトリで入手可能です。
このリポジトリはビルドスクリプトで次のように宣言できます:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" repositories { mavenCentral() }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" repositories { mavenCentral() }"/>
</tab>
<tab title="Maven" group-key="maven">
<note>
<p>
プロジェクトは<a href="https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#super-pom">Super POM</a>からセントラルリポジトリを継承しているため、<Path>pom.xml</Path>ファイルにMavenセントラルリポジトリを追加する必要はありません。
</p>
</note>
</tab>
</tabs>
</li>
<li>
<p>
<control>早期アクセスプログラム (EAP)</control>
</p>
<p>
Ktorの<a href="https://ktor.io/eap/">EAP</a>バージョンにアクセスするには、<a href="https://maven.pkg.jetbrains.space/public/p/ktor/eap/io/ktor/">Spaceリポジトリ</a>を参照する必要があります:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" repositories { maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" repositories { maven { url "https://maven.pkg.jetbrains.space/public/p/ktor/eap" } }"/>
</tab>
<tab title="Maven" group-key="maven">
<code-block lang="XML" code=" <repositories> <repository> <id>ktor-eap</id> <url>https://maven.pkg.jetbrains.space/public/p/ktor/eap</url> </repository> </repositories>"/>
</tab>
</tabs>
<p>
Ktor EAPは、<a href="https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev">Kotlin開発リポジトリ</a>を必要とする場合があることに注意してください:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" repositories { maven { url = uri("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") } }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" repositories { maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" } }"/>
</tab>
<tab title="Maven" group-key="maven">
<code-block lang="XML" code=" <repositories> <repository> <id>ktor-eap</id> <url>https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev</url> </repository> </repositories>"/>
</tab>
</tabs>
</li>
</list>
</chapter>
<chapter title="依存関係を追加する" id="add-ktor-dependencies">
<chapter title="コア依存関係" id="core-dependencies">
<p>
すべてのKtorアプリケーションには、少なくとも以下の依存関係が必要です:
</p>
<list>
<li>
<p>
<code>ktor-server-core</code>: Ktorのコア機能を含みます。
</p>
</li>
<li>
<p>
ネットワークリクエストを処理する<Links href="/ktor/server-engines" summary="ネットワークリクエストを処理するエンジンについて学ぶ">エンジン</Links>の依存関係 (例: <code>ktor-server-netty</code>)。
</p>
</li>
</list>
<p>
異なるプラットフォーム向けに、Ktorは<code>-jvm</code>のようなサフィックスを持つプラットフォーム固有のアーティファクト(例: <code>ktor-server-core-jvm</code>や<code>ktor-server-netty-jvm</code>)を提供しています。
Gradleは特定のプラットフォームに適したアーティファクトを解決しますが、Mavenはこの機能をサポートしていません。
つまり、Mavenの場合はプラットフォーム固有のサフィックスを手動で追加する必要があります。
基本的なKtorアプリケーションの<code>dependencies</code>ブロックは次のようになります:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" dependencies { implementation("io.ktor:ktor-server-core:3.2.3") implementation("io.ktor:ktor-server-netty:3.2.3") }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" dependencies { implementation "io.ktor:ktor-server-core:3.2.3" implementation "io.ktor:ktor-server-netty:3.2.3" }"/>
</tab>
<tab title="Maven" group-key="maven">
<code-block lang="XML" code=" <dependencies> <dependency> <groupId>io.ktor</groupId> <artifactId>ktor-server-core-jvm</artifactId> <version>3.2.3</version> </dependency> <dependency> <groupId>io.ktor</groupId> <artifactId>ktor-server-netty-jvm</artifactId> <version>3.2.3</version> </dependency> </dependencies>"/>
</tab>
</tabs>
</chapter>
<chapter title="ロギング依存関係" id="logging-dependency">
<p>
Ktorは、さまざまなロギングフレームワーク(例: LogbackやLog4j)のファサードとしてSLF4J APIを使用し、アプリケーションイベントをログに記録できます。
必要なアーティファクトの追加方法については、<a href="server-logging.md#add_dependencies">ロガーの依存関係を追加する</a>を参照してください。
</p>
</chapter>
<chapter title="プラグイン依存関係" id="plugin-dependencies">
<p>
プラグインは、シリアライゼーション、コンテンツエンコーディング、圧縮などの共通機能を提供します。<Links href="/ktor/server-plugins" summary="プラグインは、シリアライゼーション、コンテンツエンコーディング、圧縮などの共通機能を提供します。">プラグイン</Links>は、追加の依存関係を必要とする場合があります。
詳細については、関連トピックを参照してください。
</p>
</chapter>
</chapter>
<chapter title="Ktorのバージョン整合性を確保する" id="ensure-version-consistency">
<chapter id="using-gradle-plugin" title="Ktor Gradleプラグインを使用する">
<p>
<a href="https://github.com/ktorio/ktor-build-plugins">Ktor Gradleプラグイン</a>を適用すると、Ktor BOM(Bill Of Materials)の依存関係が暗黙的に追加され、すべてのKtor依存関係が同じバージョンであることを保証できます。この場合、Ktorアーティファクトに依存する際にバージョンを指定する必要がなくなります:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" plugins { // ... id("io.ktor.plugin") version "3.2.3" } dependencies { implementation("io.ktor:ktor-server-core") // ... }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" plugins { // ... id "io.ktor.plugin" version "3.2.3" } dependencies { implementation "io.ktor:ktor-server-core" // ... }"/>
</tab>
</tabs>
</chapter>
<chapter id="using-version-catalog" title="公開されたバージョンカタログを使用する">
<p>
公開されたバージョンカタログを使用することで、Ktorの依存関係の宣言を一元化することもできます。
このアプローチには以下の利点があります:
</p>
<list id="published-version-catalog-benefits">
<li>
Ktorのバージョンを独自のカタログで手動で宣言する必要がなくなります。
</li>
<li>
すべてのKtorモジュールを単一の名前空間の下に公開します。
</li>
</list>
<p>
カタログを宣言するには、<Path>settings.gradle.kts</Path>で選択した名前でバージョンカタログを作成します:
</p>
<code-block lang="kotlin" code=" dependencyResolutionManagement { versionCatalogs { create("ktorLibs") { from("io.ktor:ktor-version-catalog:3.2.3") } } }"/>
<p>
その後、モジュールの<Path>build.gradle.kts</Path>でカタログ名を参照して依存関係を追加できます:
</p>
<code-block lang="kotlin" code=" dependencies { implementation(ktorLibs.server.core) // ... }"/>
</chapter>
</chapter>
<chapter title="アプリケーションを実行するためのエントリポイントを作成する" id="create-entry-point">
<p>
Gradle/Mavenを使用してKtorサーバーを<Links href="/ktor/server-run" summary="サーバーKtorアプリケーションを実行する方法を学ぶ。">実行する</Links>方法は、<Links href="/ktor/server-create-and-configure" summary="アプリケーションのデプロイ要件に応じてサーバーを作成する方法を学ぶ。">サーバーを作成する</Links>ために使用する方法に依存します。
アプリケーションのメインクラスを以下のいずれかの方法で指定できます:
</p>
<list>
<li>
<p>
<a href="#embedded-server">embeddedServer</a>を使用する場合、メインクラスを次のように指定します:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" application { mainClass.set("com.example.ApplicationKt") }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" application { mainClass = "com.example.ApplicationKt" }"/>
</tab>
<tab title="Maven" group-key="maven">
<code-block lang="XML" code=" <properties> <main.class>com.example.ApplicationKt</main.class> </properties>"/>
</tab>
</tabs>
</li>
<li>
<p>
<a href="#engine-main">EngineMain</a>を使用する場合、それをメインクラスとして構成する必要があります。
Nettyの場合は次のようになります:
</p>
<tabs group="languages">
<tab title="Gradle (Kotlin)" group-key="kotlin">
<code-block lang="Kotlin" code=" application { mainClass.set("io.ktor.server.netty.EngineMain") }"/>
</tab>
<tab title="Gradle (Groovy)" group-key="groovy">
<code-block lang="Groovy" code=" application { mainClass = "com.example.ApplicationKt" }"/>
</tab>
<tab title="Maven" group-key="maven">
<code-block lang="XML" code=" <properties> <main.class>io.ktor.server.netty.EngineMain</main.class> </properties>"/>
</tab>
</tabs>
</li>
</list>
<note>
<p>
アプリケーションをFat JARとしてパッケージ化する場合、対応するプラグインを構成する際に、サーバーの作成方法も考慮に入れる必要があります。
詳細については、以下のトピックを参照してください:
</p>
<list>
<li>
<p>
Ktor Gradleプラグインを使用して<Links href="/ktor/server-fatjar" summary="Ktor Gradleプラグインを使用して実行可能なFat JARを作成し、実行する方法を学ぶ。">Fat JARを作成する</Links>
</p>
</li>
<li>
<p>
Maven Assemblyプラグインを使用して<Links href="/ktor/maven-assembly-plugin" summary="サンプルプロジェクト: tutorial-server-get-started-maven">Fat JARを作成する</Links>
</p>
</li>
</list>
</note>
</chapter>
</topic>