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

Page updated Mar 26, 2026

Amplify Data をセットアップする

このガイドでは、Amplify Data をセットアップする方法を学びます。これには、TypeScript を使用してデータモデルを定義してリアルタイム API とデータベースを構築し、認可ルールで API をセキュアにすることが含まれます。また、カスタムユースケースにスケーリングするために AWS Lambda を使用することも紹介します。

開始する前に、以下が必要です:

Amplify Data を使うと、数分でデータベースによるセキュアで リアルタイム API を構築できます。TypeScript を使用してデータモデルを定義した後、Amplify はリアルタイム API をデプロイします。この API は AWS AppSync によって提供され、Amazon DynamoDB データベースに接続されています。認可ルールで API をセキュアにでき、AWS Lambda でカスタムユースケースにスケーリングできます。

データバックエンドを構築する

すでに npm create amplify@latest を実行している場合、amplify/data/resource.ts ファイルが表示されます。これは、データバックエンドを構成するための中心的な場所です。最も重要な要素は schema オブジェクトで、バックエンドのデータモデル (a.model()) とカスタムクエリ (a.query())、ミューテーション (a.mutation())、サブスクリプション (a.subscription()) を定義します。

amplify/data/resource.ts
import { a, defineData, type ClientSchema } from '@aws-amplify/backend';
const schema = a.schema({
Todo: a.model({
content: a.string(),
isDone: a.boolean()
})
.authorization(allow => [allow.publicApiKey()])
});
// Used for code completion / highlighting when making requests from frontend
export type Schema = ClientSchema<typeof schema>;
// defines the data resource to be deployed
export const data = defineData({
schema,
authorizationModes: {
defaultAuthorizationMode: 'apiKey',
apiKeyAuthorizationMode: { expiresInDays: 30 }
}
});

すべての a.model() は、クラウドで以下のリソースを自動的に作成します:

  • レコードを保存するための DynamoDB データベーステーブル
  • レコードを作成、読取 (リスト/取得)、更新、削除するためのクエリおよびミューテーション API
  • 各レコードが最初に作成されたとき、または最後に更新されたときを追跡するのに役立つ createdAt および updatedAt フィールド
  • レコードの作成、更新、削除イベントをサブスクライブするためのリアルタイム API

allow.publicApiKey() ルールは、API キーで認証されたすべての人が、todo を作成、読取、更新、削除できることを指定します。

これらのリソースをクラウドサンドボックスにデプロイするには、ターミナルで次の CLI コマンドを実行します:

Terminal
npx ampx sandbox --outputs-out-dir <path_to_swift_project>

アプリケーションコードをデータバックエンドに接続する

クラウドサンドボックスが起動して実行されている場合、API エンドポイント URL や API キーなどのデータバックエンドへの接続情報を含む amplify_outputs.json ファイルも作成されます。

フロントエンドコードをバックエンドに接続するには、以下を実行する必要があります:

  1. Amplify ライブラリを Amplify クライアント構成ファイル (amplify_outputs.json) で構成する
  2. Amplify ライブラリから新しい API クライアントを生成する
  3. エンドツーエンドの型安全性を備えた API リクエストを実行する

Finder から amplify_outputs.json ファイルを Xcode にドラッグアンドドロップします。

次に、Swift Package Manager を使用して Amplify Library for Swift を追加します。Xcode で File > Add Packages... を選択します。

次に、Amplify Library for Swift GitHub リポジトリ URL (https://github.com/aws-amplify/amplify-swift) を検索バーに入力して Enter を押します。

結果が読み込まれたら、Dependency Rule として Next Major Version を選択して、Add Package をクリックします。

プロジェクトに追加するライブラリを選択します。このチュートリアルでは、AWSAPIPluginAmplify を選択して、Add Package をクリックします。

次に、アプリの init() 関数をカスタマイズして、必要なプラグインを Swift アプリケーションに追加します:

MyAmplifyApp
import SwiftUI
import Amplify
import AWSAPIPlugin
@main
struct MyAmplifyApp: App {
init() {
let awsApiPlugin = AWSAPIPlugin(modelRegistration: AmplifyModels())
do {
try Amplify.add(plugin: awsApiPlugin)
try Amplify.configure(with: .amplifyOutputs)
print("Initialized Amplify");
} catch {
// simplified error handling for the tutorial
print("Could not initialize Amplify: \(error)")
}
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}

最後に、Swift アプリケーション用の GraphQL クライアントコードを生成します。Amplify Data は GraphQL を使用して、クエリ、ミューテーション、サブスクリプションリクエストを実行します。生成された GraphQL クライアントコードは、GraphQL リクエストを手動で作成してマップする必要なく、完全に型付きされた API リクエストを作成するのに役立ちます。

Terminal
npx ampx generate graphql-client-code --format modelgen --model-target swift --out <path_to_swift_project>/AmplifyModels

AmplifyModels フォルダを Xcode プロジェクトにドラッグアンドドロップして、生成されたファイルを追加します。

バックエンドにデータを書き込む

TodoViewModel.swift という新しいファイルを作成して、createTodo 関数を次のコードで作成します:

TodoViewModel.swift
import Foundation
import Amplify
@MainActor
class TodoViewModel: ObservableObject {
func createTodo() {
let todo = Todo(
content: "Build iOS Application",
isDone: false
)
Task {
do {
let result = try await Amplify.API.mutate(request: .create(todo))
switch result {
case .success(let todo):
print("Successfully created todo: \(todo)")
case .failure(let error):
print("Got failed result with \(error.errorDescription)")
}
} catch let error as APIError {
print("Failed to create todo: ", error)
} catch {
print("Unexpected error: \(error)")
}
}
}
}

ContentView.swift を次のコードで更新します:

ContentView.swift
struct ContentView: View {
// Create an observable object instance.
@StateObject var vm = TodoViewModel()
var body: some View {
VStack {
Button(action: {
vm.createTodo()
}) {
HStack {
Text("Add a New Todo")
Image(systemName: "plus")
}
}
.accessibilityLabel("New Todo")
}
}
}

アプリケーションを実行して、"Add a New Todo" ボタンをクリックすると、todo が作成されたことを示すログが表示されるはずです:

Logs
Successfully created todo: Todo(id: XYZ ...)

バックエンドからデータを読み込む

次に、すべての todo をリストし、todo が追加された後に todo を再度取得します:

TodoViewModel.swiftlistTodos 関数を更新して、to-do アイテムをリストします:

TodoViewModel.swift
@MainActor
class TodoViewModel: ObservableObject {
@Published var todos: [Todo] = []
func createTodo() {
/// ...
}
func listTodos() {
Task {
do {
let result = try await Amplify.API.query(request: .list(Todo.self))
switch result {
case .success(let todos):
print("Successfully retrieved list of todos: \(todos)")
self.todos = todos.elements
case .failure(let error):
print("Got failed result with \(error.errorDescription)")
}
} catch let error as APIError {
print("Failed to query list of todos: ", error)
} catch {
print("Unexpected error: \(error)")
}
}
}
}

次に、UI コードを更新して todos を観察します。

ContentView.swift
import SwiftUI
import Amplify
struct ContentView: View {
@StateObject var vm = TodoViewModel()
var body: some View {
VStack {
List(vm.todos, id: \.id) { todo in
Text(todo.content ?? "")
}
// .. Add a new Todo button
}
.task {
await vm.listTodos()
}
}
}

リアルタイム更新をサブスクライブする

リアルタイム更新を追加するには、Amplify Data のサブスクリプション機能を使用できます。これにより、アプリケーションの onCreate, onUpdate, および onDelete イベントをサブスクライブできます。この例では、新しい todo が追加されるたびにリストを追加します。

最初に、サブスクリプションを保存するプライベート変数を追加します。次に、init() イニシャライザーでサブスクリプションを作成し、subscribe() および cancel() 関数を追加します。

TodoViewModel.swift
@MainActor
class TodoViewModel: ObservableObject {
@Published var todos: [Todo] = []
private var subscription: AmplifyAsyncThrowingSequence<GraphQLSubscriptionEvent<Todo>>
init() {
self.subscription = Amplify.API.subscribe(request: .subscription(of: Todo.self, type: .onCreate))
}
func subscribe() {
Task {
do {
for try await subscriptionEvent in subscription {
handleSubscriptionEvent(subscriptionEvent)
}
} catch {
print("Subscription has terminated with \(error)")
}
}
}
private func handleSubscriptionEvent(_ subscriptionEvent: GraphQLSubscriptionEvent<Todo>) {
switch subscriptionEvent {
case .connection(let subscriptionConnectionState):
print("Subscription connect state is \(subscriptionConnectionState)")
case .data(let result):
switch result {
case .success(let createdTodo):
print("Successfully got todo from subscription: \(createdTodo)")
todos.append(createdTodo)
case .failure(let error):
print("Got failed result with \(error.errorDescription)")
}
}
}
func cancel() {
self.subscription.cancel()
}
func createTodo() {
/// ...
}
func listTodos() {
/// ...
}
}

次に ContentView.swift で、ビューが表示されるとき vm.subscribe() を呼び出します。表示されなくなるときに、サブスクリプションをキャンセルします。

ContentView.swift
struct ContentView: View {
@StateObject var vm = TodoViewModel()
var body: some View {
VStack {
// ...
}
.onDisappear {
vm.cancel()
}
.task {
vm.listTodos()
vm.subscribe()
}
}
}

アプリを再実行すると、新しい todo を作成するたびに新しい todo がリストに追加されるはずです。

結論

成功しました! Amplify Data で初めてのリアルタイム API とデータベースを作成する方法を学びました。

次のステップ

Amplify Data で発見することがたくさんあります。詳細については、以下をご覧ください: