
このリポジトリは、1つまたは複数のミートアップを発表するためのサポートとして使用できます。流れは次のとおりです...
この作業は主に2つのソースに基づいています:
1-csr-load-data vanilla react SPA データ読み込み[!IMPORTANT] CSR(クライアントサイドレンダリング):Reactコードがブラウザに配信され、DOMに挿入されるコンテンツを生成します。

cd 1-csr-load-data
npm start

2-csr-router vanilla react SPA ルーティング[!IMPORTANT] ページが最初に読み込まれた後、同じWebサイト内の他のページへの移動では、JavaScriptを使用してページの一部を再レンダリングするため、ページ全体のリロードは必要ありません。
cd 2-csr-router
npm start

3-rsc-load-data React Server Components(Next.js実装)データ読み込み[!IMPORTANT] ブラウザではなく、サーバー上でのみ実行されるように書かれたReactコンポーネント。

cd 3-rsc-load-data
npm run build
npm run start

4-rsc-router React Server Components(Next.js実装)ルーティング[!IMPORTANT] コンポーネントはサーバー上でのみ実行されます。デフォルトの動作は静的レンダリングです。つまり、コンポーネントはビルド時に実行されます。
cd 4-rsc-router
npm run build
npm run start

5-SSR SSR サーバーサイドレンダリング[!IMPORTANT] SSRは、クライアントコンポーネントをサーバー上で事前レンダリングすることを意味します。Reactコードはリクエストされた時点で実行されます。結果は将来のリクエストのためにキャッシュされる場合があります。
ベストプラクティス:'use client';コンポーネントは、コンポーネントツリーのできるだけ下の方で定義します。
[!IMPORTANT] Reactにおいて、「ハイドレーション」とは、Reactがサーバー環境でレンダリング済みの既存のHTMLに「アタッチ」する仕組みのことです。ハイドレーション中、Reactは既存のマークアップにイベントリスナーをアタッチし、クライアント上でのアプリのレンダリングを引き継ごうとします。Reactで完全に構築されたアプリでは、通常、起動時にアプリ全体に対して1つの「ルート」を1回だけハイドレーションします。
https://react.dev/reference/react-dom/client/hydrateRoot
https://www.gatsbyjs.com/docs/conceptual/partial-hydration/
cd 5-ssr
npm run build
npm run start

6-pages-router-ssg (Next.js 実装)[!IMPORTANT] pagesルーターを使用したSSG(静的サイト生成):アプリケーションのビルド時にReactコードが実行され、生成された出力は静的です。
cd 6-pages-router-ssg
npm run build
npm run start
7-pages-router-isr (Next.js 実装)[!IMPORTANT] ISR(pagesルーター使用):「Next.jsでは、サイトをビルドした後に静的ページを作成または更新できます。インクリメンタル静的再生成(ISR)により、サイト全体を再ビルドすることなく、ページ単位で静的生成を使用できます。ISRを使用すると、静的生成の利点を維持しながら、数百万ページにスケールできます。」
cd 7-pages-router-isr
npm run build
npm run start
「リクエスト時にデータが古くなる可能性がある」
https://vercel.com/blog/nextjs-server-side-rendering-vs-static-generation
https://react.dev/reference/rsc/server-actions
...
8-ssrf-14.1.0https://www.assetnote.io/resources/research/digging-for-ssrf-in-nextjs-apps
14.1.1 より前のバージョンのNext.JSベースのアプリケーションredirect(/blog/${inputValue});出典:https://www.assetnote.io/resources/research/digging-for-ssrf-in-nextjs-apps
Next.JSはサーバー側でリクエストを実行し、その結果をブラウザに返します:
redirect('/blog/123');関数はURL http://207.154.209.99/blog/123 を構築します。
このURLを構築するために、Next.JSは初期リクエストのHTTPヘッダーからホスト 207.154.209.99 を取得します。Content-Type: text/x-component ヘッダーを返した場合、Next.JSはHTTP GETでURLをリクエストします。ターゲットサーバーに対するSSRFを実現するには、別のサーバーを実行する必要があります:
Content-Type: text/x-component ヘッダー付きのHTTP 200を返す
8-ssrf-14.1.0 の脆弱性の修正/etc/nginx/sites-available/nextjs 内
変更前:
server {
listen 80 default_server;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
変更後:
server {
listen 80;
server_name 207.154.209.99;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host 207.154.209.99;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
副作用のリスク...
https://nginxtutorials.com/nginx-proxy_set_header-directive/
https://github.com/vercel/next.js/security/advisories/GHSA-fr5h-rqp8-mj6g

appディレクトリ内のページはデフォルトでServer Componentsです。これは、ページがClient Componentsであるpagesディレクトリとは異なります。
Next.js 13へのアップグレードで、新しいApp Routerを使用する必要はありません。両方のディレクトリで動作する新機能を使用して、pagesを引き続き使用できます。
さまざまなソリューションの読み込みパフォーマンスを比較したい場合は、Core Web Vitalsのメトリクスを console.log で追加できます。
https://web.dev/articles/fcp?hl=fr
https://rsc-parser.vercel.app/
https://github.com/reactjs/rfcs/blob/main/text/0188-server-components.md#does-this-replace-ssr
https://www.youtube.com/watch?v=jEJEFAc8tSI
AppルーターでのISR?
Next.js App Routerでは、フェッチされたすべてのデータはデフォルトで静的になり、ビルド時にレンダリングされます。ただし、これは簡単に変更できます。Next.jsはfetchオプションオブジェクトを拡張して、キャッシュと再検証ルールに柔軟性を提供します。
{next: {revalidate: number}}オプションを使用すると、設定した間隔で、またはバックエンドの変更時に静的データを更新でき(インクリメンタル静的再生成)、動的データ(サーバーサイドレンダリング)にはfetchリクエストで{cache: 'no-store'}オプションを渡すことができます。
https://www.telerik.com/blogs/current-state-react-server-components-guide-perplexed
https://github.com/reactjs/server-components-demo
https://dev.to/vteacher/let-s-make-a-web-application-with-react-server-components-5dmg
https://react.dev/blog/2024/04/25/react-19
https://react.dev/reference/rsc/server-components
https://www.youtube.com/watch?v=ePAPd9qzGyM
https://www.joshwcomeau.com/react/server-components/
https://nextjs.org/docs/pages/building-your-application/rendering/static-site-generation
https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props
https://react.dev/reference/rsc/server-components#server-components-without-a-server