Published on

Next.jsメモ

ライブラリとフレームワークの違い

image.png (30.0 kB)
image.png (30.0 kB)

ライブラリは、部品を借りて使うもの。
開発者は、いつ・どこで・なにを・どのように使うかを決める。

フレームワークは、仕組みに乗って動くもの。
開発者は、フレームワークのルール(どの場所にファイルを置くか、どんな関数名にするか)に従ってコードを書く必要がある。

React、Node.js、Next.jsの関係

(自分が経験のある.NETに置き換えたものも載せておく)

Reactは、UIをつくるためのライブラリ。
.NETでいえばBlazorのUI部品に相当する。

Node.jsは、サーバー上でJavaScritを動かすための実行環境。
Next.jsなどのフレームワークを実行する土台となる。
.NETでいえば.NETランタイムに相当する。

Next.jsは、Reactを使ってWebアプリを作るためのフレームワーク。
ルールに従って書くだけでルーティングやSSR(サーバーサイドレンダリング)が自動で動く。
.NETでいえばASP.NET Coreに相当する。

npmコマンド

Node.jsのためのパッケージ管理ツール。
.NETでいえばNuGetに相当する。

npm install reactでReactをプロジェクトに導入する。

npxコマンド

npmでインストールできるパッケージを一時的に実行するためのコマンド。
パッケージをグローバルにインストールせずにその場で実行できるのが特徴。

npx create-next-app myappでNext.jsのセットアップツールを実行し、myappというアプリを作成できる。
.NETでいえばdotnet newコマンドでテンプレートを実行するのに近いイメージ。

Reactプロジェクトの中身

npx create-react-appを実行するとカレントディレクトリに作成されるデータ

image.png (21.8 kB)
image.png (21.8 kB)

node_modulesフォルダ

image.png (21.8 kB)
image.png (21.8 kB)

アプリで使うライブラリ類。
プロジェクトから参照するパッケージ類がまとめて保存されている。
npmプロジェクトでは必ず作成される。開発者が直接操作することはない。

publicフォルダ

image.png (21.8 kB)
image.png (21.8 kB)

外部に公開されるファイル。
index.htmlやロゴの画像ファイルなどがまとめてある。

srcフォルダ

image.png (21.8 kB)
image.png (21.8 kB)

Reactのプログラムがまとめられているところ。

index.html

image.png (21.8 kB)
image.png (21.8 kB)

Webページのファイル。
このファイルで用意されるWebページにReactコンポーネントが組み込まれる。
<div id="root">にReactコンポーネントが組み込まれる。組み込み処理はsrc/index.jsで行う。

image.png (161.7 kB)
image.png (161.7 kB)

index.js

image.png (21.8 kB)
image.png (21.8 kB)
image.png (87.0 kB)
image.png (87.0 kB)

Reactアプリケーションで最初に実行されるファイル。

はじめに、importで必要なライブラリやファイルを読み込む。
Reactなどのフロントエンドフレームワークでは、あるコンポーネントから別のコンポーネントを読み込んで使うことがよくある。

次に、Reactアプリを表示する。
const root = ReactDOM.createRoot(document.getElementById('root'));では、HTMLファイルのid="root"という要素を見つけて、そこにReactアプリを表示する。
そして、root.render()で実際にReactアプリを画面に表示する。
<App />がメインのコンポーネントで、これが画面に表示される内容。

reportWebVitals();は性能測定のための機能を有効化する処理で、不要なら削除して問題ない。

App.js

image.png (21.8 kB)
image.png (21.8 kB)
image.png (85.6 kB)
image.png (85.6 kB)

Reactアプリケーションのメインコンポーネント。

function App()でAppという名前の関数(コンポーネント)を定義する。
return()内でこのコンポーネントが表示する内容を返す。

exportでこのコンポーネントを他のファイルから使えるようにする。

Next.jsプロジェクトの中身

image.png (19.6 kB)
image.png (19.6 kB)

フォルダの役割はReactプロジェクトと同等。
srcフォルダがないが、appフォルダにソースコードを格納する。

appフォルダにはアプリ全体のレイアウトを決めるlayout.tsxがあり、各フォルダーごとに表示するページのpage.tsxがある。
全てのページはlayout.tsxのレイアウトp内にpage.tsxのコンテンツが組み込まれる形で表示される。

layout.tsx

image.png (147.3 kB)
image.png (147.3 kB)

layouts.tsxは、Next.jsアプリケーション全体の骨組みを定義する重要なファイル。
前ページ共通の設定として

  • フォント設定
  • メタデータ
  • グローバルスタイル
    の情報を保持する。

30行目の{children}の部分に各ページ(page.tsx)の内容が自動挿入される。

pages.tsx

前述したReactのコンポーネント関数とほぼ同じ。