

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

# ディレクティブのない GraphQL スキーマからの開始
<a name="tools-graphql-start-from-schema"></a>

空の Neptune データベースから開始し、ディレクティブのない GraphQL スキーマを使用してデータを作成し、クエリを実行できます。以下のコマンドは、そのための AWS リソースを自動的に作成します。

```
neptune-for-graphql \
  --input-schema-file {{(your GraphQL schema file)}}
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name {{(name for your new GraphQL API)}} \
  --create-update-aws-pipeline-neptune-endpoint {{(your Neptune database endpoint)}}:{{(port number)}} \
  --output-resolver-query-https
```

GraphQL スキーマファイルには、以下の TODO 例に示すように GraphQL スキーマタイプが含まれている必要があります。このユーティリティはスキーマを分析し、そのタイプに基づいて拡張バージョンを作成します。グラフデータベースに格納されているノードのクエリとミューテーションを追加し、スキーマにネストされたタイプがある場合は、データベースにエッジとして格納されているタイプ間の関係を追加します。

ユーティリティは AppSync GraphQL API と必要なすべての AWS リソースを作成します。これらのリソースには、一対の IAM ロールと、GraphQL リゾルバーコードを含む Lambda 関数が含まれます。コマンドが完了すると、指定した名前の新しい GraphQL API が AppSync コンソールに表示されます。テストするには、AppSync メニューの **[クエリ]** を使用します。

以下の例は、このしくみを示しています。

## Todo の例、ディレクティブのない GraphQL スキーマからの開始
<a name="tools-graphql-todo-example"></a>

この例では、ディレクティブのない Todo GraphQL スキーマから始めます。このスキーマは {{???samples???}} ディレクトリにあります。次の 2 つのタイプが含まれます。

```
type Todo {
  name: String
  description: String
  priority: Int
  status: String
  comments: [Comment]
}

type Comment {
  content: String
}
```

このコマンドは、Todo スキーマと空の Neptune データベースのエンドポイントを処理して、 AWS AppSync で GraphQL API を作成します。

```
neptune-for-graphql /
  --input-schema-file ./samples/todo.schema.graphql \
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name TodoExample \
  --create-update-aws-pipeline-neptune-endpoint {{(empty Neptune database endpoint)}}:{{(port number)}} \
  --output-resolver-query-https
```

このユーティリティは、`TodoExample.source.graphql` という名前の出力フォルダに新しいファイルを作成し、AppSync に GraphQL API を作成します。このユーティリティは以下を推測します。
+ Todo タイプに新しい CommentEdge タイプ用の `@relationship` が追加されました。これはリゾルバーに対して、CommentEdge という名前のグラフデータベースエッジを使用して Todo を Comment に接続するよう指示します。
+ クエリやミューテーションを容易にするため、TodoInput という新しい入力が追加されました。
+ 各タイプ (Todo、Comment) に 2 つのクエリが追加されました。1 つは、`id` を使用して、または入力にリストされているタイプフィールドのいずれかを使用して 1 つのタイプを取得するためのもので、もう 1 つはそのタイプの入力を使用してフィルタリングされた複数の値を取得するためのものです。
+ 各タイプに 3 つのミューテーション (作成、更新、削除) が追加されました。削除するタイプは、`id` またはそのタイプの入力を使用して指定します。これらのミューテーションは、Neptune データベースに保存されているデータに影響します。
+ 接続に「接続」と「削除」の 2 つのミューテーションが追加されました。Neptune によって使用される開始頂点と終了頂点のノード ID を入力として取り、接続はデータベース内のエッジです。

リゾルバーはクエリとミューテーションを名前で認識しますが、[以下](tools.md)のようにカスタマイズできます。

`TodoExample.source.graphql` ファイルの内容は次のとおりです。

```
type Todo {
  _id: ID! @id
  name: String
  description: String
  priority: Int
  status: String
  comments(filter: CommentInput, options: Options): [Comment] @relationship(type: "CommentEdge", direction: OUT)
  bestComment: Comment @relationship(type: "CommentEdge", direction: OUT)
  commentEdge: CommentEdge
}

type Comment {
  _id: ID! @id
  content: String
}

input Options {
  limit: Int
}

input TodoInput {
  _id: ID @id
  name: String
  description: String
  priority: Int
  status: String
}

type CommentEdge {
  _id: ID! @id
}

input CommentInput {
  _id: ID @id
  content: String
}

input Options {
  limit: Int
}

type Query {
  getNodeTodo(filter: TodoInput, options: Options): Todo
  getNodeTodos(filter: TodoInput): [Todo]
  getNodeComment(filter: CommentInput, options: Options): Comment
  getNodeComments(filter: CommentInput): [Comment]
}

type Mutation {
  createNodeTodo(input: TodoInput!): Todo
  updateNodeTodo(input: TodoInput!): Todo
  deleteNodeTodo(_id: ID!): Boolean
  connectNodeTodoToNodeCommentEdgeCommentEdge(from_id: ID!, to_id: ID!): CommentEdge
  deleteEdgeCommentEdgeFromTodoToComment(from_id: ID!, to_id: ID!): Boolean
  createNodeComment(input: CommentInput!): Comment
  updateNodeComment(input: CommentInput!): Comment
  deleteNodeComment(_id: ID!): Boolean
}

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

これで、データの作成とクエリが可能になりました。以下は、新しい GraphQL API (この例では `TodoExampleAPI` という名前) のテストに使用された AppSync **クエリ**コンソールのスナップショットです。エクスプローラは、中央のウィンドウにクエリとミューテーションのリストを表示し、そこからクエリ、入力パラメータ、リターンフィールドを選択できます。このスクリーンショットには、`createNodeTodo` ミューテーションを使用して Todo ノードタイプを作成しているところが示されています。

![AppSync クエリコンソールで Todo ノードを作成しているスクリーンショット](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/todoCreate.png)


このスクリーンショットは、`getNodeTodos` クエリを使用してすべての Todo ノードにクエリを実行しているところを示しています。

![AppSync クエリコンソールで Todo ノードをクエリしているスクリーンショット](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/todoGetTodos.png)


`createNodeComment` を使用してコメントを作成したら、`connectNodeTodoToNodeCommentEdgeCommentEdge` ミューテーションを使用してその ID を指定することで接続できます。Todo とそれに添付されたコメントを取得するネストされたクエリを以下に示します。

![AppSync クエリコンソールで Todo と添付コメントを取得するためのネストされたクエリを示すスクリーンショット](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/todoNestedQuery.png)


「[ディレクティブの操作](tools-graphql-schema-with-directives.md)」で説明されているように、`TodoExample.source.graphql` ファイルに変更を加えたい場合は、編集したスキーマを入力として使用し、ユーティリティを再度実行できます。その後、ユーティリティはそれに応じて GraphQL API を変更します。