

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS AppSync でのローカルリゾルバーの使用
<a name="tutorial-local-resolvers"></a>

**注記**  
現在、主に APPSYNC\$1JS ランタイムとそのドキュメントをサポートしています。[こちら](https://docs.aws.amazon.com/appsync/latest/devguide/tutorials-js.html)で APPSYNC\$1JS ランタイムとそのガイドの使用をご検討ください。

AWS AppSync では、サポートされているデータソース (Amazon DynamoDB または Amazon OpenSearch Service) を使用してさまざまなオペレーションを実行できます。ただし、特定のシナリオでは、サポートされているデータソースに対する呼び出しの必要がないことがあります。

そのような場合は、ローカルリゾルバーが役立ちます。リモートのデータソースを呼び出すのではなく、ローカルリゾルバーはリクエストマッピングテンプレートの結果をレスポンスマッピングテンプレートに**転送**します。AWS AppSync ではフィールドの解決は行われません。

ローカルリゾルバーは、いくつかのユースケースで便利です。特によく使用されるのは、データソースの呼び出しをトリガーせずに通知を発行する場合です。そのユースケースの例を示すために、ユーザーが互いに呼び出すことができるページングアプリケーションを構築しましょう。この例では、*サブスクリプション*を活用します。*サブスクリプション*に慣れていない場合は、「[リアルタイムデータ](aws-appsync-real-time-data.md)」チュートリアルを参照してください。

## ページングアプリケーションの作成
<a name="create-the-paging-application"></a>

このページングアプリケーションでは、クライアントは受信箱をサブスクライブでき、他のクライアントにページを送信できます。各ページにはメッセージが含まれています。スキーマは次のとおりです。

```
schema {
    query: Query
    mutation: Mutation
    subscription: Subscription
}

type Subscription {
    inbox(to: String!): Page
    @aws_subscribe(mutations: ["page"])
}

type Mutation {
    page(body: String!, to: String!): Page!
}

type Page {
    from: String
    to: String!
    body: String!
    sentAt: String!
}

type Query {
    me: String
}
```

`Mutation.page` フィールドにリゾルバーをアタッチしましょう。[**スキーマ**] ペインで、右側のパネルのフィールド定義の横にある [*Attach Resolver (リゾルバーのアタッチ)*] をクリックします。*None* 型の新しいデータソースを作成して、*PageDataSource* という名前を付けます。

リクエストマッピングテンプレートで、次のように入力します。

```
{
  "version": "2017-02-28",
  "payload": {
    "body": $util.toJson($context.arguments.body),
    "from": $util.toJson($context.identity.username),
    "to":  $util.toJson($context.arguments.to),
    "sentAt": "$util.time.nowISO8601()"
  }
}
```

レスポンスマッピングテンプレートで、デフォルトの [*Forward the result (結果を転送)*] を選択します。リゾルバーを保存します。これで、アプリケーションの準備ができたので、ページングしましょう。

## ページの送信およびサブスクライブ
<a name="send-and-subscribe-to-pages"></a>

ページを受信するクライアントで、まず受信箱をサブスクライブする必要があります。

[**Queries (クエリ)**] ペインで `inbox` のサブスクリプションを実行しましょう。

```
subscription Inbox {
    inbox(to: "Nadia") {
        body
        to
        from
        sentAt
    }
}
```

 *Nadia* は、`Mutation.page` ミューテーションが呼び出されるたびにページを受け取ります。ミューテーションを実行することで、このミューテーションを呼び出しましょう。

```
mutation Page {
    page(to: "Nadia", body: "Hello, World!") {
        body
        to
        from
        sentAt
    }
}
```

AWS AppSync に任せずにページを送信してそれを受信することで、ローカルリゾルバーの使用方法の例を示しました。