Nuxtアプリケーションを構築してデプロイするには?

How to build and deploy a Nuxt application_
How to build and deploy a Nuxt application_

Nuxt.jsは、Vue.js、Nitro、Viteの上に作られたオープンソースのフレームワークで、ウェブアプリケーションを開発することができる。

Next.js(サーバー・サイド・レンダリングのためのReactフレームワーク)にインスパイアされたNuxt.jsは、開発者がさまざまなレンダリング・モードを適用して高速なウェブ・アプリケーションを作成することを可能にする。

2016年にリリースされたNuxt.jsは、その開発者に優しい哲学と豊富な機能により、開発者の間で広く受け入れられている。

Nuxt.jsの利点

Nuxt.jsには、Vue.jsの開発にとって魅力的な選択肢となるいくつかの利点があります:

ユニバーサル・レンダリング

Nuxt.jsは、ユーザー側でWebアプリがどのように表示されるかを制御します。Nuxt.jsは、サーバー上で初期ページをレンダリングすることから始め、特にインターネット接続が遅い人々にとって、超高速ロードを実現します。

これは、検索エンジンがあなたのウェブサイトをより速くクロールするのを助け、より良いSEOにつながります。

その後、Nuxt.jsはアプリ内のページ間を移動するためのクライアントサイドレンダリング(SPA)にスムーズに切り替わります。これにより、最新のウェブサイトに期待されるような、迅速でレスポンシブな動作が維持されます。

ハイドレーションとコード分割によるパフォーマンスの最適化

Nuxt 3は選択的ハイドレーションを可能にし、アプリの状態のセグメントをクライアント側でハイドレーションすることで、ファーストページのロードを高速化し、ユーザー体験を向上させる。

Next.jsと同様に、Nuxtはルートに応じてファイルを自動的に小さなバンドルに分割します。

こうすることで、ブラウザはサーバーから現在のビューに関連するコードだけを要求し、ユーザーのページロード時間を大幅に短縮することができる。

つまり、利用される帯域幅リソースが少なくなり、ユーザー体験が向上するということだ。

内蔵ルーティング

Nuxt.jsのデフォルトでは、ファイルベースのルーティングによってルートを処理し、アプリケーション内のナビゲーションとルート管理を簡素化します。

また、より複雑なルーティングシナリオのために、動的にルートを設定することもできます。

APIルート

Nuxt.jsを使えば、単純なタスクのために別のサーバーを立ち上げる必要がなくなります!APIルートと呼ばれる組み込みのショートカットがあります。

APIルートは、RESTful APIとGraphQL APIをサポートし、サーバー側のレンダリング中にデータの取得を処理できます。これにより、アプリの動作が軽快になり、検索エンジンがアプリのコンテンツをより理解しやすくなります。

Nuxt.jsの制限事項

Nuxt.jsはパワフルな開発環境を提供する一方で、考慮すべきいくつかの制限もあります:

学習曲線

Nuxt.jsは、従来のVue.js開発とは異なるコンセプトを導入しています。Nuxt.jsに慣れないうちは、特有のアーキテクチャや機能に適応するのに時間がかかります。

Nuxtはまた、ツール、ライブラリ、プラグインの膨大なエコシステムを提供しています。これらのオプションに精通することは、最初の学習曲線に追加することができます。

限られたエコシステム

ReactやAngularのような他の主要フレームワークとは異なり、Nuxtは比較的若い。そのため、サードパーティのライブラリやプラグインのエコシステムはまだ成長中だ。

特定の状況で特定の要件を満たすために、カスタムソリューションを構築する必要がある。

サーバーサイド・レンダリングの複雑さ

サーバーサイド・レンダリング(SSR)はNuxt.jsの強力な機能ですが、アプリ開発をより複雑にする可能性があります。より単純なレンダリング手法に比べ、SSRは学習曲線が急です。

また、SSRを効果的に実装するには、データフェッチとアプリケーションの状態を慎重に計画・管理する必要がある。

このため、サーバー上で最初にレンダリングされたコンテンツと、クライアント上でレンダリングされた最終的なインタラクティブ・バージョンとの間に、潜在的なエラーや不整合が生じる可能性がある。

Back4appでのNuxt.jsアプリケーションのビルドとデプロイ

Back4Appを使ったNuxtアプリの構築とデプロイ方法をより深く理解するために、連絡先管理アプリを構築します。

このアプリは、ユーザーが連絡先情報を作成、表示、削除できるようにし、ネットワーク連絡帳を整理して簡単にアクセスできるようにします。

このプロジェクトのバックエンドには、Back4appに内蔵されているPostgreSQLデータベースを使い、名前、Eメール、電話番号、会社などの連絡先情報を保存します。

このプロセスは、Back4AppのAIエージェントの助けを借りて簡単になります。

プロジェクトのフロントエンドでは、Nuxt.jsを使用してアプリのUIを作成します。その後、Back4App Containersを使ってNuxtフロントエンドをデプロイする前に、Parse SDKを使ってフロントエンドとバックエンドを接続する。

始めよう。

Nuxt.jsアプリケーションのバックエンドを作成する

Nuxtアプリを作成する最初のステップは、バックエンドを準備することです。

Contactsアプリケーションのバックエンドを作成するには、Back4Appのウェブサイトにアクセスし、ログイン後、”Build New App“をクリックして新規アプリケーションを作成します。

Back4appアプリのダッシュボード

下の画像のように、新しいアプリケーションを構築した後に表示される “Backend as a Service“オプションを選択する。

Back4app BaasとCaaS

アプリケーションに名前を付け、データベースに使用するPostgreSQLオプションを選択します。

B4A DB

CREATE“ボタンをクリックした後、Back4appはデータベースを含むアプリケーションのセットアップに少し時間がかかります。

すべての準備が整うと、下の画像のように自動的にアプリケーションに移動します。

Back4appブラウザ。

アプリに使用するPostgreSQLデータベースの設計を行うには、Back4appのAIエージェントに移動し、以下のプロンプトを入力します。

Create database tables in my Back4app app; do you need me to provide any information?
Back4app AIエージェントプロンプト

データベースをセットアップするために、AIエージェントは必要なもののリストを生成します。このリストには、アプリケーションのユニークキーやデータの構造(スキーマ)のような詳細が含まれます。

AIエージェントにアプリのキーを渡した後、AIエージェントにデータベーススキーマを渡します。私たちが構築しているコンタクトアプリケーションでは、以下のようなスキーマにする必要があります:

1. Contact Class:
Class Name: Contact

Fields:
objectId (String, Automatically generated by Back4App).
name (String, Required)
email (String, Required)
phone (String, Required)
address (String, Required)
company (String, Optional)

上記の情報をエージェントに渡した後、データベースをナビゲートしてコンタクトクラスと関連フィールドが作成されたかどうかを確認することができます。

Back4appブラウザ

次に、以下のプロンプトを使用して、AIエージェントにデータベースにテストデータを入力するよう促します。

Populate my contact database with some test data with around 10 test contacts with variations in their information.
Back4app ログ

さて、これでテストデータが揃った。

Back4appデータベースへの登録

クラウド・コードの作成

Back4Appのクラウド・コード機能では、カスタムJavaScriptコードをBack4Appのサーバー上で直接実行することができます。

この機能により、モバイルアプリやウェブサイトの処理負荷を軽減することができます。また、クラウドコードはBack4Appのセキュアなサーバー上で実行されるため、データやアプリケーションをセキュリティの脆弱性から保護することもできます。

これで、連絡先が登録されたテストデータベースができました。

このセクションでは、アプリケーションに特定の機能を実装するためのクラウド・コードの作成方法を学びます:

  • すべての連絡先を表示
  • 新しいコンタクトの作成
  • 連絡先の削除

これらの機能はBack4App AI Agentを使って実装します。さっそく始めましょう。

ライブラリからすべての書籍を取得するには、Back4App AIエージェントに以下のプロンプトを表示し、必要なクラウドコードを生成させます。

Develop a cloud code function named "getContacts" to retrieve all contacts 
from the database. The function should return an array containing objects
representing a contact instance with its associated keys and values.
Back4app AIエージェントプロンプト

次に、Back4App AIエージェントに新しい連絡先を作成させます:

Generate a cloud code function named “createContact” that takes in the necessary arguments to create a new contact in the Contact class.
Back4app AIエージェントプロンプト

最後に、Back4App AIエージェントに以下のプロンプトを表示し、データベースから連絡先を削除する機能を作成します。

Create a cloud code function "deleteContact" that deletes a contact from the Contact class based on the provided "objectId." If the deletion is successful, return a message indicating success. If there's an error, return an error message.
Back4app AIエージェントプロンプト

エージェントがクラウド関数を正しく生成したかどうかを確認するには、このナビゲーションパスの最後にあるmain.jsファイルを確認してください。

Back4app dashboard → Cloud Code → Functions & Web Hosting → cloud → main.js.

Back4app Cloud コード

同じmain.jsファイルに定義した3つの関数が表示され、クラウド関数が正しく作成されていることが確認できるはずだ。

アプリケーションのフロントエンドを構築する

作成したすべてのクラウド・コード関数と対話するフロント・エンドを作成する。Nuxt.jsを使ってフロントエンドを作成する。

フロントエンドの開発を始めるには、お好きなディレクトリのターミナルで以下のコードをシリアルに実行してください:

npx nuxi init b4a_nuxt_app
cd b4a_nuxt_app
npm install

これらのコードにより、b4a_nuxt_appを名前とするNuxtアプリケーションが初期化され、アプリケーションが正しく機能するために必要なパッケージと依存関係がすべてインストールされます。

ターミナルで上記のコマンドを実行した後、アプリケーションのスタイルを整えるためにいくつかのnpmパッケージをインストールします。ターミナルで以下のnpmコマンドを連続して実行し、これらのパッケージをインストールします:

npm install sass
npm install -D tailwindcss postcss autoprefixer

上記のコード行は、CSSプリプロセッサであるSASSと、ユーティリティCSSフレームワークであるTailwindCSSをインストールします。これらのパッケージを利用することで、アプリケーションを素早くスタイリングすることができます。

次に、以下のコマンドを実行して、アプリケーションにTailwindCSSを設定します:

npx tailwindcss init

上記のコードは、Nuxtアプリケーションのルートディレクトリにtailwind.config.jsファイルを作成します。

このtailwind.config.jsファイルは、Nuxt.js内でTailwind CSSを統合するための中心的な設定ポイントです。このファイルにより、Tailwind CSSの様々な側面をカスタマイズし、特定のプロジェクトの要件に適合させることができます。

お好みのテキストエディタ(VSCode、Eclipse、Sublime Text)でアプリケーションを開きます。tailwind.config.jsファイルに移動し、以下のコードブロックのように構成します:

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
export default {
  content: [
    "./components/**/*.{js,vue,ts}",
    "./layouts/**/*.vue",
    "./pages/**/*.vue",
    "./plugins/**/*.{js,ts}",
    "./app.vue",
    "./error.vue",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
};

上記のコードブロックのコンテンツ配列には、Tailwind CSSがユーティリティクラスを生成するために監視するファイルパスが格納されています。

次に、アプリのルート・ディレクトリにassetsフォルダを作成します。そのフォルダーの中に、アプリケーションにスタイルを追加するためのmain.scssファイルを作成します。main.scssファイルに以下のコードを貼り付けます:

/* main.scss */
@import url("<https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap>");
@import url("<https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap>");

@tailwind base;
@tailwind components;
@tailwind utilities;

body {
  background-color: #f2f2f2;
}

.montserrat {
  font-family: "Montserrat", sans-serif;
}

.roboto {
  font-family: "Roboto", sans-serif;
}

上記のコードブロックは、2つの異なるGoogle Fontsをインポートし、要素をスタイリングするためのTailwind CSSを統合し、ウェブアプリケーションの背景色をライトグレーに設定し、インポートしたフォントを効率的に適用するためのカスタムクラスを定義しています。

このmain.scssファイルは、ウェブアプリケーションのビジュアル・スタイルを構築するための強固なベースとなります。

Nuxtアプリの設定を格納するnuxt.config.tsファイルに、以下のコードを貼り付けます:

// nuxt.config.ts
export default defineNuxtConfig({
  devtools: { enabled: true },
  postcss: {
    plugins: {
      tailwindcss: {},
      autoprefixer: {},
    },
  },
  css: ["~/assets/main.scss"],
  ssr: false,
});

Nuxt 設定ファイルで、main.scssファイルを Nuxt アプリケーションが使用する唯一の CSS ファイルとして定義しました。また、Nuxt アプリケーションの Server Side Rendering を無効にしました。

Nuxtはファイルベースのルーティング・システムを通じて自動的にルーティングを処理し、アプリケーションの設定も終わったので、さまざまなウェブページの作成に向かうことができます。

このアプリケーションのユーザー・インターフェースを構築するために、プロジェクト・ルートにあるpagesフォルダ内に3つのページを作成します。これらのページは

  • index.vue:アプリケーションの目的を紹介するトップページです。
  • contactForm.vue:このページでは、ユーザが新しい連絡先を作成し、データベースに保存することができます。
  • contactsList.vue:このページは、データベースに保存されているすべての連絡先を一覧表示します。

次に、index.vueファイルに以下のコードを貼り付ける:

// index.vue
<template>
  <div class="welcome montserrat flex flex-col gap-8 items-center mt-10">
    <h1 class="text-4xl">Welcome to {{ appName }}!</h1>
    <p class="text-[#888888] font-md text-md w-1/2">
      This application helps you manage your contacts. You can view existing
      contacts, add new ones, and keep your contact information organized.
    </p>
    <NuxtLink to="/contactForm">
      <button
        class="px-4 py-2 hover:bg-[#333333] hover:text-white rounded-lg font-medium"
      >
        Add Contact
      </button>
    </NuxtLink>
  </div>
</template>

<script setup>
const appName = "Contact Book";
</script>

<style scoped>
.welcome {
  text-align: center;
  padding: 2rem;
}
</style>

このコードブロックは、連絡先管理アプリケーションのウェルカムページを作成します。

タイトル、アプリの目的の説明、コンタクトフォームのページに移動するためのボタンが表示されます。このコードブロックでは、アプリケーションをスタイリングするためのTailWindクラスも定義しています。

また、contactForm.vueファイルに以下のコードを貼り付けます:

<template>
  <div>
    <p class="montserrat text-2xl font-medium text-center">
      Fill the form below to create a contact
    </p>
    <form
      @submit.prevent="createContact"
      class="flex flex-col gap-8 items-center mt-10"
    >
      <input
        v-model="contact.name"
        type="text"
        placeholder="Name"
        required
        class="w-1/2 p-3 hover:shadow-lg outline-none montserrat"
      />
      <input
        v-model="contact.email"
        type="email"
        placeholder="Email"
        required
        class="w-1/2 p-3 hover:shadow-lg outline-none montserrat"
      />
      <input
        v-model="contact.phone"
        type="tel"
        placeholder="Phone"
        required
        class="w-1/2 p-3 hover:shadow-lg outline-none montserrat"
      />
      <input
        v-model="contact.address"
        type="text"
        placeholder="Address"
        required
        class="w-1/2 p-3 hover:shadow-lg outline-none montserrat"
      />
      <input
        v-model="contact.company"
        type="text"
        placeholder="Company"
        class="w-1/2 p-3 hover:shadow-lg outline-none montserrat"
      />
      <div>
        <button
          class="px-4 py-2 hover:bg-[#333333] hover:text-white rounded-lg font-medium"
          type="submit"
        >
          Submit
        </button>
      </div>
      <p v-if="message" :class="{ error: isError }">{{ message }}</p>
    </form>
  </div>
</template>

<script setup>
import { ref } from "vue";

const contact = ref({
  name: "",
  email: "",
  phone: "",
  address: "",
  company: "",
});
const message = ref("");
const isError = ref(false);

</script>

<style>
.error {
  color: red;
}
</style>

上のコードブロックは、アプリのユーザーが連絡先を作成・保存するためのフォームの構造を定義しています。以下がキーポイントです:

フォーム要素は、さまざまな入力フィールドを使用して連絡先の詳細(名前、電子メール、電話、住所、会社)をキャプチャします。

各入力フィールドは、コンタクトオブジェクト(Vモデル)のプロパティにリンクされ、バリデーションに適切な入力タイプを使用します。

送信ボタンは、次のセクションで実装するcreateContact関数をトリガーします。メッセージエリアは、message変数とisError変数に基づいてフィードバック(成功またはエラー)を表示します。

このコードブロックでは、Vueのrefを使って3つのリアクティブ変数を作成している:

  • コンタクト入力された連絡先情報を保存します。
  • メッセージ:ユーザーへのフィードバックメッセージを保持する。
  • isError:メッセージがエラーを表しているかどうかを示します。

簡単なスタイル・ルールは、コード・ブロック内の.errorクラスを使ってエラー・メッセージの外観を定義します。

また、contactsList.vueファイルに以下のコードを貼り付けます:

<template>
  <div class="px-8">
    <p class="montserrat text-3xl font-medium mb-10">Your Contacts</p>
    <div class="grid grid-cols-3 gap-5 items-center justify-center">
      <div
        v-for="contact in contacts"
        :key="contact.objectId"
        class="contact montserrat bg-[#FFFFFF] hover:shadow-lg mb-4 rounded-lg 
				        flex flex-col gap-3 p-3 w-11/12 items-center"
      >
        <p class="text-lg">Name: {{ contact.name }}</p>
        <p class="text-lg">Email: {{ contact.email }}</p>
        <p class="text-lg">Phone: {{ contact.phone }}</p>
        <p class="text-lg">Address: {{ contact.address }}</p>
        <p class="text-lg">Company: {{ contact.company }}</p>
        <div class="mt-5">
          <button
            @click="deleteContact(contact.objectId)"
            class="px-4 py-2 hover:bg-[#333333] hover:text-white rounded-lg font-medium"
          >
            Delete
          </button>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from "vue";

const contacts = ref([]);
</script>

上のコード・ブロックは、アプリケーションの連絡先のリストを表示します。キーポイントは以下の通りです:

このコードブロックは、「Your Contacts」というタイトルのセクションを作成し、連絡先を表示するためにレスポンシブグリッドレイアウト(3カラム)を使用します。

v-forを使用して連絡先配列をループし、各連絡先の情報(名前、電子メール、電話、住所、会社)を表示します。

各コンタクト・エントリには、deleteContact関数をトリガーする “Delete “ボタンがあります。

このコード・ブロックは、コンタクト・リストを格納するためにリアクティブ配列(contacts)を利用している。これにより、データの変更に応じてUIが動的に更新されます。contacts配列には、Back4appデータベースから取得したデータが格納されます。

ルート・ディレクトリにあるapp.vueファイルに以下のコードを貼り付けて、これらすべてのページへのルートをインクルードします。

<template>
  <div>
    <NuxtLayout>
      <header class="flex justify-between p-8 roboto font-light">
        <NuxtLink to="/">
          <p class="text-2xl">Contact Book</p>
        </NuxtLink>

        <nav class="flex gap-5 text-md">
          <NuxtLink to="/contactsList" class="hover:text-[#888888]"
            >Contacts</NuxtLink
          >
          <NuxtLink to="/contactForm" class="hover:text-[#888888]"
            >Add Contact</NuxtLink
          >
        </nav>
      </header>
      <main>
        <NuxtPage />
      </main>
    </NuxtLayout>
  </div>
</template>

このコードブロックは、Nuxt アプリケーションの全体的なレイアウトを コンポーネントで定義します。

このコードブロックには、contactsList.vueとcontactForm.vueページへのリンクを持つ水平ナビゲーションメニューがあります。

このコードブロックには コンポーネントも含まれています。これはNuxt.jsの重要なコンポーネントで、現在のページのコンテンツを動的にレンダリングします。

これにより、アプリケーション内でのユーザーのナビゲーションに基づいて、アプリケーションが適切なコンテンツを表示するようになります。

アプリケーションのフロントエンドとバックエンドをつなぐ

NuxtコンタクトアプリケーションをBack4appデータベースとバックエンドインスタンスに接続するには、Parse SDKをインストールする必要があります。

Parse SDKはフロントエンドのアプリケーション(ユーザーインターフェース)とBack4Appのバックエンドの橋渡しをし、Back4Appのデータベースやクラウド機能とのやり取りを可能にします。

Parse SDKをインストールするには、ルートディレクトリのターミナルで以下のコマンドを実行します:

npm install parse

インストール後、以下の情報を取得してParseを初期化する必要があります:

  • アプリケーションID
  • JavaScriptキー
  • Back4appサーバーURL

この情報は、Back4appアプリケーションのダッシュボードにある「セキュリティとキー」から取得できます。アプリIDとJavaScriptキーはアプリケーション内に安全に保管してください。

次に、app.vueファイルを修正して、アプリケーションでParseを初期化します:

<template>
<!--   Previous Content -->
</template>

<script setup>
import Parse from 'parse';

// Initialize Parse SDK
Parse.initialize('YOUR_APP_ID', 'YOUR_JAVASCRIPT_KEY');
Parse.serverURL = '<https://parseapi.back4app.com>';
</script>

また、contactForm.vueとcontactsList.vueファイルを修正して、クラウド・コードの関数をアプリケーションのフロントエンドに接続します。

contactForm.vueページに以下のコードを貼り付けます:

<template>
<!--   Previous Content -->
</template>

<script setup>
import { ref } from 'vue';
import Parse from 'parse';

const contact = ref({
  name: '',
  email: '',
  phone: '',
  address: '',
  company: '',
});
const message = ref('');
const isError = ref(false);

const createContact = async () => {
  try {
    await Parse.Cloud.run('createContact', { ...contact.value });
    message.value = 'Contact created successfully!';
    isError.value = false;
    
    contact.value = { name: '', email: '', phone: '', address: '', company: '' };
  } catch (error) {
    message.value = `Error: ${error.message}`;
    isError.value = true;
  }
};
</script>

<style>
.error {
  color: red;
}
</style>

上記のコードブロックは、新しい連絡先を作成するロジックのクラウドコード関数をNuxtアプリケーションに接続します。

連絡先情報を保存するためにバックエンドと相互作用し、操作の成否に基づいてユーザーにフィードバックを提供する。

このコードブロックは(try-catchブロックを使って)Parse SDKを使ってBack4Appサーバー上でcreateContactという名前の関数を実行しようとしています(await Parse.Cloud.run('createContact', {...contact.value}) )。これにより、コンタクト情報(contact.value)がBack4Appサーバーに送信され、保存されます。

保存に成功すると、「コンタクトの作成に成功しました!」というメッセージが表示され、フォームがクリアされ、コンタクトオブジェクトがリセットされ、新しい入力が可能になります。

ただし、エラーが発生した場合は、テンプレート・リテラル(${error.message})を含むサーバーからの詳細を含む、有益なエラー・メッセージが表示される。

以下のコードをcontactsList.vueファイルに貼り付けます:

<template>
  <!--   Previous Content -->
</template>

<script setup>
import { ref, onMounted } from "vue";
import Parse from "parse";

const contacts = ref([]);

const fetchContacts = async () => {
  try {
    contacts.value = await Parse.Cloud.run("getContacts");
  } catch (error) {
    console.error("Failed to fetch contacts", error);
  }
};

const deleteContact = async (objectId) => {
  try {
    await Parse.Cloud.run("deleteContact", { objectId });
    contacts.value = contacts.value.filter(
      (contact) => contact.objectId !== objectId,
    );
  } catch (error) {
    console.error("Failed to delete contact", error);
  }
};

onMounted(fetchContacts);
</script>

上記のコードは、アプリケーションの連絡先の取得と削除を管理します。このコードはBack4App Backendと連動し、データの保存と取得を行います。

このコードブロックは2つの重要な機能を定義している:

  • fetchContactsこの非同期関数はバックエンドから連絡先のリストを取得します。Parse.Cloud.run('getContacts')を使い、Back4Appサーバーのクラウドコード関数 “getContacts “を呼び出します。取得した連絡先は、contactsという名前のリアクティブ配列に格納されます。
  • deleteContactこの非同期関数は、特定のコンタクトを削除します。引数として、バックエンドデータベース内のコンタクトの一意な識別子であるobjectIdを取ります。この関数は、Parse.Cloud.run('deleteContact', { objectId }) を使用して、削除するobjectIdを渡して “deleteContact” というクラウド・コード関数を呼び出します。成功すると、コードはローカルのコンタクト配列をフィルタリングして、削除されたコンタクトを削除します。

アプリケーションのフロントエンドとバックエンドの接続が完了したら、以下のnpmコマンドを実行してアプリケーションをプレビューできる。

npm run dev

Nuxt Nitro サーバーがロードされていることがわかります。ロード後、アプリケーションは URLhttp://localhost:3000/。URL に移動すると、以下の画像のような画面が表示されます。

連絡帳アプリ

連絡先ページに移動すると、連絡先の配列が表示されます。これらの連絡先は、Back4appバックエンド作成時にBack4app AI Agentが作成したダミーデータです。

連絡帳アプリ

連絡先の追加リンクをクリックすると、新しい連絡先の詳細を入力するフォームが表示されます。例えば

お問い合わせ

Submit “ボタンをクリックすると、フィールドがはっきりと表示されます。連絡先のページに移動すると、新しく作成された連絡先が表示されます。

お問い合わせ

完全に構築されたWebアプリケーションをデプロイする

以下はNuxtアプリのデプロイ手順です。アプリケーションのビルドとテストが完了したら、Back4appコンテナを使ってNuxtアプリケーションをデプロイし、アプリを公開します。

デプロイプロセスを早めるために、Back4app AI Agentに以下の指示を促します:

Give me simplified steps to deploy my Nuxt application with Back4app containers
AIエージェントのプロンプト

以下のような手順が表示されるはずだ。

Containerize Your Application (Create a Dockerfile)
Build and Push Docker Image
Configure Deployment
Deploy Your Container

アプリケーションをDocker化するには、ルート・ディレクトリにDockerfileと .dockerignoreファイルを作成し、以下のスクリプトを貼り付けます。

Dockerfileにある:

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
RUN npm run build
CMD [ "npm", "run", "start" ]

また、.dockerignoreファイルに

node_modules
.nuxt

DockerfileにはDockerイメージの構築手順が含まれています。Dockerファイルには、必要なアプリの依存関係のインストール手順が含まれています。

.dockerignoreファイルはシンプルなテキストファイルで、イメージを構築する際に除外するファイルやフォルダをDockerに指示するパターンを列挙しています。

さて、アプリケーションの docker イメージをビルドするには、ターミナルで以下の docker コマンドを実行する:

docker build -t b4a_contacts_app .

Back4appにアプリケーションをデプロイする前に、GitHubアカウントにアプリケーションをプッシュしてください。アプリケーションをプッシュしたら、GitHubアカウントとBack4appを統合してください。

これはBack4appのGithubアプリで可能です。GitHubとBack4appを統合したら、アプリケーションをデプロイしましょう。

Back4app のダッシュボードから Containers ページに移動します。

Back4appのバックエンドとコンテナの選択

次に、画面上の “Create New App “ボタンをクリックします。デプロイしたいリポジトリを選択し、b4a_contacts_appという名前を付けてアプリケーションを作成します。デプロイが完了するまで、しばらく時間がかかるはずです。

Back4appコンテナログ

デプロイ後、ライブアプリはこのURL(https://b4acontactsapp1-5990olnw.b4a.run/)で利用できるようになるはずだ。

コンタクトブック導入

結論

この記事では、Nuxt.jsアプリケーションとPostgreSQLデータベースをBack4appエコシステム内でビルドし、デプロイする方法を学びました。

また、Nuxt.jsでWebアプリケーションを構築するメリットとデメリットについても学びました。

Back4AppのAIエージェントを使ったクラウドコードの機能構築やデータベースの設計から、Back4Appバックエンドのローコードでユーザーフレンドリーなインターフェースの理解まで。

また、Back4App Containersを使用してNuxtアプリケーションをデプロイし、Back4Appが提供するアプリ開発を効率化するツールの数々にも慣れ親しんでいただきました。

このツールの組み合わせで、ウェブ・アプリケーションの迅速な構築とデプロイが可能になる。

AIエージェントがどのように機能するのか、アプリ開発の効率化について詳しく知ることができます。


Leave a reply

Your email address will not be published.