Next.jsのチュートリアルをやってみる【準備編】

初めに

Webアプリ開発では近年Next.jsがトレンドのようなので自己学習のためにチュートリアルをやってみます。基本的には翻訳した内容となるのでご了承ください。

JavaScriptやReactの前提知識が必要となるため、Reactが初めての方はこちらの記事で理解を深めておくことをお勧めします。

Next.js公式のReactチュートリアルをやってみる Next.js公式のReactチュートリアルをやってみる

チュートリアルの内容

Next.jsのチュートリアルでは簡易版財務ダッシュボードアプリをフルスタックで作ることができ、ダッシュボードは以下の機能を持ちます。

  • 公開ホームページ
  • ログインページ
  • 認証で保護されたダッシュボードページ
  • ユーザーによる請求書の追加、編集、削除機能

また、このダッシュボードアプリではデータベースも使用します。

機能内容
スタイリングNext.jsでアプリケーションをコーディングする様々な方法
最適化画像、リンク、フォントの最適化する方法
ルーティングファイルシステムのルーティングを使用して、ネストされたレイアウトとページを作成する方法
データフェッチVercelでデータベースをセットアップする方法とフェッチと配信のベストプラクティス
検索とページネーションURL Search Paramsを使用した検索とページネーションの実装方法
データの変異React Server Actionsを使用してデータを変異させ、Next.jsキャッシュを再検証する方法
エラー処理一般的なエラーと404 not found エラーの処理方法
フォーム検証とアクセシビリティサーバーサイドでのフォーム検証の方法とアクセシビリティ向上のヒント
認証NextAuth.jsとミドルウェアを使用してアプリケーションに認証を追加する方法
メタデータメタデータを追加し、ソーシャル共有のためにアプリケーションを準備する方法
学べる機能や概念

プロジェクトの作成

パッケージマネージャーの選定

npmやyarnよりもpnpmのほうが高速で効率的なので、Next.jsはpnpmをお勧めしているようです。未インストールの方は公式に習ってpnpmをグローバルでインストールして使用しましょう。

Terminal
npm install -g pnpm

Next.jsアプリの作成

アプリを作成するディレクトリでターミナルを開いて以下のコマンドを入力しましょう。Next.jsアプリケーションをセットアップするcreate-next-appを使用します。--exampleフラグにはNext.js公式のスターターサンプルを指定しています。

Terminal
npx create-next-app@latest nextjs-dashboard --example "https://github.com/vercel/next-learn/tree/main/dashboard/starter-example" --use-pnpm

プロジェクトの内容確認

Next.jsのスターターサンプルを使用してセットアップを行ったため、すでに様々なコードが書かれています。今回の目的は『アプリケーションの開発』ではなく『学習』なので、学習に集中できるようにコードを用意したようです。

それでは用意されたnextjs-dashboardフォルダの中身を確認していきましょう。

フォルダ構造

フォルダ・ファイル等内容
/appすべてのルート、コンポーネント、ロジックが含まれていて、基本的にはこの中で作業することになります。
/app/lib再利用可能なユーティリティ関数やデータフェッチ関数等、アプリケーションで使用される関数が含まれています。
/app/uiカード、テーブル、フォームなど、アプリケーションのすべてのUIコンポーネントが含まれています。今回はスタイル設定済み。
/public画像など、アプリケーションのすべての静的アセットが含まれています。
Config Filesnext.config.js等の設定ファイル。create-next-appを使用してプロジェクトを開始するときに作成される。今回は事前に設定されているため修正不要です。
Next.jsチュートリアルスターターサンプルのフォルダ構造

プレースホルダー・データ

UIを構築する際はプレースホルダー・データがあると便利な模様。データベースやAPIがまだ利用できない場合は以下の方法で用意することが可能です。

  • JSON形式もしくはJavaScript オブジェクトとして使用する
  • mockAPIのようなサードパーティ・サービスを使用する

スターターサンプルではapp/lib/placeholder-data.tsにデータが用意されています。このファイル内の各JavaScriptオブジェクトはデータベースのテーブルを表しています。

データベースのセットアップの章では、このデータを使用してデータベースのシードを行います。

TypeScript

ファイルの拡張子が.js.jsxではなく、.ts.tsxであることに気が付いたと思います。ほとんどのプロジェクトではJavaScriptではなくTypeScriptで書かれているため、このチュートリアルでもTypeScriptを使用しています。

基本的にはJavaScriptと似ていますが、静的型付け言語であるのが特徴です。/app/lib/definitions.tsファイルを見てみましょう。

/app/lib/definitions.ts
export type Invoice = {
  id: string;
  customer_id: string;
  amount: number;
  date: string;
  status: 'pending' | 'paid';
};

静的型付け言語を使用したことのある方はわかると思いますが、stringは文字を表す『文字列』、numberは文字通り『数値』を表しています。statusプロパティが特殊で|で区切られていますが、これはユニオン型と呼ばれます。

これはstatusプロパティには"pending"もしくは"paid"のどちらかしか指定できないように絞り込むことができます。今回は両方文字列なのでstringの絞り込みですが、異なる型を指定することも可能です。

このようにTypeScriptを使用することで、コンポーネントやデータベースに間違ったデータ形式を渡さないように防ぐことができます。JavaScriptだと請求書の金額を表す数値型のamountに文字列を渡すということが起こりえるのです。

ORM

Next.jsのチュートリアルではデータ型を手動で宣言していますが、型の安全性を高めるために、データベーススキーマに基づいて型を自動生成するPrismaDrizzleを使用することを推奨しているようです。

開発者用サーバーの起動

コードの確認が終わったところで、pnpm iを実行し、パッケージのインストールを行いましょう。

その後、pnpm devを実行して開発者用サーバーを起動します。
開発者用サーバーのポート番号は3000となっているため、ブラウザでhttp://localhost:3000にアクセスしてホームページを確認してみましょう。

以下の内容と右矢印が表示されているページが表示されれば準備完了です。

Welcome to Acme. This is the example for the Next.js Learn Course, brought to you by Vercel.

Log in

次の記事

Next.jsのチュートリアルをやってみる【CSS編】

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です