Next.js 開発者に対する需要が高まっているため、求職者は Next.js の面接の準備をする必要があります。
この記事では、 Next.js の面接でよく聞かれる質問と回答を、初心者、中級者、エキスパートの難易度に基づいて 3 つのセクションにまとめました。
Next.js の面接で合格したいと考えていますか?
もしそうなら、このガイドはあなたのためのものです。
Next.js は、開発者がサーバー側でレンダリングされる React アプリケーションを構築するのに役立つ React ベースのオープンソース フレームワークです。
Reactと Next.js の主な違いは、ルーティングの処理方法です。 React はクライアント側ルーティングを使用します。つまり、ページ遷移は JavaScript を使用してクライアント側で完全に処理されます。
対照的に、Next.js はサーバー側のルーティングを提供します。つまり、サーバーがルーティングを処理し、事前レンダリングされたページをクライアントに送信するため、ページの読み込みが高速になり、SEO が向上します。
Next.js は、自動コード分割、静的サイト生成、動的インポートなどの追加機能も提供します。
Next.js には、サーバー側レンダリング、自動コード分割、静的サイト生成、動的インポート、最適化されたパフォーマンス、簡単なデプロイメントなど、React に比べていくつかの利点があります。さらに、Next.js は組み込みの SEO と分析をサポートしているため、検索エンジン向けにアプリケーションを最適化し、ユーザー エンゲージメントを追跡することが容易になります。
新しい Next.js アプリケーションを作成するには、 create-next-app
コマンドを使用できます。たとえば、ターミナルでコマンドnpx create-next-app my-app
を実行できます。これにより、 my-app
という名前の新しい Next.js アプリケーションが作成されます。
サーバーサイド レンダリング (SSR) は、Web ページをクライアントのブラウザーに送信する前にサーバー上でレンダリングするプロセスです。 SSR が重要なのは、検索エンジンが Web サイトのコンテンツをクロールしてインデックスを作成できるようになり、Web サイトの SEO が向上する可能性があるためです。さらに、SSR により、最初のページの読み込み時間が短縮され、インターネット接続やデバイスが遅いユーザーのユーザー エクスペリエンスが向上します。
クライアント側レンダリング (CSR) は、サーバーから最初の HTML、CSS、および JavaScript を受信した後、 JavaScriptを使用してクライアントのブラウザーで Web ページをレンダリングするプロセスです。 SSR と CSR の主な違いは、SSR は完全にレンダリングされた HTML ページをクライアントのブラウザに送信するのに対し、CSR は JavaScript が入力された空の HTML ページを送信することです。
静的サイト生成 (SSG) は、構築時に Web サイト上の各ページの静的 HTML、CSS、および JavaScript ファイルを生成するプロセスです。 SSG と SSR の主な違いは、SSG はコンテンツ配信ネットワーク (CDN) から提供できる静的ファイルを生成するのに対し、SSR はサーバー上で HTML を動的に生成し、クライアントのブラウザに送信することです。
Next.js はファイルベースのルーティングを使用します。つまり、対応する URL パスを使用してpages
ディレクトリに新しいファイルを作成することでページを作成できます。たとえば、URL パス/about
を持つページを作成するには、 pages
ディレクトリにabout.js
というファイルを作成します。
getStaticProps
関数の目的は何ですか? getStaticProps
関数は、静的サイト生成のビルド時にデータをフェッチするために使用されます。この関数はビルド プロセス中に呼び出され、外部 API またはデータベースからデータをフェッチするために使用できます。 getStaticProps
によって返されたデータは、小道具としてページ コンポーネントに渡されます。
Next.js は、URL クエリ パラメーター、 Router
API、Redux や React Context などの状態管理ライブラリなど、Next.js アプリケーションのページ間でデータを受け渡すいくつかの方法を提供します。 getServerSideProps
関数を使用してサーバー上のデータを取得し、それを小道具としてページ コンポーネントに渡すこともできます。
Next.js アプリケーションは、AWS、 Google Cloud Platform 、Microsoft Azure などのクラウド サービスや、Vercel や Netlify などのプラットフォームを含むさまざまなプラットフォームにデプロイできます。 Next.js アプリケーションをデプロイするには、 next export
コマンドを使用して SSG の静的ファイルをエクスポートするか、Vercel の CLI や AWS Elastic Beanstalk などのプラットフォーム固有のデプロイ ツールを使用できます。
サーバーレス アーキテクチャは、クラウド プロバイダーがインフラストラクチャを管理し、需要に基づいてリソースを自動的に拡張するクラウド コンピューティング モデルです。 Next.js は、AWS Lambda や Google Cloud Functions などのサーバーレス プラットフォームにアプリケーションをデプロイすることで、サーバーレス アーキテクチャで使用できます。
getServerSideProps
関数とgetStaticProps
関数の違いは何ですか? getServerSideProps
関数は、サーバー側レンダリングの実行時にサーバー上のデータをフェッチするために使用され、 getStaticProps
関数は、静的サイト生成のためにビルド時にデータをフェッチするために使用されます。
getStaticPaths
関数の目的は何ですか? getStaticPaths
関数は、動的データを含むページの動的パスを生成するために使用されます。この関数はビルド プロセス中に呼び出され、動的データの可能な値のリストを生成するために使用できます。 getStaticPaths
によって返されたデータは、考えられる値ごとに静的ファイルを生成するために使用されます。
Next.js では、角括弧[]
を使用して URL パス内の動的セグメントを示します。たとえば、URL パス/blog/[slug]
を持つブログ投稿の動的ルートを作成するには、 pages/blog
ディレクトリに[slug].js
というファイルを作成します。
Next.js は、コードを自動的に小さなチャンクに分割し、ユーザーが新しいページに移動したときにオンデマンドで読み込むことができます。これにより、最初のページの読み込み時間が短縮され、アプリケーションのパフォーマンスが向上します。
_app.js
ファイルの目的は何ですか? _app.js
ファイルはアプリケーション全体をラップするために使用され、グローバル スタイル、レイアウト コンポーネント、およびコンテキスト プロバイダーを提供します。このファイルはページリクエストごとに呼び出され、アプリケーションに共通の機能を追加するために使用できます。
Next.js には、JSON Web Token (JWT)、OAuth、NextAuth.js などのサードパーティ ライブラリなど、認証を実装するためのオプションがいくつか用意されています。サーバー側のレンダリングとセッション管理を使用して、サーバー側の認証を実装することもできます。
コンテナ コンポーネントはコンポーネントの状態とロジックを管理する責任を負い、プレゼンテーション コンポーネントはコンテナ コンポーネントから渡された props に基づいて UI をレンダリングする責任を負います。
useEffect
フックの目的は何ですか?また、Next.js とどのように関連していますか? useEffect
フックは、API からのデータの取得やドキュメント タイトルの更新など、機能コンポーネントでの副作用を実行するために使用されます。 Next.js では、 useEffect
フックを使用して次のことができます。
fetch
API または Axios や SWR などのサードパーティ ライブラリを使用して、クライアント側のデータ フェッチを実行します。
Next.js には、カスタム エラー ページ、 getInitialProps
を使用したサーバー側のエラー処理、React エラー境界を使用したクライアント側のエラー処理など、エラー処理のためのいくつかのオプションが用意されています。 Sentry や Rollbar などのサードパーティ ライブラリを使用して、エラーの監視とレポートを行うこともできます。
Next.js は、 next-i18next
ライブラリを通じて i18n の組み込みサポートを提供します。このライブラリを使用すると、アプリケーションの翻訳を作成し、ユーザーの設定やブラウザ設定に基づいて言語を切り替えることができます。
getServerSideProps
関数の目的は何ですか? それはgetInitialProps
関数とどのように関連していますか? getServerSideProps
関数は、サーバー側レンダリングのために実行時にサーバー上のデータをフェッチするために使用され、 getInitialProps
関数は実行時にクライアントまたはサーバー上のデータをフェッチするために使用されます。 Next.js 9.3 以降では、 getInitialProps
関数は廃止され、 getServerSideProps
使用されます。
Next.js は、 Cache-Control
ヘッダーを通じてサーバー側キャッシュの組み込みサポートを提供します。 getServerSideProps
関数を使用するか、ページ コンポーネントでcacheControl
プロパティを設定することによって、各ページのキャッシュ期間を設定できます。
Redis や Memcached などのキャッシュ ライブラリを使用して、API 応答やデータベース クエリをキャッシュすることもできます。 CDN キャッシュやエッジ キャッシュなどのオプションを実装して、静的資産のパフォーマンスを向上させ、サーバーの負荷を軽減することもできます。
Next.js アプリケーションのパフォーマンスを最適化するには、コード分割、遅延読み込み、画像の最適化、サーバー側のキャッシュ、CDN キャッシュなど、いくつかの戦略があります。 Lighthouse や WebPageTest などのパフォーマンス監視ツールを使用して、改善すべき領域を特定することもできます。
Next.js は、 API Routes
機能を通じてサーバーレス関数の組み込みサポートを提供します。サーバーレス関数を作成するには、 pages/api
ディレクトリに目的のエンドポイント名を持つファイルを作成し、サーバー側ロジックを実装します。
Contentful、Strapi、Sanity などのサードパーティ CMS を使用して、Next.js でヘッドレス CMS を実装できます。これらの CMS プラットフォームは、コンテンツを取得および更新するための API を提供しており、 getStaticProps
関数またはgetServerSideProps
関数を使用して Next.js と統合できます。
GraphQL または REST API を使用してサーバーからデータを取得し、それを props としてコンポーネントに渡すことができます。 swr
やreact-query
のライブラリを使用して、データのフェッチとキャッシュを処理することもできます。
Google Optimize や Optimizely などのサードパーティ ツールを使用して、実験を作成し、ユーザーの行動を追跡できます。機能フラグや条件付きレンダリングなどのカスタム ソリューションを使用して、アプリケーションのさまざまなバリエーションをテストすることもできます。
Next.js アプリケーションでリアルタイム更新を処理するには、サーバー送信イベント、Web ソケット、または Socket.io などのサードパーティ ライブラリを使用して、クライアントとサーバー間のリアルタイム接続を確立できます。また、 react-use
やredux
のライブラリを使用して、アプリケーション内のリアルタイムのデータ更新を処理することもできます。
Next.js アプリケーションでテストと継続的統合を実装するには、Jest や Cypress などのテスト フレームワークを使用してテストを作成し、実行できます。 CircleCI や Travis CI などの継続的統合サービスを使用して、テストと展開のプロセスを自動化することもできます。さらに、ESLint や Prettier などのコード品質ツールを使用して、コードの一貫性と保守性を確保できます。
これらの Next.js インタビューの質問と回答は、簡潔かつ要点を押さえたものになるように作成しました。この記事は、Next.js の面接の準備をしている人にとって簡単なチートシートのような役割を果たします。
ただし、この仕事に適しているためには、Next.js を使用した作業で十分な経験を積んでいなければならないことを忘れないでください。
幸運を!