Next.js と Netlify を使用した Notes アプリ
Squid をバックエンドとして使用し、Netlify にデプロイするフルスタックの Notes アプリを構築します。
構築するもの:
学べること:
- サーバー側とクライアント側の両方でデータをクエリおよびレンダリングし、リアルタイムで最新の状態に保つ方法
- クライアント側でのデータのミューテーション
- Netlify 環境変数と連携するように Squid Client SDK を設定する方法
TypeScript の経験が必要です。Next.js と Netlify の経験があると望ましいですが、必須ではありません。
環境のセットアップ
- notes-app のコードサンプルをダウンロード:
npm @squicloud/cli init-sample notes-app --template notes-app
-
お好みの IDE でプロジェクトを開きます。
-
次のコマンドを使用して Netlify CLI をインストール:
npm install -g netlify-cli
Squid バックエンドのセットアップ
There are two subfolders that make up the notes-app project: frontend and backend. The backend folder contains the Squid backend for the app.
Navigate to the Squid Console and create a new application named
notes-app
.
- In the Squid Console, navigate to the application overview page and scroll to the Backend project section. Click Create .env file and copy the command.
- In the terminal, change to the backend directory:
cd backend
- Create the
.env
file using the command you copied from the console. The command has the following format:
squid init-env --appId YOUR_APP_ID --apiKey YOUR_API_KEY --environmentId dev --squidDeveloperId YOUR_SQUID_DEVELOPER_KEY --region us-east-1.aws
- Install the required dependencies:
npm install
The backend is now set up and ready to use with a frontend!
Next.js フロントエンドの設定
以下のステップで、アプリケーションが Squid と Next.js に接続できるように設定パラメータを追加します。
- 新しいターミナルウィンドウを開き、notes-app のフロントエンドに移動します。これで、アプリのバックエンドとフロントエンドの2つのターミナルウィンドウが開いている状態になります。
cd notes-app/frontend
- 必要な依存パッケージをインストール:
npm install
- Netlify プロジェクトを作成:
netlify sites:create
.env.local
ファイルを作成:
touch .env.local
- 以下のコードを
.env.local
ファイルに追加し、プレースホルダーをあなたの Squid developer ID に置き換えてください。ID はバックエンドの.env
ファイルおよび Squid Console で確認できます。
SQUID_DEVELOPER_ID=YOUR_SQUID_DEVELOPER_ID
netlify.toml
ファイルを開きます。プレースホルダーをあなたのアプリ ID に置き換えてください。アプリ ID はバックエンドの.env
ファイルおよび Squid Console に記載されています。
...
SQUID_APP_ID = "YOUR_APP_ID"
...
Notes アプリのコンポーネントを確認
Notes アプリには、アプリの外観と動作を管理する3つの主要なコンポーネントがあります:
NoteItem
- ノートのリスト内の各ノートを表示します。NoteList
- ノートのリストをレンダリングし、ユーザーが新しいノートを追加または既存のノートを更新する際にNoteModal
コンポーネントを表示します。NoteModal
- ノートを追加する際に表示され、ユーザーがノートのタイトルと内容を入力できます。
Squid がノートデータをリアルタイムでシームレスに扱う方法の概要は以下の通りです:
handleSave
関数では、Squid がノートをデータベースに保存します:
await collection.doc(id).update({
title,
content,
timestamp,
});
- Squid はノートの削除も処理します:
collection.doc(id).delete();
Home
関数では、Squid が以下の関数を使ってデータベースからリアルタイムで更新情報を取得します:
await squid
.collection<Note>('notes')
.query()
.sortBy('timestamp', false)
.dereference();
ローカルで Notes アプリを実行
- notes-app バックエンド用に開いたターミナルで、以下のコマンドを使って Squid バックエンドをローカルで起動:
squid start
- notes-app フロントエンド用に開いたターミナルで、次のコマンドを使って Next.js フロントエンドを起動:
netlify dev --live
Netlify がローカルサーバーの設定を完了すると、ターミナルに http://[RANDOM_ID].netlify.live
形式でアプリケーションへのリンクが表示されます。リンクをクリックして Notes アプリを開いてください。
これで完了です!
おめでとうございます! Next.js と Squid を使用したノート作成アプリケーションの作成に成功し、Netlify 上でローカルに提供することができました。Netlify と Squid を組み合わせることで、リアルタイムデータを活用し、数百万人規模にスケールするアプリケーションをシームレスに構築およびデプロイできます。
次に試してみること:
- Squid React SDK の基礎を試すために React CRUD app を構築してみましょう。
- Squid バックエンドのデプロイ 方法を学びましょう。
- Squid のデータ照会機能の詳細については Client SDK documentation をご覧ください。
- Squid Backend SDK を使用してアプリデータのセキュリティを確保します。
- 利用可能な Integrations を確認して、Squid をあなたのデータベース、認証、API ツールに接続する方法を見てみましょう。
- Next.js と Squid の利用方法の詳細については this tutorial をご覧ください。
- Squid と Netlify を使用したフルスタックアプリについては、this tutorial をご参照ください。
追加のノート
Notes アプリの機能
アプリ内でいくつかのノートを作成し、以下の点に注意してください:
-
モーダル内の
Add Note
をクリックすると、新しいノートがノートリストにすぐに表示され、モーダルがほんの一瞬で閉じます。これは、Squid Client SDK が楽観的更新(optimistic updates)を行い、ローカルの状態を更新しながらサーバーにもミューテーションを送信するためです。もしサーバーの更新が失敗した場合、クライアントは以前のデータにフォールバックします。 -
新しいタブを開いて同じ URL に移動すると、作成したノートが即座に表示されます。これは、アプリが
withServerQuery
サーバコンポーネントを使用して、サーバー側でデータをフェッチし、事前レンダリングされた状態でクライアントに送信するためです。これはアプリのパフォーマンスを向上させる優れた方法です。 -
あるタブでノートリストとやり取りすると、他のタブのノートリストも更新されます。これは、Squid Client SDK がデータの変更を自動的にサブスクライブし、ローカルの状態を更新するためです。
Squid の環境
- Squid は開発用の
dev
と本番用のprod
という2種類のターゲット環境を提供します。このチュートリアルではdev
環境を使用します。詳細は Squid の environments をご確認ください。 - あなたの Squid developer ID は、プロジェクトをローカルで実行する際にのみ使用されます。
- ローカル開発専用であるため、
context.prod.environment
のSQUID_DEVELOPER_ID
は意図的に空欄にしています。これは、開発用の.env.local
ファイルに設定されるためです。netlify.toml
ファイルに空欄として追加することで、本番ビルドに含まれないようにしています。
Squid の機能
- Squid の組み込みデータベースを使用する場合、追加のカスタマイズなしで Squid バックエンドは完全に機能します。さらに、データベースイベントに応じて Schedulers や Triggers のような機能、また生の SQL やデータベース固有のクエリを実行する native queries などの機能を追加することも可能です。詳細は Backend SDK docs をご覧ください。
- 組み込みデータベースはドキュメントベースであるため、notes コレクションはドキュメントの集合を表します。SQL データベースを使用する場合、コレクションはテーブルを表し、ドキュメントがテーブルの行となります。
Next.js リンク
layout.tsx
内のNotes
関数は Next.js のサーバコンポーネントです。Next.js のサーバコンポーネントについては、Next.js Server Components documentation をご覧ください。NoteList.tsx
ファイル冒頭の'use client'
は、このファイルがクライアント側でレンダリングされるべきであることを Next.js に示しています。Next.js のクライアントコンポーネントについては、Next.js Client Components documentation をご覧ください.