Quickstarters
Astroフロントエンドを構築し、バックエンドに接続する方法?
32 分
このチュートリアルでは、astroを使用してto doリストアプリケーションを構築し、back4appによって提供される管理されたバックエンドサービスに接続します。 このガイドは、astroを使用して動的データを持つ現代的で静的なフロントエンドを構築しながら、基本的なcrud(作成、読み取り、更新、削除)操作を習得したい方のために設計されています。 このチュートリアルの終わりまでには、あなたのアプリケーションはデータストレージ、認証などを処理するバックエンドとシームレスに相互作用するようになります。 フルスタックアプリケーションの開発は、バックエンドの設定やデータベース管理のために困難になることがあります。 プロセスを効率化するために、back4appを使用します— 堅牢なバックエンド・アズ・ア・サービス —これにより、迅速で軽量なastroフロントエンドの作成に集中できます。 back4appは、完全に管理されたnosqlデータベース、ユーザー認証、カスタムロジックのためのcloud code、シームレスな統合のためのsdkを提供します。これにより、サーバーインフラストラクチャを管理することなく、スケーラブルなアプリケーションを構築および展開できます。 主なポイント このチュートリアルに従うことで、あなたは viteを使用して、最新のastroプロジェクトを初期化します。 アプリケーションのデータを管理するためにバックエンドサービスを統合します。 「 動的to doリスト 」のための基本的なcrud操作を実装します。 back4appでコンテナ化されたワークフローを使用して、完全に機能するアプリケーションをデプロイします。 前提条件 始める前に、次のものを確認してください node jsとnpm があなたのマシンにインストールされていること。インストールを確認するには、 node v と npm v を実行してください。 基本的なastroの知識 , ファイルベースのルーティングやコンポーネントの作成を含みます。 バックエンドサービスを管理するためのback4appアカウント 。まだ登録していない場合は、 back4app https //www back4app com/ にサインアップしてください。 これらの前提条件が整ったら、プロジェクトの構築を開始する準備が整いました。 プロジェクトのセットアップ ローカル開発環境を設定し、新しいastroプロジェクトを初期化することから始めます。 次のことを確認してください node js (ltsバージョン) がインストールされています。もしインストールされていない場合は、次のサイトからダウンロードしてください nodejs org https //nodejs org/ 次のコマンドを実行して、astroプロジェクトを作成します npm create astro\@latest todo app プロジェクトディレクトリに移動します cd todo app セットアップを確認するために、開発サーバーを起動します npm run dev あなたのastroアプリは、今やブラウザで開くはずです。フロントエンドが準備できたら、back4appでバックエンドを作成してください。 todoバックエンドの作成 back4appは、nosqlデータベース、認証、cloud code、自動生成されたapiを含む、完全に管理されたバックエンドサービスを提供しています。 バックエンドを設定するための手順は次のとおりです あなたの back4appダッシュボード https //www back4app com/ にログインし、 "新しいアプリを作成" をクリックします。 アプリに名前を付けます (例えば、 todoapp )そして、バックエンドタイプとして nodejs/parse を選択します。 "データベース" > "ブラウザ" に移動し、 "クラスを作成" をクリックし、 "カスタム" を選択します。クラスに task という名前を付け、パブリックの読み書きを許可するように権限を設定します(後でこれを調整できます)。 "task" クラスに次のフィールドを追加します title (string)– タスクのタイトル。 description (string)– タスクの詳細。 completed (boolean)– タスクの完了状況。 duedate (date)– タスクの締切。 "保存" をクリックしてスキーマを作成します。 back4appとastroの統合 あなたは parse javascript sdk を使用して、astroアプリをback4appバックエンドに接続します。 parse sdkをインストールします npm install parse 専用モジュールを作成してsdkを構成します。例えば、次の内容で src/lib/parseclient 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; これで、このモジュールをastroコンポーネントやページにインポートして、バックエンドとやり取りできます。 フロントエンドの開発 あなたのastroアプリケーションは、タスクを追加、表示、更新、削除するためのコンポーネントとページで構成されます。astroのファイルベースのルーティングとコンポーネントを使用して、動的なto doリストを構築します。 コンポーネントの構造化 フロントエンドを作成するために、solid jsを利用します。astroでsolid jsを使用するには、solid jsパッケージをインストールします。 このように npm install solid js uiコンポーネントを整理するために、 src/components フォルダーを作成します mkdir src/components 次のコンポーネントを作成します taskformsolid jsx – 新しいタスクを追加するためのものです。 taskitemsolid jsx – 個々のタスクを表すためのものです。 tasklistsolid jsx – タスクのリストを表示するためのものです。 todoapp jsx – 完全なアプリケーションを表示するためのものです。 taskformsolid jsx このコンポーネントは、タスクの詳細をキャプチャし、back4appに送信するフォームをレンダリングします。 // taskformsolid jsx import { createsignal } from 'solid js'; import parse from ' /lib/parseclient'; export default function taskformsolid(props) { const \[title, settitle] = createsignal(''); const \[description, setdescription] = createsignal(''); 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(); if (props refreshtasks) { props refreshtasks(); } settitle(''); setdescription(''); } catch (error) { console error('error adding task ', error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title()} oninput={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description()} oninput={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); } taskitemsolid jsx このコンポーネントは個々のタスクを表し、その完了状態を切り替えたりタスクを削除するためのボタンを提供します。 // taskitemsolid jsx import { createsignal } from 'solid js'; import parse from ' /lib/parseclient'; export default function taskitemsolid(props) { const \[iscompleted, setiscompleted] = createsignal(props task completed); const togglecomplete = async () => { try { const query = new parse query('task'); const tasktoupdate = await query get(props task id); const newcompletedstate = !iscompleted(); tasktoupdate set('completed', newcompletedstate); await tasktoupdate save(); setiscompleted(newcompletedstate); if (props refreshtasks) { props refreshtasks(); } } catch (error) { console error('error updating task ', error); } }; const deletetask = async () => { try { const query = new parse query('task'); const tasktodelete = await query get(props task id); await tasktodelete destroy(); if (props refreshtasks) { props refreshtasks(); } } catch (error) { console error('error deleting task ', error); } }; return ( \<div class={`task item ${iscompleted() ? 'completed' ''}`}> \<div> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \</div> \<div> \<button onclick={togglecomplete}> {iscompleted() ? 'undo' 'complete'} \</button> \<button onclick={deletetask}>delete\</button> \</div> \</div> ); } tasklistsolid jsx このコンポーネントは、配列を反復処理して各taskitemをレンダリングすることによってタスクのリストを表示します。 // tasklistsolid jsx import { for, show } from 'solid js'; import taskitemsolid from ' /taskitemsolid'; export default function tasklistsolid(props) { return ( \<div class="task list"> \<show when={props tasks length > 0} fallback={\<p>no tasks available\</p>}> \<for each={props tasks}> {(task) => ( \<taskitemsolid task={task} refreshtasks={props refreshtasks} /> )} \</for> \</show> \</div> ); } todoapp jsx このコンポーネントは他のコンポーネントをインポートして表示します。アプリケーション全体を表示します。 // todoapp jsx import { createsignal, onmount, createeffect } from 'solid js'; import parse from ' /lib/parseclient'; import taskformsolid from ' /taskformsolid'; import tasklistsolid from ' /tasklistsolid'; export default function todoapp() { const \[tasks, settasks] = createsignal(\[]); 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); } }; onmount(() => { fetchtasks(); }); return ( <> \<taskformsolid refreshtasks={fetchtasks} /> \<tasklistsolid tasks={tasks()} refreshtasks={fetchtasks} /> \</> ); } ページ統合 メインページ(例 src/pages/index astro )でタスクの状態を管理し、コンポーネントを統合します。 \ // index astro import todoapp from ' /components/todoapp'; import layout from ' /layouts/layout astro'; import parse from ' /lib/parseclient'; \ \<layout> \<div class="container"> \<h1>to do list\</h1> \<todoapp client\ load /> \</div> \</layout> アプリケーションのスタイリング グローバルな基本スタイリングを追加するには、以下のcssスタイルを layouts astro ファイルに追加します。 src/layouts ディレクトリ内に。 container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } 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; } 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; } } 次に、スタイルタグに is\ global 属性を追加します。 \<!doctype html> \<html lang="en"> \<head> \<meta charset="utf 8" /> \<meta name="viewport" content="width=device width" /> \<link rel="icon" type="image/svg+xml" href="/favicon svg" /> \<meta name="generator" content={astro generator} /> \<title>astro basics\</title> \</head> \<body> \<slot /> \</body> \</html> \<style is\ global> / your styles / \</style> back4app web deploymentでのフロントエンドのデプロイ back4app web deploymentは、あなたのastroアプリケーションをホストするためのコンテナ化された環境を提供します。 プロダクションビルドを生成する npm run build dockerfileの作成 プロジェクトのルートに次の内容で dockerfile を作成します \# build stage from node 18 alpine as build workdir /app \# copy package files and install dependencies copy package json package lock json / run npm ci \# copy all files and build the application copy run npm run build \# production stage from node 18 alpine workdir /app \# set environment variables env node env=production env host=0 0 0 0 env port=3000 \# copy the build output from the build stage copy from=build /app/dist/ /dist/ \# install the static file server run npm install g serve \# expose the port expose 3000 \# start serving the static files from the "dist" folder cmd \["serve", " s", "dist", " l", "3000"] ローカルでのdockerコンテナのテスト dockerイメージをビルドします docker build t todo frontend コンテナを実行します docker run p 3000 3000 todo frontend ブラウザで http //localhost 3000 を開いて、astroアプリが正しく提供されていることを確認します。 back4appへのデプロイ gitリポジトリを初期化し、プロジェクトファイルを追加してコミットします 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 https //www back4app com/containers 」にログインします。 「 新しいアプリを作成 」をクリックし、プロジェクト名を入力し、githubリポジトリを選択します。 back4appを認証し、「 dockerfileデプロイメント 」を選択します。 ビルド設定を確認し、「 デプロイ 」をクリックしてデプロイを開始します。 デプロイメントの監視 デプロイ後、back4appダッシュボードを使用して デバッグ用のログを表示します。 コンテナのパフォーマンスとリソース使用状況を監視します。 新しいコミットで再ビルドをトリガーします。 必要に応じてカスタムドメインを設定します。 ライブアプリケーションにアクセスするには、 https //todoapp ku5ofg8s b4a run/ を使用します。 https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ 。 テストとデバッグ デプロイ後、astroフロントエンドがback4appバックエンドと適切に通信していることを確認してください api検証 ブラウザの開発者ツール(f12 → ネットワーク)を使用してapiコールを検査します。 タスク操作 uiを介してタスクを追加、完了、削除し、back4appデータベースブラウザで更新を確認します。 エラーハンドリング コンソールログでエラーを確認し、空の送信などのエッジケースをテストします。 パフォーマンステスト ブラウザツールを使用して遅いネットワーク条件をシミュレートし、応答性を評価します。 astroとback4appを使用するためのベストプラクティス アプリケーションを最適化するために 効率的なリクエスト 複数のタスクを処理する際はバッチ操作を使用します const tasks = \[task1, task2, task3]; parse object saveall(tasks); 最適化されたクエリ 必要なフィールドのみを取得 query select('title', 'completed'); 環境管理 環境変数に機密キーを保存 astro parse app id=your app id astro parse js key=your js key セキュリティ aclを使用してアクセスを制限 task setacl(new parse acl(parse user current())); バックエンドオフロード 複雑なロジックのためにcloud codeを活用し、apiの露出を減らす。 結論 あなたは今、astroフロントエンドを作成し、back4appのバックエンドと統合し、コンテナ化されたワークフローを使用してデプロイすることによって、フルスタックのto doリストアプリケーションを構築しました。 このチュートリアルは、ローカル開発からクラウドデプロイメントまでのすべてのステップを案内し、astro uiとバックエンドサービス間のシームレスな相互作用を確保しました。 今後は、リアルタイム更新、改善された認証、サードパーティ統合などの強化を検討してください。さらなる学習のために、 back4appドキュメント https //www back4app com/docs を訪れて、コミュニティリソースを探索してください。