Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated May 2, 2026

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

Apollo Kotlin のセットアップ

Apollo Kotlin には 2 つの主要コンポーネントが含まれています。スキーマとオペレーション ファイルを読み込んで型安全な Kotlin コードを生成する Gradle プラグインと、生成されたコードを使用してリクエストを実行するランタイム クライアントです。このページでは、依存関係の追加、Gradle プラグインの設定、Apollo クライアントのセットアップについて説明します。

依存関係を追加する

バージョン カタログ (gradle/libs.versions.toml) に以下を追加します。

[versions]
apollo = "4.1.0"
apolloAppsync = "1.0.0"
[libraries]
apollo-runtime = { group = "com.apollographql.apollo", name = "apollo-runtime", version.ref = "apollo" }
apollo-appsync = { group = "com.amplifyframework", name = "apollo-appsync", version.ref = "apolloAppsync" }
apollo-appsync-amplify = { group = "com.amplifyframework", name = "apollo-appsync-amplify", version.ref = "apolloAppsync" }
[plugins]
apollo = { id = "com.apollographql.apollo", version.ref = "apollo" }

2 つの AppSync Apollo Extensions 依存関係が必要です。

  • com.amplifyframework:apollo-appsync — コア クラスを提供します。AppSyncEndpointAppSyncInterceptor、および認可器タイプ (ApiKeyAuthorizerAuthTokenAuthorizerIamAuthorizer)
  • com.amplifyframework:apollo-appsync-amplify — Amplify 統合を提供します。Amplify 設定を読み込み、認証トークンを取得するための ApolloAmplifyConnector

基本的な apollo-appsync ライブラリは、apollo-appsync-amplify の推移的依存関係として自動的に公開されないため、両方を明示的に追加する必要があります。

Apollo プラグインをルート build.gradle.kts に追加します。

plugins {
// ... existing plugins
alias(libs.plugins.apollo) apply false
}

プラグインと依存関係をアプリ build.gradle.kts に追加します。

plugins {
// ... existing plugins
alias(libs.plugins.apollo)
}
dependencies {
// Apollo Kotlin
implementation(libs.apollo.runtime)
// AWS AppSync Apollo Extensions
implementation(libs.apollo.appsync)
implementation(libs.apollo.appsync.amplify)
// Keep your existing Amplify Auth dependencies (if using Amplify for auth)
// implementation(libs.amplify.auth.cognito)
// implementation(libs.amplify.api)
}

Apollo Gradle プラグインを設定する

詳細については Apollo Kotlin の入門セクションを参照し、すべての設定オプションについてはGradle プラグイン設定ドキュメントを参照してください。

Apollo 設定は以下のような形になります。

apollo {
service("example") {
packageName.set("com.example.appsync")
schemaFile.set(file("src/main/graphql/schema.json"))
// Map AppSync custom scalars to Kotlin String.
// Without this, fields like createdAt and updatedAt will be
// generated as `Any` instead of `String`.
// IMPORTANT: Only include scalars that are actually used in your schema.
// Apollo will error on unknown scalars. Check your downloaded schema.json
// to see which custom scalars your API uses.
mapScalarToKotlinString("AWSDateTime")
mapScalarToKotlinString("AWSTimestamp")
// Add any of the following only if your schema uses them:
// mapScalarToKotlinString("AWSDate")
// mapScalarToKotlinString("AWSTime")
// mapScalarToKotlinString("AWSEmail")
// mapScalarToKotlinString("AWSJSON")
// mapScalarToKotlinString("AWSURL")
// mapScalarToKotlinString("AWSPhone")
// mapScalarToKotlinString("AWSIPAddress")
}
}

カスタム スカラー: AWS AppSync はカスタム GraphQL スカラー タイプ (AWSDateTimeAWSJSON など) を使用します。デフォルトでは、Apollo はこれらを Kotlin では Any として生成します。これは createdAtupdatedAt などのフィールドが String ではなく Any 型を持つことを意味します。mapScalarToKotlinString() を使用してそれらを String にマップします。ダウンロードした schema.json に存在するスカラーのみをマップしてください。Apollo 4.x は、スキーマに存在しないスカラーをマップすると「unknown scalar」エラーで失敗します。DataStore でサポートされた一般的な AppSync スキーマは AWSDateTimeAWSTimestamp を使用します。詳細については、AppSync Apollo Extensions 型マッピング ドキュメントを参照してください。

スカラー型の生成: Apollo の一部のバージョンでは、mapScalarToKotlinString() がフラグメント フィールドに完全に伝播しない場合があります。PostDetails フラグメント クラスでは createdAtupdatedAt などのフィールドが引き続き Any として生成される可能性があります。実行時に、これらの値は文字列なので、.toString() を使用して安全に操作できます (例:post.createdAt?.toString())。生成されたコードを build/generated/source/apollo/ で確認して、実際の型を確認してください。

生成された列挙型: Apollo Kotlin は GraphQL 列挙型を Java スタイルの列挙ではなく Kotlin シール クラス として生成します。.values().valueOf() などの標準 Java 列挙メソッドは 動作しません。代わりに .knownEntries を使用してください。

// This will NOT compile — Apollo enums are not Java enums
PostStatus.values()
// Use this instead
PostStatus.knownEntries

UI コードが .values() を使用してドロップダウンやピッカーを作成する場合は、すべてのオカレンスを .knownEntries に更新してください。

Apollo クライアントを設定する

Apollo のランタイム コンポーネントは、認可モードとサブスクリプション プロトコルの処理を含む AWS AppSync に接続するように設定する必要があります。AWS AppSync Apollo Extensions ライブラリは必要なロジックを実装します。

Amplify Gen 2 設定 (amplify_outputs.json) を使用する

プロジェクトが Amplify Gen 2 を使用している (または Gen 1 設定を変換している場合 — 以下の注記を参照) 場合、ApolloAmplifyConnector を使用してエンドポイントを読み込み、認可を自動的に設定できます。

API キー認証の場合:

val connector = ApolloAmplifyConnector(context, AmplifyOutputs(R.raw.amplify_outputs))
val apolloClient = ApolloClient.Builder()
.serverUrl(connector.endpoint.serverUrl.toString())
.addHttpInterceptor(AppSyncInterceptor(connector.apiKeyAuthorizer()))
.build()

Cognito ユーザー プール認証 (所有者ベースの認可) の場合:

val connector = ApolloAmplifyConnector(context, AmplifyOutputs(R.raw.amplify_outputs))
val apolloClient = ApolloClient.Builder()
.serverUrl(connector.endpoint.serverUrl.toString())
.addHttpInterceptor(AppSyncInterceptor(connector.cognitoUserPoolAuthorizer()))
.build()

Gen 1 から Gen 2 への設定変換: プロジェクトが Amplify Gen 1 (amplifyconfiguration.json) を使用している場合、ApolloAmplifyConnector はそれで直接動作しません。Gen 2 形式 (amplify_outputs.json) が必要です。ampx CLI を使用して既存の Gen 1 バックエンドから amplify_outputs.json を生成できます。

npx ampx generate outputs \
--stack <your-cloudformation-stack-name> \
--out-dir app/src/main/res/raw \
--outputs-version 1

スタック名は amplify/backend/amplify-meta.json または AWS CloudFormation コンソールで見つけることができます。または、Amplify App ID を使用してください。

npx ampx generate outputs \
--app-id <your-amplify-app-id> \
--branch <branch-name> \
--out-dir app/src/main/res/raw \
--outputs-version 1

--outputs-version フラグは出力形式を制御します。バージョン 0 は classic amplify-configuration 形式を生成し、バージョン 1ApolloAmplifyConnector が必要とする新しい amplify_outputs 形式を生成します。このコマンドを実行した後、生成された amplify_outputs.jsonapp/src/main/res/raw/ に配置します。

Amplify Gen 1 設定 (amplifyconfiguration.json) を使用する — マニュアル エンドポイント

既存の Gen 1 amplifyconfiguration.json を Amplify 認証で使用し続け、設定形式を変換しない場合は、Apollo クライアントを手動で設定できます。仍然使用している Amplify (認証用) — Apollo エンドポイント設定のみを手動で行います。

API キー認証の場合:

val endpoint = AppSyncEndpoint("<your-appsync-endpoint>")
val authorizer = ApiKeyAuthorizer("<your-api-key>")
val apolloClient = ApolloClient.Builder()
.serverUrl(endpoint.serverUrl.toString())
.addHttpInterceptor(AppSyncInterceptor(authorizer))
.build()

Cognito ユーザー プール認証 (認証トークン取得に Amplify 認証を使用) の場合:

Cognito 認証にまだ Amplify を使用しているが Apollo を手動で設定している場合は、ApolloAmplifyConnector.fetchLatestCognitoAuthToken を使用して認証トークンを取得できます。このメソッドは Kotlin コルーチンではなく、コールバック ベースの Java Consumer パラメータを使用するため、suspendCoroutine でラップする必要があります。

import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
val endpoint = AppSyncEndpoint("<your-appsync-endpoint>")
val authorizer = AuthTokenAuthorizer {
suspendCoroutine { cont ->
ApolloAmplifyConnector.fetchLatestCognitoAuthToken(
{ token -> cont.resume(token) },
{ error -> cont.resumeWithException(error) }
)
}
}
val apolloClient = ApolloClient.Builder()
.serverUrl(endpoint.serverUrl.toString())
.addHttpInterceptor(AppSyncInterceptor(authorizer))
.build()

どのアプローチを使用する必要がありますか? Gen 1 プロジェクトを移行していて、設定変換に対処したくない場合は、マニュアル エンドポイント アプローチが最も簡単なパスです。amplifyconfiguration.json を Amplify 認証で保持し、Apollo を AppSync エンドポイントに直接ポイントします。単一の統一設定を優先する場合は、ampx CLI を使用して amplify_outputs.json に変換してください (上記の Gen 2 設定セクションを参照)。

AppSync エンドポイントの検索: AppSync エンドポイント URL は、AWS AppSync コンソールで API の設定ページで見つけるか、amplifyconfiguration.jsonapi > plugins > awsAPIPlugin > <api-name> > endpoint で見つけることができます。

インポート に関する注記: AppSyncEndpointAppSyncInterceptorcom.amplifyframework.apollo.appsync にあります。AuthTokenAuthorizerApiKeyAuthorizercom.amplifyframework.apollo.appsync.authorizers にあります。ApolloAmplifyConnectorcom.amplifyframework.apollo.appsync にあります (apollo-appsync-amplify アーティファクトで提供されます)。