AIによるスケーラブルなバックエンドの構築を学ぶ
スケーラブル」なバックエンドとは、パフォーマンスを大幅に低下させることなく、負荷の増加に対応できるバックエンドのことである。
スケーラブルなバックエンドの構築には、データベースの設計や配備戦略など、いくつかのプロセスや考慮すべき点がある。
この記事では、人工知能(AI)の助けを借りてスケーラブルなバックエンドを構築する方法を学ぶ。
Contents
スケーラブルなバックエンドとは?
ソフトウェア開発ライフサイクルの中で実装される様々な要素が、バックエンドをスケーラブルにするために協働する。
バックエンドのスケーラビリティに寄与する要因のひとつは、データベースのクエリーのスピードだ。
遅いクエリはサーバーの応答時間を増加させ、複数のリクエストを同時に処理する能力に影響を与えます。
適切なスキーマ設計を実装し、効率的なクエリを書くことで、クエリを高速化することができます。
非同期処理もバックエンドをスケーラブルにする要因の一つである。リソース集約的なタスクは実行スレッドをブロックし、サーバーの同時リクエスト処理能力を制限する可能性があります。
大規模な計算やファイルのアップロードなど、リソースを大量に消費するタスクをバックグラウンド・ジョブに委ねることで、この問題を解決できる。
もう一つの要因は、デプロイ戦略だ。Back4appのようなサービスを通じて、スケーラブルなデプロイ戦略を用いてバックエンドをデプロイする必要があります。
例えば、トラフィックが急増すると新しいコンテナが自動的にスピンアップし、手動で操作することなく複数のインスタンスに負荷を分散する。
同様に、需要が減るとシステムはスケールダウンし、未使用のリソースを解放する。
このチュートリアルでは、スケーラブルにするために上記の要素をすべて実装した犬舎管理アプリケーションを構築します。
AIによるスケーラブルなバックエンドの設計
前述の通り、あなたは犬舎管理アプリケーションを構築します。以下はアプリケーションの要件です:
- あなたのアプリケーションは、所有者があなたの犬小屋に彼らの犬をチェックすることができます。
- 飼い主があなたの犬小屋に犬をチェックインすると、あなたのアプリケーションは犬の名前、犬種、年齢、飼い主の名前、画像などの犬の詳細を保存します。そして、飼い主のためのユニークなコードを生成します。
- 飼い主が受け取るユニークなコードは、訪問終了時に犬舎から愛犬を引き取る唯一の方法です。
- 犬舎を訪問している間、犬が関与したすべての活動を記録します。このチュートリアルには、食事、投薬、グルーミングのみが含まれます。
- 利用終了後、飼い主はチェックイン時に受け取った固有のコードを伝え、愛犬を引き取る。
上記の要件を実現するための最初のステップは、データの冗長性がほとんどない正規化データベースを設計することである。
AIバックエンドジェネレータとして機能するBack4app AI Agentの助けを借りて、このデータベーススキーマを設計・作成します。
Back4app AIエージェント
Back4app AI Agentは、Back4app製品、Backend Platform、Web Deployment Platformと連携するLLMです。
これは、プロンプトを使用してこれらの製品と対話することを可能にし、AIを使用してスケーラブルなバックエンドを作成するのに役立ちます。
AIエージェントにアクセスするには、Back4appアカウントが必要です。お持ちでない方は無料で登録できます。
Back4appアカウントにログインし、ダッシュボードのナビゲーションバーにある “AI Agent “リンクをクリックしてください。
リンクをクリックすると、下の画像のようにAIエージェントのページに移動します。
このページでは、Back4appアカウントで新しいBaaSアプリを作成するなど、様々なプロンプトを入力することができます。
AIによるバックエンドの構築
Back4appで新しいバックエンドアプリケーションを作成するには、AIエージェントに以下のようなプロンプトを入力します。
- Create a new backend application called "Kennel Management Backend"
アプリケーションが正常に作成されたという応答が返ってくるはずです。
作成されたアプリはBack4appのダッシュボードで確認することができます。
上の画像に示すように、新しいバックエンド・アプリのデータベースは、デフォルトの_User
クラスと_Role
クラスを除いて空です。
次に、データベーススキーマを設計し、バックエンドアプリに追加します。
データベースの設計
上記のアプリケーション要件に対応する正規化データベーススキーマを設計するには、AIエージェントに以下のプロンプトまたは同様のプロンプトを入力します。
- Design a normalized database schema for a dog kennel management application.
- The app stores dog details: name, breed, age, a unique owner username, owner contact details, and an image;
- When an owner checks in and generates a unique code for the owner to retrieve the dog.
- It tracks activities during the visit (eating, medication, grooming).
The owner provides the unique code to retrieve their dog at the end of the visit.
- Ensure relationships between entities like dogs, owners, visits, activities, and the retrieval code are properly structured.
上のプロンプトは、下の図のようなデータベーススキーマを返すはずである。
上記のデータベーススキーマには4つのテーブルがある:オーナー、犬、訪問、アクティビティ。オーナーは複数の犬を持つことができます(一対多)が、各犬はdogs
テーブルの外部キーを介してリンクされ、唯一の所有者に属しています。
同様に、1匹の犬は複数の訪問(1対多)を持つことができ、それぞれがその犬に固有であり、外部キーを介してvisits
テーブルで追跡される。
さらに、各訪問は、給餌、グルーミング、投薬のような複数のアクティビティ(1対多)を含むことができ、各アクティビティはアクティビティテーブルの
visit_id
外部キーによって特定の訪問に関連付けられます。
データベースの設計ができたので、以下のようなプロンプトを使って、バックエンドにデータベースを作成するようAIに促します。
- Create the designed database in the backend app "Kennel Management Backend".
データベースが正常に作成されたという応答が返ってくるはずです。以下の画像のように、アプリのダッシュボードで新しく作成されたテーブルを確認することで確認できます。
バックエンドを作成し、アプリケーションのデータベーステーブルを追加したので、アプリケーションロジックを実装します。
AIによるバックエンドロジックの実装
アプリケーションの要件から、あなたのアプリケーションは、所有者が犬小屋に自分の犬をチェックし、犬の名前、品種、年齢、所有者の名前、および画像のような詳細を格納し、所有者のためのユニークな検索コードを生成できるようにする必要があります。
これらの要件を実装するには、ユニークな検索コードを生成するユーティリティ関数と、アップロードタスクがアプリケーションの応答時間を遅くしないようにバックグラウンドで犬の画像をアップロードする関数が必要です。
ユーティリティ関数の実装
以下のようなプロンプトをAIエージェントに与えることで、ユニークなコードを生成するユーティリティ関数を作成することができます:
- Create a utility cloud code function in the "Kennel Management Backend" app that generates a unique retrieval code for the dogs checked into the kennel.
-Store the code in a `utils.js` file and make the file accessible to the entire application.
下の画像のような、クラウド・コード・ファンクションが作成されたという応答が返ってくるはずだ。
次に、犬の画像をアップロードし、対応する犬のレコードに関連付ける関数を生成します:
- Create an asynchronous utility Cloud Code function named `uploadDogImage` that accepts three parameters: `dogName`, `dogImage`, and `dogId`.
- The function should upload the `dogImage`, using `dogName` as the image name, and ensure that the image is properly associated with the corresponding dog record identified by `dogId`.
- Implement error handling to manage any issues during the upload process and confirm the association with the dog record.
- Add the `utils.js` file and make it accessible to the entire application.
上記のプロンプトは、犬の画像が正しくアップロードされ、正しい犬の記録に関連付けられ、起こりうるエラーを処理することを保証します。
関数が正常に作成されたという応答が返ってくるはずです。
コードのモジュール性を維持するために、2つのユーティリティ関数をutils.js
ファイルに実装しました。これで、アプリケーションにチェックイン機能を実装するために必要な2つのユーティリティ関数が揃いました。
チェックイン機能の実装
あなたのアプリケーションにチェックイン機能を実装するには、犬の名前、年齢、犬種、画像、飼い主のユーザー名が必要です。
その後、飼い主のための検索コードを生成し、訪問を記録し、犬の画像をアップロードし(バックグラウンドで)、飼い主にコードを返す必要があります。
上記のロジックをバックエンドアプリケーションに追加するには、以下のプロンプトをAIエージェントに入力します:
- Create an asynchronous Cloud Code function named `checkIn` in a `main.js` file that accepts five parameters from a request body: `dogName` (String), `dogAge` (Number), `dogBreed` (String), `ownerUsername`(String), and `dogImage` (File).
- The function should first validate and sanitize each input to ensure they conform to expected types and formats.
- It should then search for an owner in the `owner` table using `ownerUsername` and create a new owner record if none exists. Next, the function should create a new record in the `dogs` table with the provided `dogName`, `dogBreed`, `dogAge`, and the corresponding `ownerId`.
- After that, it should call the `generateRetrievalCode` utility function to create a unique retrieval code.
- The function must also use the `uploadImage` utility to upload `dogImage`, running this process in the background without awaiting the return value.
- Finally, it should create a record in the `visits` table that includes relevant details such as the `ownerId`, `dogId`, and the generated retrieval code, and return a success message along with the retrieval code to the user.
- Ensure error handling is implemented for database operations and input validation, returning appropriate error messages where necessary.
関数が正常に作成されたことを示すレスポンスが返ってくるはずです。
AIエージェントが作成したコードを確認し、必要であれば以下の画像のようにApp Dashboard→Cloud Codeで修正することができます。
これで、犬舎に新しい犬をチェックインすることができます。次に、活動記録機能を実装します。
アクティビティ記録機能の実装
申請要件に基づき、申請書は犬が訪問中に関与したすべての活動を記録しておく必要があります。
アクティビティ記録機能を実装するには、訪問記録を取得し、必要な情報を含む新しいアクティビティを作成する必要があります。
上記のロジックをバックエンドアプリケーションに追加するには、以下のプロンプトをAIエージェントに入力します:
- Create an asynchronous function called `recordActivity` that accepts three parameters from a request body: `visitId`, `type`, and `description`.
- It should first check if a visit with the specified `visitId` exists in the database.
- If the visit is not found, return an appropriate error message.
- If the visit exists, the function should create a new activity record with the visitId, type, and description, set the time to the current date,
and return a success message, after a successful creation.
- Ensure error handling is implemented for database operations and input validation, returning appropriate error messages where necessary.
ダッシュボードをチェックして、この機能が正しく実装されていることを確認し、必要であれば変更してください。
チェックアウト機能の実装
チェックアウト機能を実装するには、retrieval_codeを
使用して訪問記録を取得し、関連する犬と飼い主の詳細を含み、check_out_timeを
更新し、犬と飼い主の情報、訪問のチェックインとチェックアウトの時間を含む応答を返す必要があります。
上記のロジックをバックエンドアプリケーションに追加するには、以下のプロンプトをAIエージェントに入力します:
- Create an asynchronous cloud code function called `checkOut` that retrieves dog and visit details based on a `retrieval_code` extracted from the request body.
- The function should fetch the corresponding visit record in the `Visit` table and include related dog details from the `Dog` table and the `Owner` table.
- The function should select specific dog attributes such as `name`, `breed`, `age` and image.
- If no visit is found, return a message indicating that the `retrieval_code` is invalid.
- Upon successfully finding the visit, the function should update the `check_out_time` to the current date and save the updated visit record.
- Finally, structure a response that includes the dog's information
along with its owner details, as well as the visit's `check_in_time` and `check_out_time`.
- Implement error handling to catch and log any issues during the process,
returning a relevant error message in case of failure.
AIエージェントが作成したコードは、App Dashboard→Cloud Code→main.jsで
確認できます。
チェックアウト機能を完全に実装することで、シンプルな犬舎管理アプリケーションのアプリケーション要件が完了しました。
結論
この記事では、チェックインをサポートし、面会中の犬の行動を追跡し、面会終了時に飼い主がAIを使って犬を引き取ることができる、スケーラブルな犬舎管理アプリケーションを構築する。
アプリケーションのスケール能力を向上させるために、クエリが遅くならないように正規化データベースを設計しました。
また、犬の画像アップロードのような長時間かかるタスクは、バックグラウンドで実行される関数に委譲し、コードをファイルに分割してメンテナンスしやすくした。
バックエンドが完成したら、React、Svelte、Vueのようなフロントエンドライブラリで構築したUIに接続し、Back4app Web Deployment PlatformのようなプラットフォームでDockerを使ってデプロイすることができる。