Quickstarters
Feature Overview
How to Build a Backend for Kotlin?
35 分
はじめに このチュートリアルでは、back4appを使用してkotlinで書かれたandroidアプリケーションの完全なバックエンドを構築する方法を学びます。 データベース管理、cloud code functions、restおよびgraphql api、ユーザー認証、リアルタイムクエリ(ライブクエリ)など、back4appの重要な機能を統合する方法を説明し、androidアプリとシームレスに通信する安全でスケーラブル、かつ堅牢なバックエンドを作成します。 また、back4appの迅速なセットアップと直感的な環境が、サーバーやデータベースを手動で構成するのに比べて、時間と労力を大幅に削減できることを確認します。 その過程で、cloud jobsを使用したタスクのスケジューリングや、外部統合のためのwebhookの設定など、主要な機能に関する実践的な経験を得ることができます。 このチュートリアルの終わりまでには、この基盤となるセットアップを本番環境に適したアプリケーションに拡張する準備が整い、必要に応じてカスタムロジックやサードパーティapiを簡単に組み込むことができるようになります。 前提条件 このチュートリアルを完了するには、次のものが必要です back4appアカウントと新しいback4appプロジェクト back4appの始め方 https //www back4app com/docs/get started/new parse app アカウントを持っていない場合は、無料で作成できます。上記のガイドに従ってプロジェクトを準備してください。 基本的なandroid/kotlin開発環境 マシンにandroid studioがインストールされていることを確認してください。まだ設定していない場合は、 android studioの公式セットアップドキュメント https //developer android com/studio を参照してください。 アプリのgradle設定でandroid 4 0以上の最小バージョン 通常、これはモジュールの minsdkversion を設定する場所です。 build gradle で設定します。 kotlinと基本的なandroidの概念に関する知識 android開発者ドキュメント https //developer android com/docs androidやkotlinが初めての場合は、公式ドキュメントや初心者向けのチュートリアルを確認してから始めてください。 始める前に、これらの前提条件がすべて整っていることを確認してください。back4appプロジェクトを設定し、ローカルのandroid環境を準備しておくことで、より簡単に進めることができます。 ステップ1 – back4appプロジェクトの設定 新しいプロジェクトを作成する back4appでandroidバックエンドを構築する最初のステップは、新しいプロジェクトを作成することです。まだ作成していない場合は、次の手順に従ってください back4appアカウントにログインする 。 back4appダッシュボードの“新しいアプリ”ボタンをクリックする 。 アプリに名前を付ける (例:“android kotlin backend tutorial”)。 プロジェクトが作成されると、back4appダッシュボードにリスト表示されます。このプロジェクトは、このチュートリアルで説明するすべてのバックエンド設定の基盤となります。 parse sdkを接続する back4appは、データを管理し、リアルタイム機能を提供し、ユーザー認証を処理するためにparseプラットフォームに依存しています。androidアプリをback4appに統合するには、gradleファイルにparse android sdkの依存関係を追加し、back4appダッシュボードからの資格情報で初期化する必要があります。 parseキーを取得する back4appダッシュボードで、アプリの「アプリ設定」または「セキュリティとキー」セクションに移動して、 アプリケーションid と クライアントキー }を見つけます。また、 parseサーバーurl (通常は https //parseapi back4app com )も見つかります。 parse sdkを追加する には、 build gradle ファイルに追加します ルートの build gradle (プロジェクトレベル) allprojects { repositories { maven { url "https //jitpack io" } } } モジュールレベルの build gradle (通常は app/build gradle ) dependencies { implementation "com github parse community parse sdk android\ parse\ latest version here" } androidアプリケーションでparseを初期化する カスタム application クラス(例: app kt ) がまだない場合は作成します package com example app import android app application import com parse parse import com parse parseinstallation class app application() { override fun oncreate() { super oncreate() // initialize parse parse initialize( parse configuration builder(this) applicationid("your app id") // from back4app dashboard clientkey("your client key") // from back4app dashboard server("https //parseapi back4app com/") build() ) // (optional) track statistics around app opens parseinstallation getcurrentinstallation() saveinbackground() } } 次に、あなたの androidmanifest xml を開き、カスタム application クラスを登録します \<?xml version="1 0" encoding="utf 8"?> \<manifest xmlns\ android="http //schemas android com/apk/res/android" package="com example app"> \<application android\ name=" app" android\ icon="@mipmap/ic launcher" android\ label="@string/app name" android\ usescleartexttraffic="true" > \</application> \</manifest> このステップを完了することで、android(kotlin)フロントエンドとback4appバックエンドの間に安全な接続が確立されました。すべてのリクエストとデータトランザクションはこのsdkを通じて安全にルーティングされ、手動のrestまたはgraphql呼び出しの複雑さが軽減されます(必要に応じてそれらを使用することもできます)。 ステップ2 – データベースの設定 データの保存とクエリ back4appプロジェクトが設定され、parse sdkがandroidアプリに統合されたので、データの保存と取得を開始できます。以下は、kotlinを使用してデータを作成および取得する例です。 import com parse parseobject import com parse parsequery import com parse savecallback import com parse parseexception // example create a todo item fun createtodoitem(title string, iscompleted boolean) { val todo = parseobject("todo") todo put("title", title) todo put("iscompleted", iscompleted) todo saveinbackground { e parseexception? > if (e == null) { println("todo saved successfully") } else { println("error saving todo ${e localizedmessage}") } } } // example query all todo items fun fetchtodos() { val query = parsequery\<parseobject>("todo") query findinbackground { results, e > if (e == null) { println("fetched todo items ${results size}") } else { println("error fetching todos ${e localizedmessage}") } } } また、back4appのrest apiエンドポイントを使用することもできます 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 back4appはgraphqlインターフェースも提供しています mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } これらの多様なオプションにより、parse sdk、rest、またはgraphqlを通じて、開発プロセスに最適な方法でデータ操作を統合できます。 スキーマ設計とデータ型 デフォルトでは、parseは スキーマを動的に作成することを許可します , ただし、より多くの制御のためにback4appダッシュボードでクラスとデータ型を定義することもできます。 back4appダッシュボードの「データベース」セクションに移動します 。 新しいクラスを作成します (例:「todo」)およびタイトル(string)やiscompleted(boolean)などの関連するカラムを追加します。 back4appは、データモデルの設計を手助けするaiエージェントを提供しています。 aiエージェントを開きます アプリダッシュボードまたはメニューから。 データモデルを説明します 簡単な言葉で(例:「back4appで完全なクラススキーマを持つ新しいtodoアプリを作成してください。」)。 aiエージェントにスキーマを作成させます 。 aiエージェントを使用することで、データアーキテクチャの設定にかかる時間を節約し、アプリケーション全体での一貫性を確保できます。 リレーショナルデータ リレーショナルデータがある場合—例えば、複数の category オブジェクトが todo アイテムを指している場合—parseで pointers または relations を使用できます。例えば、 category へのポインタを追加することができます // linking a todo to a category with a pointer fun createtaskforcategory(categoryobjectid string, title string) { val todo = parseobject("todo") val categorypointer = parseobject("category") categorypointer objectid = categoryobjectid todo put("title", title) todo put("category", categorypointer) todo saveinbackground { e > if (e == null) { println("created task with category relationship") } else { println("error creating task ${e localizedmessage}") } } } クエリを実行する際には、ポインタデータも含めることができます val query = parsequery getquery\<parseobject>("todo") query include("category") query findinbackground { todos, e > if (e == null) { println("fetched ${todos size} todos with category data") } } この include("category") 呼び出しは、各todoと一緒にカテゴリの詳細を取得し、リレーショナルデータをシームレスにアクセス可能にします。 ライブクエリ リアルタイムの更新のために、back4appは live queries を提供します。androidアプリから特定のクラスの変更にサブスクライブできます ライブクエリを有効にする には、back4appダッシュボードのアプリの server settings で設定します。 コード内でライブクエリサブスクリプションを初期化する には import com parse parselivequeryclient import com parse parsequery import com parse subscriptionhandling val parselivequeryclient = parselivequeryclient factory getclient() val parsequery = parsequery\<parseobject>("todo") val subscriptionhandling subscriptionhandling\<parseobject> = parselivequeryclient subscribe(parsequery) subscriptionhandling handleevent(subscriptionhandling event create) { querytodo, todo > println("new todo created ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event update) { querytodo, todo > println("todo updated ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event delete) { querytodo, todo > println("todo deleted ${todo getstring("title")}") } 新しいtodoが作成、更新、または削除されるたびに、クライアントはリアルタイムでコールバックを受け取ります—共同作業や動的なアプリに最適です。 ステップ3 – aclとclpを使用したセキュリティの適用 back4appのセキュリティメカニズム back4appは、 アクセス制御リスト(acl) と クラスレベルの権限(clp) を提供することで、セキュリティを真剣に考えています。これらの機能により、オブジェクトまたはクラスごとにデータの読み取りや書き込みを制限でき、認可されたユーザーのみがデータを変更できるようになります。 アクセス制御リスト(acl) aclは、個々のオブジェクトに適用され、どのユーザー、役割、または一般の人々が読み取り/書き込み操作を行えるかを決定します。例えば fun createprivatetodo(title string, owneruser parseobject) { val todo = parseobject("todo") todo put("title", title) // create an acl granting read/write access only to the owner val acl = com parse parseacl(owneruser) acl publicreadaccess = false acl publicwriteaccess = false todo acl = acl todo saveinbackground { e > if (e == null) { println("saved private todo") } else { println("error ${e localizedmessage}") } } } クラスレベルの権限 (clps) clpは、クラス全体のデフォルトの権限を管理します。たとえば、クラスが公開されているかどうか、読み取りまたは書き込みが可能かどうかです。 back4appダッシュボードに移動 , アプリを選択し、 データベース セクションを開きます。 クラスを選択 (例: “todo”)。 クラスレベルの権限 タブを開きます。 デフォルトを設定します。たとえば、読み取りまたは書き込みのための “認証が必要” や、一般公開のための “アクセス不可” などです。 ステップ4 – クラウドコード関数の作成 クラウドコードを使用すると、parse server上でカスタムkotlin風のjavascriptコードを実行できます( js ファイルとしてアップロードされます)。サーバーインフラを管理する必要がなく、ビジネスロジック、バリデーション、トリガー、外部api呼び出しに最適です。 仕組み 通常、javascript関数、トリガー、および必要なnpmモジュールを main js ファイルに配置します。このファイルはback4appプロジェクトにデプロイされ、parse server環境で実行されます。 典型的な使用例 ビジネスロジック データ検証 トリガー (例えば beforesave , aftersave ) セキュリティの強化 統合 サードパーティapiとの 関数をデプロイする 以下はシンプルなcloud code関数です main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); デプロイは、 unhandled content type https //www back4app com/docs/local development/parse cli \# for linux/mac curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# for windows, download the exe from the releases page 次に、設定してデプロイします b4a configure accountkey b4a deploy 関数の呼び出し android(kotlin)コードからparse sdkを介して import com parse parsecloud import com parse functioncallback import com parse parseexception fun calltextlengthfunction(sometext string) { val params = hashmapof("text" to sometext) parsecloud callfunctioninbackground\<map\<string, any>>("calculatetextlength", params) { result, e > if (e == null) { val length = result\["length"] as int println("text length $length") } else { println("error calling cloud code ${e localizedmessage}") } } } restまたはgraphqlを介しても同様に呼び出すことができます。 ステップ5 – 認証の設定 back4appにおけるユーザー認証 back4appは、 parse user クラスを使用して認証を行います。parseは、安全なパスワードハッシュ、セッショントークンなどを標準で処理します。 ユーザー認証の設定 kotlinでは、新しいユーザーを作成できます import com parse parseuser fun signupuser(username string, password string, email string) { val user = parseuser() user username = username user setpassword(password) user email = email user signupinbackground { e > if (e == null) { println("user signed up successfully!") } else { println("error signing up user ${e localizedmessage}") } } } 既存のユーザーでログインします fun loginuser(username string, password string) { parseuser logininbackground(username, password) { user, e > if (user != null && e == null) { println("user logged in ${user username}") } else { println("error logging in ${e? localizedmessage}") } } } google、facebook、appleなどのソーシャルログインも統合できます。詳細については、 ソーシャルログインのドキュメント https //www back4app com/docs/platform/sign in with apple を確認してください。 セッション管理 parseは自動的にセッショントークンを管理します。現在のユーザーにアクセスできます val currentuser = parseuser getcurrentuser() if (currentuser != null) { println("currently logged in user ${currentuser username}") } else { println("no user is logged in") } そしてログアウト parseuser logout() ステップ6 – ファイルストレージの取り扱い ファイルのアップロードと取得 parseにはファイルアップロードを扱うための parsefile クラスが含まれています import com parse parsefile import com parse parseexception fun uploadimage(file java io file) { val bytes = file readbytes() val parsefile = parsefile(file name, bytes) parsefile saveinbackground { e parseexception? > if (e == null) { println("file saved ${parsefile url}") } else { println("error uploading file ${e localizedmessage}") } } } import com parse parsefile import com parse parseexception fun uploadimage(file java io file) { val bytes = file readbytes() val parsefile = parsefile(file name, bytes) parsefile saveinbackground { e parseexception? > if (e == null) { println("file saved ${parsefile url}") } else { println("error uploading file ${e localizedmessage}") } } } ファイルセキュリティ aclやclpを調整するか、parse serverの設定でファイル固有の設定を使用することで、誰がファイルをアップロードまたはダウンロードできるかを制御できます。 ステップ7 – メール確認とパスワードリセット メール確認を有効にする あなたのback4appダッシュボードの設定で。 送信元アドレス、メールテンプレート、または必要に応じてカスタムドメインを 設定します。 使用する parseuser requestpasswordresetinbackground(email, callback) を使用して、アプリ内でパスワードリセットフローをトリガーします。 ステップ8 – クラウドジョブによるタスクのスケジューリング クラウドジョブ を使用すると、データのクリーンアップや定期的な通知の送信など、ルーチンタスクを自動化できます。 parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo') const query = new parse query(todo) // e g , remove todos older than 30 days const cutoff = new date(date now() 30 24 60 60 1000) query lessthan('createdat', cutoff) const oldtodos = await query find({ usemasterkey true }) await parse object destroyall(oldtodos, { usemasterkey true }) return `deleted ${oldtodos length} old todos ` }) ダッシュボードの サーバー設定 > バックグラウンドジョブ でジョブをスケジュールします。 ステップ 9 – webhookの統合 webhook は、特定のイベントが発生するたびに、back4appアプリが外部サービスにhttpリクエストを送信できるようにします。 webhookを追加 するには、back4appダッシュボードの more > webhooks を選択します。 トリガーを設定 します(例:新しいオブジェクトを保存した後)。 urlエンドポイントを追加 します(slackやstripeのwebhookのような)。 ステップ 10 – back4app管理パネルの探索 back4app管理アプリは、非技術的なユーザーがデータを管理するための使いやすいウェブベースのインターフェースです。 それを有効にする には、 app dashboard > more > admin app を選択します。 最初の管理ユーザーを作成 します。 管理パネルにアクセスするためのサブドメインを選択 します。 ログイン して、データベースのレコードを簡単に表示、編集、または削除します。 結論 この包括的なチュートリアルに従うことで、あなたは 安全なバックエンド をback4app上のandroidアプリ用に作成しました。 データベースを構成しました クラススキーマ、データ型、関係を使用して。 リアルタイムクエリを統合しました (ライブクエリ)で即時データ更新を実現しました。 セキュリティ対策を適用しました aclとclpを使用してデータアクセスを保護および管理しました。 cloud codeを実装しました サーバー側でカスタムビジネスロジックを実行するための関数。 ユーザー認証を設定しました メール確認とパスワードリセットをサポートしています。 ファイルのアップロードを管理しました および取得、オプションのファイルセキュリティコントロール付き。 cloud jobsをスケジュールしました 自動化されたバックグラウンドタスクのために。 webhookを使用しました 外部サービスと統合するために。 back4app管理パネルを探求しました データ管理のために。 堅牢なback4appバックエンドと堅固なandroid(kotlin)フロントエンドを持つことで、機能豊富でスケーラブルかつ安全なアプリケーションを開発するための準備が整いました。さらに高度な機能を探求し、ビジネスロジックを統合し、back4appの力を活用してサーバーとデータベースの管理にかかる無数の時間を節約してください。コーディングを楽しんでください! 次のステップ 生産準備が整ったandroidアプリを構築する このバックエンドを拡張して、より複雑なデータモデル、キャッシング戦略、パフォーマンス最適化を処理します。 高度な機能を統合する 特化した認証フロー、役割ベースのアクセス制御、または外部api(支払いゲートウェイなど)を含みます。 back4appの公式ドキュメントを確認する 高度なセキュリティ、パフォーマンス調整、ログ分析についての詳細な情報を得るために。 他のチュートリアルを探る リアルタイムチャットアプリケーション、iotダッシュボード、または位置情報サービスに関するもの。ここで学んだ技術をサードパーティのapiと組み合わせて、複雑な実世界のアプリケーションを作成できます。