Open9
Next.js(React)駆け出しメモ
本格的なWebアプリを作っていくためにNext.js(React)を勉強しながら作ってみます!
まずは… npm
を最新化
brew upgrade npm
npm --version
10.9.0
Installation
npx
コマンドを使ってプロジェクトを作成
npx create-next-app@latest
✔ What is your project named? … my-app
✔ Would you like to use TypeScript? … No / Yes
✔ Would you like to use ESLint? … No / Yes
✔ Would you like to use Tailwind CSS? … No / Yes
✔ Would you like to use `src/` directory? … No / Yes
✔ Would you like to use App Router? (recommended) … No / Yes
✔ Would you like to use Turbopack for next dev? › No / Yes
✔ Would you like to customize the default import alias (@/*)? … No / Yes
Creating a new Next.js app in /Users/riscait/Repositories/riscait/my-app.
以下の2つはデフォルトNo、それ以外はデフォルトYesです。
? Would you like to use Turbopack for next dev? › No / Yes
? Would you like to customize the default import alias (@/*)? … No / Yes
プロジェクト構造
初めてのNext.jsの場合は見るべきとのこと
- App Routerを選んでいるので
pages
はなく、src/
ありを選んだのでsrc/app
になっているのか。 - publicは後で必要になってくる感じかな
- src
- app
- public
First commitをGitHubへプッシュ。
VS Codeからのpublishでリポジトリも作成してくれるの楽でありがたかった。
Run the Development Server
npm run dev
上記コマンドでローカル起動!
http://localhost:3000 へアクセスして確認👀
app/page.tsx を編集してロゴイメージを差し替えて反映されることを確認🚀
public/images/app-icon.png
に配置した画像は、 app/page.tsx
で src="/images/app-icon.png"
のパスで表示できた✍️
- Next.jsのApp Routerでは、デフォルトでServer Componentになり、サーバーサイドでレンダリングされる
-
use client
ディレクトリを指定することで、その子コンポーネントはすべてClient Componentとなり、クライアントでレンダリングされる。
サーバー用のコンポーネントがクライアントで使用されることを防ぐ
まず、パッケージをインストール。
npm install server-only
対象のファイルでインポートする。
import 'server-only'
ページファイルの役割
- page.tsx: ルート(ページ)に対応するUI。デフォルトでサーバーコンポーネント。
- layout.tsx: 複数のページ間で共有され、状態が保持されるUI。例えばヘッダーやナビゲーションバー。
- template.tsx: 状態の保持が不要なUI(レイアウト)。
関数名
Next.jsにおいて、export default function の後の関数名は任意であり、特に決まった命名規則はありません。しかし、いくつかのベストプラクティスがあります。
- 関数名を省略して匿名関数として扱うことも可能だが以下の理由で控える
- Fast Refreshに対応しなくなる
- デバッグ時に不便
- パスカルケース
CSSファイルのTailwindCSSディレクティブを警告を解消
Unknown at rule @tailwindcss(unknownAtRules)
- Tailwind CSS IntelliSenseをインストール
- VS Codeの設定ファイル(settings.json)に追記
"files.associations": {
"*.css": "tailwindcss"
}
Firebase Auth / Google Sign-in
Cross-Origin-Opener-Policy policy would block the window.closed call.
next.config.ts
の編集では解決できず。
無視しても良いらしい👀