Quickstarters
Feature Overview
How to build a backend for SwiftUI?
39 分
はじめに このチュートリアルでは、back4appを使用して、 swiftui のiosアプリの完全なバックエンドを構築する方法を学びます。 parse swift sdkをswiftuiプロジェクトに統合し、データベース管理、cloud code関数、restおよびgraphql api、ユーザー認証、リアルタイムクエリなどの重要なback4app機能を活用して、安全でスケーラブルなバックエンドを作成する方法をお見せします。 このアプローチにより、データを安全に保存し、 サーバーサイド の操作を自分のインフラを設定することなく実行し、必要に応じて iosアプリ や ウェブアプリ を簡単にスケールさせることができます。 back4appの迅速なセットアップと直感的な環境が、独自のサーバーとデータベースを手動で構成するのに比べて、時間と労力を大幅に削減できることもご覧いただけます。 最後には、 swiftuiのバックエンドを構築する方法 を理解し、プロダクション環境に拡張したり、カスタムロジックやapiと統合したりできるようになります。 最小限のオーバーヘッドで、堅牢で スケーラブルなバックエンド を作成することを始めましょう! 前提条件 back4appアカウントと新しいback4appプロジェクト back4appの始め方。 https //www back4app com/docs/get started/new parse app アカウントをお持ちでない場合は、無料で作成できます。上記のガイドに従ってプロジェクトを準備してください。 基本的なswiftui開発環境 マシンに xcode をインストールし、基本的なswiftuiまたはiosアプリプロジェクトを設定する必要があります。 swift package managerまたはcocoapods parse swift sdkを追加するために。 parse swift sdkドキュメント。 https //github com/netreconlab/parse swift swiftとswiftuiに関する知識 swiftuiが初めての場合は、始める前に appleのswiftuiドキュメント。 https //developer apple com/documentation/swiftui を確認してください。 始める前に、これらがすべて整っていることを確認してください。back4appプロジェクトを設定し、ローカルのswiftui環境を準備することで、より簡単に進めることができます。 ステップ1 – back4appプロジェクトの設定 新しいプロジェクトを作成する back4appでswiftuiバックエンドを構築する最初のステップは、新しいプロジェクトを作成することです。まだ作成していない場合は、次の手順に従ってください back4appアカウントにログインする 。 back4appダッシュボードの「新しいアプリ」ボタンをクリックする 。 アプリに名前を付ける (例:「swiftui backend tutorial」)。 プロジェクトが作成されると、back4appダッシュボードにリスト表示されます。このプロジェクトは、このチュートリアルで説明するすべてのバックエンド設定の基盤となります。 parse swift sdkを接続する back4appは、データを管理し、リアルタイム機能を提供し、ユーザー認証を処理するためにparseプラットフォームに依存しています。swiftuiアプリケーションをback4appに接続するには、parse swift sdkをインストールし、back4appダッシュボードの資格情報で初期化する必要があります。 parseキーを取得する back4appダッシュボードで、アプリの「アプリ設定」または「セキュリティとキー」セクションに移動して、 アプリケーションid と クライアントキー (またはjavascriptキー)を見つけてください。 parseサーバーurl (通常は次の形式です) https //parseapi back4app com )。 parse swift sdkをインストールする 「 swift package manager 」を使用している場合は、プロジェクトを xcode で開いて、次に ファイル → パッケージを追加 → urlを入力します https //github com/netreconlab/parse swift git 「 次のメジャーまで 」をバージョンルールから選択し、確認します。 「 cocoapods 」を使用している場合は pod 'parseswiftog' アプリでparseを初期化する 。例えば、あなたの アプリ 構造体の中で @main struct myapp app { init() { do { try await parseswift initialize( applicationid "your app id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } var body some scene { windowgroup { contentview() } } } このステップを完了することで、swiftuiフロントエンドとback4appバックエンドの間に安全な接続が確立されました。すべてのリクエストとデータトランザクションはparse swift sdkによって処理され、手動のrestまたはgraphql呼び出しの複雑さが軽減されます(必要に応じてそれらを使用することもできます)。 ステップ2 – データベースの設定 データの保存とクエリ back4appプロジェクトが設定され、parse swift sdkが統合されたので、データの保存と取得を開始できます。以下はシンプルな parseobject の例です。仮に todo 構造体があるとします import parseswift struct todo parseobject { // parseobject conformance var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } 新しいtodoの保存 func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { let savedtodo = try await todo save() print("todo saved successfully \\(savedtodo)") } catch { print("error saving todo \\(error)") } } すべてのtodoをクエリ func fetchtodos() async { do { let todos = try await todo query() find() print("fetched todos \\(todos)") } catch { print("error fetching todos \\(error)") } } また、 back4appのrest api エンドポイントや graphql curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } 複数のオプション(parse swift sdk、rest、graphql)を持つことで、ワークフローに最適なアプローチを選択できます。 スキーマ設計とデータ型 デフォルトでは、parseは スキーマを動的に作成する , ことを許可していますが、より多くの制御のためにback4appダッシュボードでクラスを定義することもできます。 「データベース」セクションに移動する back4appダッシュボードで。 新しいクラスを作成する (例:「todo」)を作成し、次のような関連する列を追加します。 title (string)と iscompleted (boolean)。 back4appはさまざまなデータ型をサポートしています string , number , boolean , object , date , file , pointer , array , relation , geopoint , そして polygon 各フィールドに適切な型を選択できます。 back4appは、データモデルの設計を手助けする aiエージェント も提供しています アプリダッシュボードから aiエージェント を開きます。 データモデルを 簡単な言葉 で説明します(例 “新しいtodoクラスのスキーマを作成してください。”)。 aiエージェントにスキーマを生成させます 。 リレーショナルデータ リレーショナルデータがある場合—例えば、 category オブジェクトが複数の todo アイテムを指している場合—parseで pointers または relations を使用できます。例えば struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var name string? } struct todo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var title string? var category pointer\<category>? } func createtodowithcategory(categoryid string, title string) async { var todo = todo() todo title = title // construct pointer let categorypointer = pointer\<category>(objectid categoryid) todo category = categorypointer do { try await todo save() } catch { print("error creating todo with category relationship \\(error)") } } クエリを実行する際には、 include ポインターデータを含めることもできます let query = todo query() include("category") do { let todoswithcategory = try await query find() print("todos with category \\(todoswithcategory)") } catch { print("error fetching todos \\(error)") } ライブクエリ リアルタイムの更新のために、back4appは ライブクエリ を提供します。あなたのswiftuiアプリでは、特定のクラスの変更にサブスクライブできます ライブクエリを有効にする には、 サーバー設定 の下でback4appダッシュボードを使用します。 コードでサブスクライブする ことができます。 // example snippet using the parse swift subscription system task { let subscription = try todo query() subscribecallback() // react to events for await event in subscription { switch event { case entered(let todo) print("new todo entered \\(todo)") case updated(let todo) print("todo updated \\(todo)") case left(let todo) print("todo deleted or left subscription \\(todo)") default break } } } サーバー上で todo が作成、更新、または削除されるたびに、あなたのアプリはリアルタイムで通知を受け取ります。この機能は、即時データ同期が必要な共同作業や動的なアプリに非常に便利です。 ステップ3 – aclとclpを使用したセキュリティの適用 back4appのセキュリティメカニズム back4appは アクセス制御リスト (acl) と クラスレベルの権限 (clp) を提供し、堅牢なデータセキュリティを実現します。これにより、オブジェクトごとまたはクラスごとにデータの読み取りや書き込みを制限でき、認可されたユーザーのみがデータを変更できるようになります。 アクセス制御リスト (acl) aclは個々のオブジェクトに適用されます。たとえば、特定のユーザーのみがtodoを読み書きできるようにするには func createprivatetodo(title string, user user) async { var todo = todo() todo title = title var acl = parseacl() // grant read/write to the owner only acl setreadaccess(true, for user) acl setwriteaccess(true, for user) todo acl = acl do { let saved = try await todo save() print("private todo saved \\(saved)") } catch { print("error saving private todo \\(error)") } } クラスレベルの権限 (clp) clpは クラス全体のデフォルトを管理します。たとえば、クラスが公開されているかどうか、または特定の役割のみがアクセスできるかどうかなどです。 back4appダッシュボードに移動 し、アプリを選択します。 「 データベース 」セクションを開き、クラスを選択します(例 todo )。 クラスレベルの権限 タブを開きます。 「認証が必要」や「アクセス不可」などのデフォルトを設定します。 これらの権限は広範なベースラインを設定し、aclはオブジェクトレベルでセキュリティを微調整することを可能にします。両方を組み合わせることで、強力なセキュリティモデルが確保されます。詳細については、 アプリセキュリティガイドライン https //www back4app com/docs/security/parse security をご覧ください。 ステップ4 – クラウドファンクションの作成とデプロイ クラウドコード は、サーバーを管理することなく、カスタムサーバーサイドのswift(またはjavascript)コードを実行することを可能にします。これは、クライアントから実行すべきでないビジネスロジック、データ検証、トリガー、またはバックエンド統合を追加するのに最適です。 動作の仕組み クラウドコードを のようなファイルに書きます main js (javascript)またはswiftベースのクラウドコード環境を活用します。 back4appプロジェクトに デプロイします。コードはparse serverの環境で実行されるため、自分のサーバーを維持する必要はありません。 クライアントから swift sdk、rest、またはgraphqlを介してクラウドコードを呼び出します。 典型的な使用例 ビジネスロジック 複雑なデータ検証、フィールド計算、または外部統合。 データトリガー オブジェクトが保存、更新、または削除されたときにロジックを実行します。 セキュリティ クライアントからの敏感な操作を保護するために、サーバーサイドで実行します。 例の関数 以下はサンプルの javascript cloud code(cloud codeは主にback4appでjsを使用するため)で、テキストの長さを計算します main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); cliを介してデプロイ インストール back4app cli https //www back4app com/docs/local development/parse cli を。 アカウントキーを 設定します b4a configure accountkey デプロイ cloud code b4a deploy 関数の呼び出し swiftから struct cloudfunction { static func calculatetextlength(text string) async throws > int { do { if let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) as? \[string any], let length = result\["length"] as? int { return length } } catch { throw error } return 0 } } task { do { let len = try await cloudfunction calculatetextlength(text "hello back4app") print("text length \\(len)") } catch { print("error calling cloud function \\(error)") } } rest経由 curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength ステップ5 – ユーザー認証の設定 back4appにおけるユーザー認証 back4appは、 parseuser クラスを使用して安全な認証を処理します。パスワードのハッシュ化、セッショントークン、およびデータは自動的に処理され、アプリのロジックに集中できます。 ユーザー認証の設定 新しいユーザーをサインアップ struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } 既存のユーザーにログイン func loginuser(username string, password string) async { do { let user = try await user login(username username, password password) print("user logged in \\(user)") } catch { print("error logging in user \\(error)") } } セッショントークン はparseによって自動的に処理されます。ログアウトするには func logout() async { do { try await user logout() print("user logged out ") } catch { print("error logging out \\(error)") } } ソーシャルログイン統合 次のような統合が可能です google , apple , facebook , など、追加の設定が必要です。詳細については、 ソーシャルログインドキュメント https //www back4app com/docs/platform/sign in with apple を確認してください。 メール確認とパスワードリセット back4appダッシュボードでメール確認を有効にし、ユーザーが安全にアカウントを回復できるようにパスワードリセットメールを設定します。パスワードリセットのためには try await user passwordreset(email "user\@example com") ステップ 6 – ファイルストレージの取り扱い ファイルのアップロードと取得 parseにはファイルアップロードを扱うための parsefile が含まれています func uploadimage(filedata data) async { let parsefile = parsefile(name "photo jpg", data filedata) do { let savedfile = try await parsefile save() print("file saved at \\(savedfile url ?? "no url")") } catch { print("error uploading file \\(error)") } } それを parseobject に添付します。 struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(filedata data) async { var photo = photo() photo imagefile = parsefile(name "image jpg", data filedata) do { = try await photo save() } catch { print("error saving photo object \\(error)") } } ファイルのセキュリティ デフォルトでは、ファイルは公開urlを介してアクセス可能です。ファイルセキュリティは parse serverの設定 https //www back4app com/docs/platform/file storage を使用して構成できます。より厳格なファイル管理を行うには、認証されたユーザーまたは指定された役割のみがファイルをアップロードまたは取得できるようにしてください。 ステップ 7 – クラウドジョブによるタスクのスケジューリング クラウドジョブ を使用すると、データのクリーンアップやメールの送信などの定期的なタスクをスケジュールして実行できます。 // main js (javascript cloud code) parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); デプロイ後、 スケジュール を設定するには、back4app ダッシュボードの サーバー設定 > バックグラウンドジョブ を参照してください。 ステップ 8 – ウェブフックの統合 ウェブフック を使用すると、特定のイベントが発生したときに、back4app アプリが外部サービス(stripe など)に http リクエストを送信できます。これは、サードパーティツールや他の サーバーサイド 統合にフックするのに役立ちます。 back4app ダッシュボードの ウェブフック に移動します > その他 > ウェブフック 。 エンドポイントを追加 します(例: https //your service com/webhook )。 どのイベント(例:todoクラスの新しいレコード)がウェブフックをトリガーするかを設定 します。 例えば、ユーザーが新しいtodoを作成するたびにslackメッセージを送信することができます。これにより、外部サービスとback4appデータを同期させることができます。 ステップ9 – back4app管理パネルの探索 「 back4app管理アプリ 」は、非技術的なユーザーがデータに対してcrud操作を行うためのウェブベースの管理インターフェースです。これは、parseダッシュボードとは別のユーザーフレンドリーなuiを提供し、プロダクションでのデータ管理を容易にします。 管理アプリの有効化 「 アプリダッシュボード > その他 > 管理アプリ 」に移動し、「管理アプリを有効にする」をクリックします。 管理ユーザーを作成 , これにより自動的に管理ロールと関連クラスが生成されます。管理インターフェースのサブドメインを選択し、シンプルなポイントアンドクリックuiを介してデータを管理するためにログインします。 結論 この包括的なガイドに従うことで、あなたは以下のことを学びました swiftuiのバックエンドを構築する方法 をback4appとparse swift sdkを使用して。 データを保存する方法 カスタムクラススキーマとリレーションシップを使用して安全に。 リアルタイムクエリを統合する方法 (ライブクエリ)で即時データ更新を行う。 セキュリティ対策を適用する方法 aclとclpを使用してデータアクセスを保護し管理する。 ビジネスロジックを実行する方法 クラウドコードを介して。 ファイルストレージを扱う方法 , 認証、クラウドジョブを使用したバックグラウンドタスクのスケジューリング。 外部サービスと統合する方法 ウェブフックを使用してアプリを。 これらのスキルを持っていれば、管理が容易で、安全で、スケールアップの準備が整った iosアプリ または ウェブアプリ を構築できます。役割ベースの権限、プッシュ通知、または高度なキャッシングなど、より高度な機能を探求してください。他のapiを統合したり、特定のユースケースに合わせてクラウドコードを調整することもできます。 コーディングを楽しんで , そしてback4appで素晴らしいアプリを作ることを楽しんでください! 次のステップ プロダクション対応のswiftuiアプリ このバックエンドを拡張して、より複雑なデータモデル、キャッシング、パフォーマンスの向上を扱います。 高度な機能 専門的な認証、役割ベースのアクセス、またはサードパーティapi統合(stripeなど)に深く掘り下げます。 back4appの公式ドキュメントを探る サーバーサイド のセキュリティ、ログ分析、そして高度なデータベース調整についての詳細を学びます。 追加のチュートリアルをチェック リアルタイムチャット、位置情報サービス、またはマルチテナントアプリケーション—ここで学んだ方法を外部apiと組み合わせて、洗練された実世界のソリューションを作成します。