コーヒーを飲む前にバックエンドを構築しようとした日のこと
月曜の朝にバックエンドを立ち上げようとして、APIゲートウェイが403 Forbiddenで休暇中で、データベースがコミットメントに問題を抱えていることに気づいたことはありませんか?それはかつての私でした。ほんの小さなエンドポイント、つまり親しみやすい/helloが欲しかっただけなのに、なぜかホグワーツの寮を選ぶようにVPCについて議論することになってしまいました。
朗報です。Lovable Cloudは、「バックエンドの構築」を…まあ…愛らしいものにしようとしています。少なくとも、激怒するようなものではなく。もしあなたが30分、Wi-Fi接続、そしていくつかの比喩に対する寛容さを持っていれば、Lovable Cloudを使ってバックエンドを構築する方法をステップバイステップで、何に注意すべきか、そしてそれをエンドポイントのスパゲッティボウルに変えないようにする方法を説明します。
注意:これは実践的なハンズオンガイドです。ベンダーの詩よりも、「ここをクリックして、これを入力して、あれはしないで」という内容です。そして、そうです、私たちは実際に動作するものを出荷します。認証、データベース、環境シークレット、デプロイメント、モニタリング、そしてスケーリングへの迅速な道を備えた、動作するAPIです。おやつを手に取ってください。出荷します。
Lovable Cloudとは何か、そしてなぜあなたのバックエンドが気にする必要があるのか?
Lovable Cloudを、最新のバックエンドのスイスアーミーナイフと考えてください。サーバーレス機能、APIルーティング、データベース接続、環境シークレット、そしてCI/CD—これらすべては、あなたが埃っぽいYAMLファイルの動物園を維持する手間を省くためのものです。
- コードを書きます(Node/TypeScript、Python—現在ホットなものについてはドキュメントを確認してください)。
- ルートを定義します(REST)。もしあなたが凝りたいなら、GraphQLを重ねたり、JSONにこだわったりすることもできます。
- マネージドデータベースを接続します(PostgreSQLはここでは典型的な高校時代の恋人です)。
- デプロイします。スケーリングされます。午前3時に起きてサーバーを追加することを心配する必要はなくなります。
もしあなたの「バックエンド」のメンタルモデルが、エンドポイント + 認証 + データ + デプロイ + ログであるなら、Lovable Cloudは、ビープ音が少なく、領収書が多い、急行レーンになろうとしています。
Lovable Cloudでバックエンドを構築するためのゲームプラン
- Lovable Cloudプロジェクトとリポジトリを作成します。
- 1つのパブリックルートと1つの保護されたルートを持つAPIをスキャフォールドします。
- PostgreSQLデータベースを追加し、マイグレーションを実行します。
- 認証を追加します(JWT、セッショントークン、またはOAuth—お好みで)。
- モニタリング/ロギングと1つの自動テストを追加します。
- 将来の自分が心を痛めることなく、本番環境にプロモートします。
はい、たくさんあるように聞こえますね。いいえ、一週間もかかりません。
ステップ1:Lovable Cloudプロジェクトを立ち上げる(別名:新しいプロジェクトの匂い)
- アカウントを作成し、新しいプロジェクトを開始します。後で認識できるような名前を付けましょう—「not_final_backend_v7」は罠です。
- ランタイムを選択します(Node/TypeScriptはAPIの一般的な人気者です)。
- 利用可能な場合はテンプレートを選択します。「REST API」または「Serverless Functions」を選ぶと、白紙の状態よりも早くグリーンに到達できます。
Gitリポジトリ(あなた自身のものか、彼らのもの)と開発環境が得られます。すぐにブランチを切る(「feature/hello-api」)と、メインブランチが誤りの生きた博物館になるのを防ぐことができます。ボーナスポイントです。
ステップ2:最初のエンドポイントをスキャフォールドする(Hello Worldは今でも最高だから)
基本的なルート/api/helloを作成します。シンプルで楽しいものにしましょう。
- 関数:
{ message: "Hello, world" }のようなJSONを返します。
- ローカルでテストします:cURLまたはお気に入りのHTTPクライアントを使用します。もし200が返ってこない場合は、手順をやり直し、ログを確認してください。
プロのヒント:ルートハンドラーをスリムに保ちましょう—エンドポイント内にビジネスロジックを入れないでください。ロジックをサービスに入れてください。将来のリファクタリングで感謝されるでしょう。
ステップ3:古代のDevOpsの精霊を召喚せずにデータベースを追加する
PostgreSQLを選びましょう。信頼性が高く、リレーショナルで、結合にアレルギーはありません。
- Lovable Cloudで、マネージドPostgresインスタンスを作成します。
- クレデンシャルを環境変数として保存します:
DATABASE_URL、DB_USER、DB_PASS、DB_HOST、DB_NAME。
- ORMまたはクエリビルダー(Prisma、Drizzle、Knex)を選択します。私は速度とスキーマの健全性のためにPrismaに偏っています。
それが動作することを証明するために、小さなusersテーブルを作成します:
- スキーマ:
id (uuid)、email (unique)、created_at (timestamp)。
- リストを返す
GET /api/usersエンドポイントを作成します。新しいものを挿入するためのPOST /api/usersを追加します。認証(次のステップ)で保護しますが、今のところはテスト挿入で検証します。
タイムアウトまたは接続リセットが発生している場合は、正しいポート、SSLモード、および開発環境がDBと通信できるかどうかを確認してください(VPCルールとIP許可リストはドラマが大好きです)。
ステップ4:ユーザーを泣かせない認証を追加する
オプションがあります:
- 安全なクッキーを使用したセッショントークン(ウェブアプリに最適)
- Google、GitHubなどを使用したOAuth(パスワードの苦行を避けるのに最適)
手っ取り早く成功するには、JWTから始めましょう:
- ログイン時にトークンを生成します(
POST /api/auth/login)。
- 署名シークレットをLovable Cloudのシークレットマネージャーに保存します。
Authorization: Bearer <token>ヘッダーを読み取るミドルウェアを作成します。
POST /api/usersのようなルートや、データを変更するものを保護します。
覚えておいてください:短いトークンの有効期間 + リフレッシュトークン = デバイスが紛失したり、開発者がYouTubeのコメントにトークンを残したことを忘れたりした場合の頭痛が少なくなります(聞かないでください)。
ステップ5:環境変数:秘密であり、お土産ではない
Lovable Cloudの環境マネージャーを使用して秘密を一元化します:
- サードパーティのAPIキー(メールプロバイダー、支払い)
環境ごとに設定します(開発、ステージング、本番)。何もハードコードしないでください。しないでください。「今だけ」でも。それがホラーストーリーの始まりです。
ステップ6:将来のセラピストに説明せずにステージングにデプロイする
デプロイをクリックします。ログを見てください。息をしてください。
- ヘルスチェックを検証します:ルートまたは
/api/healthはokを返しますか?
- スモークテストを実行します:
GET /api/hello、GET /api/users。
- テストトークンを使用して1つの保護されたルートを試してください—それがない場合は401、それがある場合は200を確認します。
コールドスタートが遅い場合は、小さな関数を意味のある単一のサービスにまとめます。サーバーレスは素晴らしいですが、400個の小さな関数は指揮者のいないオーケストラになる可能性があります。
ステップ7:午前2時に推測しないようにモニタリングを追加する
- リクエストのロギングを有効にします(構造化されたログをお願いします)。
- エラーキャプチャを設定します(リクエストID付きのスタックトレース)。
- レイテンシーダッシュボードを追加します。p50だけでなく、p95を見てください。あなたのユーザーは平均を経験しません。
- 5xxスパイクとDB接続チャーンのアラートを作成します。
すべてのレイヤーにリクエストIDが含まれる単一行のログは、「誰かこれを見ていますか?」で始まる10,000件のSlackメッセージに匹敵します。
ステップ8:1つのテストを書きます。次に2つ。そして自動化します。
小さく始めましょう:
- ユニットテスト:メールを検証したり、合計を計算したりするサービス関数。
- 統合テスト:テストDBを使用して
/api/usersを呼び出します。
CIを接続して、プルリクエストでテストを実行します。赤いテストがある場合はPRをマージしないでください。今日、数千のテストは必要ありません—重要なパスだけです。シートベルトのように。
ステップ9:本番環境にプロモートする(慎重に)
- 1時間メインをフリーズします。最初にステージングに修正を適用します。
- ビルドをプロモートします。デプロイ後のスモークテストを実行します。
- パブリックエンドポイントでレート制限を有効にします。
- キャッシュする場合は、健全なTTLを設定します。キャッシュしない場合は、DBが疲れた目であなたを見る準備をしてください。
ロールバック計画を追加します:それを持っていることでジンクスをかけているわけではありません。あなたは大人になっているのです。
午後に発送できるシンプルでリアルなバックエンド
小さくてもリアルな機能セットを接続しましょう:
- パブリック
GET /api/hello(ヘルスと健全性)。
- 保護された
POST /api/users(ユーザーの作成)とGET /api/me(認証されたユーザーを返します)。
- 直接ルックアップ用の
GET /api/users/:id。
- ソフトデリート:
DELETE /api/users/:idはdeleted_atを切り替えます。
ボットがあなたのバックエンドをカーディオとして使用しないように、/api/auth/loginにレート制限を追加します。
次に、メールプロバイダー経由でウェルカムメールを散りばめます。メッセージをトランザクション的でフレンドリーに保ちましょう—マーケティングは実際のマーケティングルートのために取っておきます。
Lovable Cloudでバックエンドを構築する際の一般的な罠
- サーバーレスでの共有状態:呼び出し間でインメモリキャッシュに依存しないでください。Redis(マネージド)またはDBを使用してください。
- CORS構成の欠落:許可されたオリジンを設定します。アプリのドメインに制限します。本番環境でフルワイルドカードにしないでください。
- 長いコールドスタート:依存関係をスマートにバンドルし、関数ごとの肥大化を減らすか、ホットパスを統合します。
- インデックスのないクエリ:
GET /api/usersがクロールする場合は、emailとcreated_atにインデックスを追加します。将来のあなたは感謝します。
- サイレント障害:常にコンテキスト付きでエラーをログに記録します。「何かが壊れた」はDevOpsの詩ではありません。
後で泣かないようにコードを構造化する方法
- データアクセス用の
repositories/またはdb/
- 認証、レート制限、入力検証用の
middlewares/
- ヘルパー(メール、暗号、サードパーティAPI)用の
lib/
可能な限り関数を純粋に保ちます。副作用を端に置きます。これにより、テストが簡単になり、デバッグが犯罪番組のようにならなくなります。
実際に重要なパフォーマンストゥイーク
- リストエンドポイントでページネーションを使用します。大規模なデータセットがある場合はカーソルベース。
- すべてのリクエストで世界を再送信しないように、ETagまたはlast-modifiedヘッダーを追加します。
- 可能な場合は書き込みをバッチ処理します。N+1クエリはバックエンドバグのキラキラです—どこにでも入り込みます。
無視できないセキュリティの基本(無視したい場合でも)
- すべてのルートで入力を検証します。JSONスキーマまたは検証ライブラリは、サプライズ攻撃を防ぎます。
- Argon2またはbcryptでパスワードをハッシュ化します。自分で暗号を実装しないでください。絶対に。お願いします。
- スケジュールに従ってキーとシークレットをローテーションします。カレンダーのリマインダーは侵害よりも安価です。
- 最小権限のデータベースロールを使用します。あなたのAPIはスーパーユーザーの権限を必要としません—誰も必要としません。
価格の現実チェック:胸焼けではなく成長を計画する
サーバーレスは無料のように感じます…そうでない場合を除きます。監視:
- トラフィックが急増した場合のコールドスタートペナルティ。
予算とアラートを設定します。あなたのCFOが炎の絵文字をテキストで送ってきたら、すでに手遅れです。
ドキュメント、例、および健全性チェックが必要な場合
私は2つの真実を信じて生きています。あなたは何かをどのように構成したかを忘れ、午後11時に再度設定する必要があるでしょう。READMEをリポジトリに保管してください:
- 一般的なコマンド(マイグレーション、テスト、デプロイ)
3か月後の新しいあなた、または来週の実際の新しいチームメイトにとってフレンドリーにしましょう。
注目に値する:調査とコードレビューのショートカット
注目に値すること:アーキテクチャの選択についてセカンドオピニオンが必要な場合、またはベストプラクティスを迅速に比較したい場合は、Sider.AIがあなたの計画をレビューし、奇妙なエッジケースを指摘し、出荷前にチェックリストを手渡す、ナンセンスなチームメイトのように機能します。それはあなたのために[Deploy]をクリックしません—しかしそれはあなたが「ああ、大変だ」Slackスレッドを避けるのを助けます。 クイックリファレンス:あなたのLovable Cloudバックエンドチェックリスト
- プロジェクトの作成、Gitのセットアップ、ブランチ戦略
- データベースのプロビジョニング、マイグレーションの実行、ORMの接続
- ステージング環境へのデプロイ、ログのクリーンアップ、保護されたルートの動作
- レート制限とロールバック計画による本番環境へのロールアウト
これをモニターに貼り付けてください。またはタトゥーを入れてください。(タトゥーは入れないでください。)
まとめ:退屈にすることで愛らしくする(良い意味で)
愛らしいバックエンドは、あなたが眠っている間、静かに仕事をするものです。退屈で実績のあるものを使って構築しましょう。HTTPエンドポイント、クリーンな認証、頑丈なデータベース、そして賢明なデプロイメント。Lovable Cloudは、足場に関するドラマを取り除くことで、重要な部分—あなたの製品、あなたのユーザー、そしてあなたがスキップしたかもしれないコーヒーに集中できるように支援します。
/helloを出荷してください。/usersを追加してください。ネジを締めてください。そして、あなたのバックエンドがハミングしている間、文字通り他のことをしてください。それはただ愛らしいというだけでなく、生きているということです。
ミニQ&A:実際のシナリオ
同じプロジェクトでパブリックAPIとプライベートAPIを混在させることはできますか?
はい。ミドルウェアを使用してプライベートルートをゲートし、マシン間トラフィック用に個別のトークン/キーを使用します。スコープを厳しく保ちます。
バックグラウンドジョブが必要な場合はどうすればよいですか?
長時間実行される作業(メール、レポート、同期)のために、スケジュールされた関数またはキュー駆動の関数を立ち上げます。ニュースレターを送信するためにユーザーリクエストをブロックしないでください。
ステージング環境と本番環境が10代の若者のように秘密を交換するのを防ぐにはどうすればよいですか?
個別の環境。個別の秘密。ステージングのクレデンシャルが本番環境のビルドに侵入しないように、CIにガードレールを設けます。
単純なものから始めて、後で完全なマイクロサービスに移行できますか?
もちろんです。速度のためにモノリス風から始めましょう。あなたのメトリクスが「今」と言っているときにホットスポットを抽出してください。ポッドキャストが「マイクロサービスはクールだ」と言っているときではありません。
次のステップ:あなたの30分計画
- 5分:プロジェクトを作成し、テンプレートを選択します
- 10分:
/api/helloを構築し、データベースを接続し、マイグレーションを実行します
- 10分:JWT認証を追加し、
POST /api/usersを保護します
- 5分:ステージング環境にデプロイし、スモークテストを実行します
それだけです。あなたはLovable Cloudでバックエンドを構築しました。それは動作します。それはスケーリングします。そして、あなたはまだコーヒーを温め直す時間があります。
FAQ
Q1:Lovable Cloudは、バックエンドを構築する初心者にとって良いですか?
はい—そのテンプレート、サーバーレス関数、および環境マネージャーは、最初のバックエンドをはるかに恐ろしいものにしません。単純なREST APIから始めて、データベースを追加し、次に認証をレイヤー化します。データセンターと格闘することなく、実際のパターンを学習できます。
Q2:本番環境用にLovable Cloudバックエンドを保護するにはどうすればよいですか?
JWTまたはOAuthを使用し、CORSをロックダウンし、シークレットを環境マネージャーに保存します。レート制限を追加し、すべてのルートで入力を検証し、p95レイテンシーを監視して、ユーザーが問題に遭遇する前に問題をキャッチします。
Q3:REST APIの場合、Lovable Cloudで最適なデータベースは何ですか?
PostgreSQLは、特にPrismaやDrizzleのようなORMを使用する場合、ほとんどのアプリにとって信頼できる選択肢です。リレーショナルデータ、トランザクション、およびインデックスをドラマなしで処理し、トラフィックの増加に合わせてスケールします。
Q4:サーバーレスバックエンドでのコールドスタートとパフォーマンスを処理するにはどうすればよいですか?
依存関係をスマートにバンドルし、重要なパスをウォームアップし、1つのサービスで十分な場合は、100個の小さな関数を避けます。キャッシュとページネーションを追加し、実際に重要なものを調整するためにp95レイテンシーを監視します。
Q5:個別のシークレットとURLを使用して、ステージング環境と本番環境をデプロイできますか?
もちろんです。個別の環境を作成し、個別のDATABASE_URL、JWT_SECRET、およびドメインを設定し、ビルドを前方方向にプロモートします。これにより、テストが安全になり、ロールバックが簡単になります。