Quickstarters
How to Build a Gatsby Frontend and Connect It to a Backend?
30 分
このチュートリアルでは、gatsbyを使用してto doリストアプリケーションを構築し、back4appが提供する堅牢なバックエンドに接続します。 このガイドは、迅速で静的なサイトに基本的なcrud(作成、読み取り、更新、削除)操作を統合したい人に最適です。 最後には、gatsbyを使用して超高速のフロントエンドを実現しながら、back4appのバックエンドサービスを活用する方法を示す完全に機能するアプリが完成します。 フルスタックアプリケーションの構築は、バックエンドのセットアップ、データベース管理、認証、デプロイメントなどの複雑さがあるため、挑戦的です。 このプロセスを簡素化するために、back4appを使用します— スケーラブルなバックエンド・アズ・ア・サービス(baas)ソリューション —これにより、ホスティング、データベース、apiを処理しながら、gatsbyサイトの構築に集中できます。 back4appは、すぐに使用できるデータベース、認証、サーバーサイドロジックのためのcloud code、シームレスなsdk統合を含む包括的なバックエンドサービスのスイートを提供します。 コンテナ化されたデプロイメントのサポートにより、現代のフルスタックアプリケーションにとって優れた選択肢となります。 これらのツールを使用すると、サーバーインフラストラクチャを管理することなく、アプリケーションを迅速に開発および展開できます。 主なポイント このチュートリアルに従うことで、あなたは以下を学ぶことができます 最新のgatsbyプロジェクトを初期化する。 アプリケーションのデータを管理するためにバックエンドサービスを統合する。 インタラクティブなユーザーエクスペリエンスのためにコアcrud操作を実装する。 完全な 機能的なto doリストアプリケーション をback4appのコンテナ化されたワークフローを使用して展開する。 前提条件 始める前に、以下のことを確認してください node jsとnpm nodejs org https //nodejs org/ から最新のltsバージョンのnode jsをインストールし、ターミナルで node v と npm v を実行して確認します。 基本的なgatsbyの知識 react、graphql、およびgatsbyのデータレイヤーに精通していることが期待されます。gatsbyが初めての場合は、まずその基本を確認してください。 back4appアカウント back4app https //www back4app com/ にサインアップして、バックエンドサービスを設定および管理します。 これらの前提条件が整ったら、プロジェクトを設定して構築を開始する準備が整いました。 プロジェクトのセットアップ ローカル開発環境を設定し、gatsbyプロジェクトを初期化することから始めます。 次を確認してください node js (ltsバージョン) がインストールされています。必要に応じて、次のリンクからダウンロードしてください nodejs org https //nodejs org/ 。インストールを確認してください node v npm v gatsby cliを使用して新しいgatsbyプロジェクトを作成します。次のコマンドを実行してください( todo app を希望のプロジェクト名に置き換えてください) npx gatsby new todo app プロジェクトディレクトリに移動します cd todo app セットアップを確認するために開発サーバーを起動します npx gatsby develop あなたのgatsbyサイトは現在ローカルで実行されているはずです。提供されたurlをブラウザで開いて確認してください。次に、データストレージとapiインタラクションを管理するためにback4appでバックエンドを設定します。 todoバックエンドの作成 back4appは、完全に管理されたバックエンドサービスを提供しており、 parse , nosqlデータベース、認証、cloud code、そして自動生成されたapiをすぐに利用できる形で提供します。 このセクションでは、あなたのタスクを保存するための task データモデルを作成し、それをgatsbyフロントエンドに接続する方法を案内します。 バックエンドアプリケーションの設定 ログイン あなたの back4appダッシュボード https //www back4app com/ をクリックし、 "新しいアプリを作成"。 アプリケーションに名前を付ける (例えば、 todogatsbyapp ) を選択し、 nodejs/parse をバックエンドタイプとして選択します。 アプリが作成されたら、 "データベース" > "ブラウザ" に移動します。 "クラスを作成" をクリックし、 "カスタム" を選択します。 クラスに名前を付けます task とし、 クラスレベルの権限 を設定して、一般公開の読み書きを許可します(これらの設定は後で調整できます)。 「 task 」クラスに、次のフィールドを追加します タイトル (文字列)– タスクのタイトル。 説明 (文字列)– タスクの詳細。 完了 (ブール値)– タスクが完了しているかどうかを示します。 期限日 (日付)– タスクの締切。 "保存" をクリックして、スキーマを確定します。 gatsbyとback4appの統合 gatsbyプロジェクトにback4appを統合するには、 parse javascript sdk を使用します。sdkをnpm経由でインストールします npm install parse sdkを設定するには、次のように初期化します。 アプリケーションid と javascriptキー を使用します。これらの資格情報は、back4appダッシュボードの アプリ設定 > セキュリティとキー から取得してください。 プロジェクト内にファイルを作成します(例えば、 src/utils/parse config js )そして、次の設定を追加します // src/utils/parse config js import parse from "parse/dist/parse min js"; const parse app id = 'your application id'; const parse js key = 'your javascript key'; const parse server url = 'https //parseapi back4app com/'; parse initialize(parse app id, parse js key); parse serverurl = parse server url; export default parse; この設定をgatsbyのページやコンポーネントにインポートして、バックエンドと対話することができます。 gatsbyを使用したフロントエンドの開発 バックエンドが接続されたので、gatsbyを使用してto doリストアプリケーションのユーザーインターフェースを構築します。 reactとgraphqlを活用しながら、タスクを追加、表示、更新、削除するためのページとコンポーネントを作成します。 コンポーネントの整理 あなたのアプリケーションには、以下の主要なコンポーネントが含まれます taskform js – 新しいタスクを追加する処理を行います。 tasklist js – すべてのタスクを表示し、タスクを完了としてマークしたり削除したりするためのコントロールを提供します。 taskitem js – 個々のタスクを表し、完了を切り替えたり削除したりするアクションを持ちます。 次のファイルを追加するために、 src 内に components フォルダーを作成します mkdir src/components touch src/components/taskform js src/components/tasklist js src/components/taskitem js react hooksによる状態管理 状態管理と副作用のためにreactフック( usestate と useeffect )を使用します。メインページ(例 src/pages/index js )で、次のように状態を設定します // src/pages/index js import react, { usestate, useeffect } from "react"; import parse from " /utils/parse config"; import taskform from " /components/taskform"; import tasklist from " /components/tasklist"; const indexpage = () => { const \[tasks, settasks] = usestate(\[]); const fetchtasks = async () => { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); settasks(results map(task => ({ id task id, task tojson() }))); } catch (error) { console error("error fetching tasks ", error); } }; useeffect(() => { fetchtasks(); }, \[]); return ( \<div classname="container"> \<h1>to do list\</h1> \<taskform fetchtasks={fetchtasks} /> \<tasklist tasks={tasks} fetchtasks={fetchtasks} /> \</div> ); }; export default indexpage; タスクフォームコンポーネントの構築 「 taskform js 」で、タスクを追加するための制御されたフォームを作成します。 usestate を使用して入力値を管理し、データをback4appに送信します // src/components/taskform js import react, { usestate } from "react"; import parse from " /utils/parse config"; const taskform = ({ fetchtasks }) => { const \[title, settitle] = usestate(""); const \[description, setdescription] = usestate(""); const handlesubmit = async (e) => { e preventdefault(); try { const task = parse object extend("task"); const task = new task(); task set("title", title); task set("description", description); task set("completed", false); await task save(); fetchtasks(); settitle(""); setdescription(""); } catch (error) { console error("error adding task ", error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title} onchange={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description} onchange={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); }; export default taskform; タスクリストの表示 「 tasklist js 」で、タスク配列をマッピングしてタスクリストをレンダリングし、 taskitem コンポーネントを使用します // src/components/tasklist js import react from "react"; import taskitem from " /taskitem"; const tasklist = ({ tasks, fetchtasks }) => { return ( \<div> {tasks length === 0 ? ( \<p>no tasks available\</p> ) ( tasks map(task => ( \<taskitem key={task id} task={task} fetchtasks={fetchtasks} /> )) )} \</div> ); }; export default tasklist; タスクアイテムコンポーネントの作成 「 taskitem js 」で、タスクを完了としてマークしたり削除したりするコンポーネントを作成します // src/components/taskitem js import react from "react"; import parse from " /utils/parse config"; const taskitem = ({ task, fetchtasks }) => { const handlecomplete = async () => { try { const query = new parse query("task"); const tasktoupdate = await query get(task id); tasktoupdate set("completed", !task completed); await tasktoupdate save(); fetchtasks(); } catch (error) { console error("error updating task ", error); } }; const handledelete = async () => { try { const query = new parse query("task"); const tasktodelete = await query get(task id); await tasktodelete destroy(); fetchtasks(); } catch (error) { console error("error deleting task ", error); } }; return ( \<div classname={`task item ${task completed ? "completed" ""}`}> \<h3>{task title}\</h3> \<p>{task description}\</p> \<button onclick={handlecomplete}> {task completed ? "undo" "complete"} \</button> \<button onclick={handledelete}>delete\</button> \</div> ); }; export default taskitem; アプリケーションのスタイリング 次のように基本スタイリングを持つ styles css ファイルを src フォルダーに作成します / src/styles css / container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } container h1 { margin bottom 20px; } form { display flex; flex direction column; align items center; gap 10px; margin bottom 20px; } form input\[type="text"] { width 80%; max width 400px; padding 8px; box sizing border box; font size 1rem; } form button { padding 8px 16px; cursor pointer; font size 1rem; border none; background color #eaeaea; transition background color 0 2s ease; } form button\ hover { background color #ccc; } container p { font size 1rem; } task item { display flex; flex direction column; align items center; justify content center; gap 12px; border 1px solid #ccc; border radius 6px; padding 15px; margin 10px 0; background color #fafafa; text align center; transition background color 0 2s ease; } task item completed h3, task item completed p { text decoration line through; color #888; } task item h3 { margin 0; font size 1 1rem; } task item p { margin 0; font size 1rem; } task item button { padding 6px 12px; border none; background color #eaeaea; cursor pointer; font size 0 9rem; } task item button\ hover { background color #ccc; } @media (min width 600px) { task item { flex direction row; } } このcssをgatsbyのレイアウトまたはページにインポートします(例えば、 gatsby browser js ) // gatsby browser js import " /src/styles css"; uiの最終調整 あなたのgatsby to doリストアプリケーションは、back4appとカスタムスタイリングを統合した動的なフロントエンドを備えています。このアプリは、タスクの追加、表示、更新、削除を可能にし、効率的なフロントエンドとバックエンドの通信を確保します。 次に、back4appのwebデプロイメントプラットフォームを使用してgatsbyサイトをデプロイします。 back4app webデプロイメントでのフロントエンドのデプロイ back4app web deploymentは、アプリケーションをホストするための完全に管理されたコンテナ化環境を提供します。dockerベースのデプロイメントを使用すると、gatsbyサイトをパッケージ化し、簡単にデプロイできます。 gatsbyの本番環境用設定 gatsbyはデフォルトで静的サイトを生成します。本番環境用のサイトを構築するには npx gatsby build サイト用のdockerfileの作成 最初に、 dockerfile を作成する前に、プロジェクトのルートディレクトリに dockerignore ファイルを作成し、以下のコード行を追加します git node modules eslint prettier git vscode readme md dockerfile docker compose yml public cache 次に、 docker compose yml ファイルを作成して、 docker compose コマンドを使用します。ファイルのターゲットは、dockerfileのデプロイステージである必要があります。あなたの docker compose yml ファイルには、以下のコマンドが含まれている必要があります version '3' services app image todo app gatsby build context dockerfile dockerfile target deploy ports \ "8000 80" 今、プロジェクトのルートに dockerfile を作成して、gatsbyサイトをコンテナ化します from node 20 as build workdir /usr/src/app copy run npm install run npm run build from nginx 1 18 alpine as deploy workdir /usr/share/nginx/html run rm rf / copy from=build /usr/src/app/public entrypoint \[ "nginx", " g", "daemon off;" ] コンテナのローカルテスト デプロイ前に、dockerコンテナをビルドしてテストします docker build t todo gatsby frontend コンテナを実行します docker run p 8000 80 todo gatsby frontend ブラウザで http //localhost 8000 にアクセスして、サイトが正しく提供されていることを確認してください。 githubにプッシュし、back4app経由でデプロイする プロジェクトをgithubにプッシュします git init git add git commit m "initial commit for back4app deployment" git branch m main git remote add origin \<your github repository url> git push u origin main 次に、back4app web deploymentを使用してデプロイします にログインします back4app web deployment https //www back4app com/containers クリックします "新しいアプリを作成" , 名前を入力し、 githubリポジトリ を選択します。 back4appにリポジトリへのアクセスを許可し、 todo gatsby リポを選択します。 を選択します dockerfileデプロイメント そしてビルド設定を確認します。 クリックします "デプロイ" ビルドプロセスを開始します。 デプロイメントの監視と管理 デプロイ後、back4appダッシュボードを使用して トラブルシューティングのためのログを表示します。 コンテナのパフォーマンスとリソース使用状況を監視します。 新しいコミットで再デプロイをトリガーします。 必要に応じてカスタムドメインを設定します。 アプリケーションのテストとデバッグ デプロイ後、gatsbyサイトを徹底的にテストしてください api接続の確認 ブラウザの開発者コンソール(f12 → ネットワーク)を開いて、タスク操作中のapi呼び出しを確認します。 タスクの追加と取得 uiを使用してタスクを追加し、back4appデータベースブラウザでデータの永続性を確認するためにリフレッシュします。 crud操作のテスト タスクを完了としてマークし、削除がバックエンドに正しく反映されることを確認します。 エッジケースの処理 フォーム入力を検証し、開発者ツールを使用して遅いネットワーク条件をシミュレートします。 問題が発生した場合は、back4appのログを確認するか、api設定をチェックしてください。 back4appサービスを使用するためのベストプラクティス アプリケーションのパフォーマンスとセキュリティを向上させるために api呼び出しの最適化 複数の操作に対してバッチリクエストを使用し、必要なフィールドのみをクエリします。 機密データの保護 アプリケーションidやjavascriptキーなどの資格情報を環境変数に保存します。gatsbyを使用して、 env ファイルを作成します gatsby parse app id=your app id gatsby parse js key=your js key 自動スケーリングの有効化: back4app web deploymentで自動スケーリングを有効にして、高トラフィックを管理します。 セキュリティの強化: データの変更を制御するためにクラスレベルの権限(clp)を制限し、必要に応じてaclを設定します。 クラウドコードの利用: 複雑なロジックをクラウドコードにオフロードして、パフォーマンスを向上させ、apiの露出を減らします。 結論 これで、フロントエンドにgatsby、バックエンドにback4appの堅牢なサービスを使用したフルスタックのto doリストアプリケーションを構築しました。 このチュートリアルでは、gatsbyプロジェクトの設定、parse sdkの統合、back4appでのコンテナ化されたワークフローを使用したサイトのデプロイについて説明しました。 開発を続ける中で、高度なユーザー認証、リアルタイム更新、サードパーティ統合などの機能を追加することを検討してください。 さらなる情報とサポートについては、 back4appのドキュメント https //www back4app com/docs を参照してください。