最終更新日: 2023年08月15日

サーバーエンジン

Nuxt 3は新しいサーバーエンジンであるNitroによって動作しています。

  • Node.js、ブラウザ、サービスワーカーなど、さまざまなプラットフォームに対応しています。
  • サーバーレスのサポートもデフォルトで提供されています。
  • APIルートサポート。
  • 自動的なコード分割と非同期読み込みされるチャンクに対応しています。
  • 静的サイトとサーバーレスサイトのハイブリッドモードに対応しています。これにより、静的な部分と動的な部分を組み合わせたウェブサイトを構築することができます。
  • ホットモジュールリローディングを備えた開発用サーバーが提供されています。これにより、コードの変更を即座に反映させながら開発を行うことができます。

APIレイヤー

Nitroによって追加されるサーバーのAPIエンドポイントとミドルウェアは、内部的にh3を使用しています。

主な特徴には次のようなものがあります:

  • ハンドラ(処理が発生した時にプログラム処理を中断して要求に応じて呼び出されるプログラム)は、自動的に処理されるJSONレスポンスのために直接オブジェクト/配列を返すことができます。
  • ハンドラは、プロミスを返すことができます。返されたプロミスは待機されます(res.end()とnext()もサポートされています)。
  • ボディの解析、クッキーの処理、リダイレクト、ヘッダーなどのためのヘルパー関数が用意されています。

詳細はh3のドキュメントを参照してください。

直接的なAPI呼び出し

Nitroでは、グローバルに利用可能な$fetchヘルパーを介してルートを「直接」呼び出すことができます。これにより、ブラウザ上で実行される場合はサーバーに対してAPI呼び出しが行われますが、サーバー上で実行される場合は関連する関数が直接呼び出され、追加のAPI呼び出しが省略されます。

$fetch APIはofetchを使用しており、主な特徴は次のとおりです:

  • JSONレスポンスの自動的なパース(必要に応じて生のレスポンスへのアクセスも可能)
    ※パースとはデータを解析し、データの構造の集合体に変換すること
  • リクエストボディとパラメーターは自動的に処理され、適切なContent-Typeヘッダーが設定されます。

$fetchの詳細な機能については、ofetchを確認してください。

型付きのAPIルート

APIルート(またはミドルウェア)を使用する際、Nitroは、レスポンスを送信するためにres.end()を使用する代わりに値を返す場合に、これらのルートのために型情報を自動生成します。

$fetch()やuseFetch()を使用する際に、これらの型情報にアクセスすることができます。

スタンドアロンサーバー

Nitroは、node_modulesに依存しない独立したスタンドアロンサーバーのディストリビューションを生成します。

Nuxt 2のサーバーはスタンドアロンではなく、nuxt start(nuxt-startまたはnuxtディストリビューションを使用)を実行するか、カスタムのプログラムで使用する必要があります。これは脆弱で故障しやすく、サーバーレスやサービスワーカーの環境には適していません。

Nuxt 3では、nuxt buildコマンドを使用して.outputディレクトリにビルドすると、このようなディストリビューションが生成されます。

Nuxt 3の出力には、実験的なブラウザサービスワーカーを含むあらゆる環境でNuxtサーバーを実行し、静的ファイルを提供するためのランタイムコードが含まれており、これによりJAMstack向けの真のハイブリッドフレームワークになっています。さらに、Nuxtはネイティブのストレージレイヤーを実装しており、複数のソースドライバーやローカルアセットをサポートしています。