他のフレームワークにも活かせそう。Webプログラミングの要素詰め合わせセットになっている。
React/Nextの記法的なところを除いてまとめる
Chapter1
- プロジェクト作成
- 作成用のコマンドがある
- フォルダ構造を理解する
- プレースホルダーを用意しておくと便利
- テスト用のデータ
- mockAPI.io
- データベースへのシード(初期データを入れる)
- TypeScript
-
型安全性を高める
-
Prismaというものを使うとより安全に型宣言できる
-
Chapter2
- グローバルスタイル
- 最上位コンポーネント
- ルートレイアウト
- Tailwind CSS
- クラス名を追加して要素をスタイリングできる
- CSSモジュール
- tailwindもCSSモジュールもどっちでもいい、どっちも同時に使える
- clsxはクラス名を切り替えるためのライブラリです
- そのほかのスタイリング
-
scss
-
CSS-in-JSライブラリ
-
Chapter3
-
フォントの最適化
-
累積レイアウトシフト
-
フォントは、フォールバックフォントかシステムフォントでレンダリングして、そのあとにカスタムフォントでレンダリング。
-
Next.jsはその辺を最適化してくれる。
- サーバーサイドにフォントファイルを保存
-
プライマリフォントを設定する
- セカンダリフォントを設定する
-
画像の最適化
- サイズが動的に変わる。
-
imgの代わりのImageコンポーネント
- webPとかに自動でしてくれる
-
WicthとHeightを設定するとレイアウトがずれにくくなる
Chapter4
-
ルーティング
- ファイルシステムルーティング
-
Page.tsxとLayout.tsx
-
layout.tsxは子フォルダにすべて影響する
-
部分レンダリング
-
ルートレイアウト
Chapter5
-
Linkコンポーネント
- aタグに置き換えていろいろな機能が追加されたもの
- ページを更新せずに移動できるようになる。
-
URLの値を読み込んで、どのページにいるかを認識する
-
clsxを使って条件分岐してクラスを変更できる
Chapter6
-
GitHubにプッシュ
-
Vercelにデプロイ
- 自動的に再デプロイ
-
PostgreSQLデータベース
- Vercelで用意できる
-
.envにPostgresのシークレットキーを入れる
- gitignoreを確認せよ
-
データベースのシード
Chapter7
-
データの取得
- API→クエリ→SQLコマンド
-
APIを使う理由
- データベースを直接公開しないようにするため
-
React Server Componentsを利用するとAPIを使わずに安全にデータベースクエリを使うことができる
-
サーバーコンポーネント
- Promiseをサポートして非同期にできる
-
SQLのSDKがある
-
リクエストウォーターフォール
-
Promise.allによって並列処理をする
Chapter8
-
静的レンダリングと動的レンダリング
-
静的レンダリングはビルド時にサーバーでレンダリングする
- CDNで高速化できる
- サーバーの負荷軽減、高速化、SEO対策などで有利
-
静的レンダリングは静的なコンテンツ・UIしかできない
-
動的レンダリングはリクエスト時にレンダリングする
- リアルタイムデータを扱えたり、ユーザー独自のコンテンツ、Cookieなどが扱えるようになる
-
動的レンダリングを利用すると、最も遅いデータフェッチに依存する
Chapter9
- チャンク?
- コンポーネントごとにロードする
- loading.tsxでロード中の代替画面を作れる
- ロードスケルトンはロード中のフォールバックです。
- ルートグループによって、そのディレクトリでしか有効にならないようにできる
- コンポーネントのストリーミング
- Suspenceというものを使う
- コンポーネントをグループ化することで、同時に読み込むことができる
- そうすると、逐次読み込みに比べて画面が崩れなくなる
- サスペンスの境界線をどこに置くのか
- とりあえず適当でいい
Learn Next.js: Streaming
Improve your application’s loading experience with streaming and loading skeletons.
https://nextjs.org/learn/dashboard-app/streaming#deciding-where-to-place-your-suspense-boundaries
Chapter10
-
Nextjsの機能、部分的プリレンダリング
-
簡単に言うと、コンポーネントについて、静的な部分を先にレンダリングできる。
-
Suspenseでラッピングすると自動でこの機能を使ってくれる
-
これまでにやったこと
-
サーバーとデータベースは近いところに置く
-
サーバーコンポーネントを使って、データベースを安全に保つ
-
SQLクエリでデータ転送量の最適化を行う
-
Promise.allで並列化をします
-
ストリーミングを実装し、ページを部分的に読み込むようにしました。
Chapter11
-
URL検索パラメータ
- ブックマークできたり共有できたり追跡できたり
-
デバウンス
- 関数が起動できる速度を変える
- 連打できないようにする
- use-debounce
-
ページネーション
Chapter12
-
サーバーアクションとサーバーコンポーネント・・・?
-
サーバーアクションを使うとAPIエンドポイントを作る必要がない
-
サーバーアクションを使って、入力チェックなどを行うことができる。
-
サーバーアクションを使うと、キャッシュを使って再検証ができる?
-
型検証ライブラリのZodを使うと楽ができる
8章
ダイナミックレンダリングとスタティックレンダリング
9章
- ローディングスケルトン
- (overview) はロードされない
- かっこは読み込まれないから
- 若干コードの間違いがある
- Props経由でロードするのではなく、コンポーネントで直接ローディングを書いてしまう方がいい。
10章
一旦サラッと読む
11章
URLクエリ
デバウンス