window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() NextJSにおけるデータ取得戦略 - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2021-04-09
ソフトウェア開発

NextJSのデータフェッチ戦略

The Codest

パヴェル・リブチンスキ

Software Engineer

最近、NextJSはReactアプリケーションを作る方法として、ますます人気を集めています。確かに、NextJSがいくつかの異なるデータ取得戦略を提供していることが、大きな貢献をしています。

そしてこれらは

  • クライアント側のレンダリング:CSR、
  • サーバーサイド・レンダリング:SSR、
  • 静的サイトレンダリング:SSG、
  • インクリメンタル静的再生:ISR。

NextJSは、素のReactアプリとは異なり、プリレンダリングという機能を提供します。つまり、プリレンダリングされたHTMLが、最初の読み込み時に表示されます。従来のReactアプリでは、アプリ全体がロードされ、クライアント側でレンダリングされます。その後、JS コード がロードされると、アプリケーションはインタラクティブになる。

スタティック・ジェネレーション

SSGでは、HTMLはビルド時に生成され、リクエストごとに再利用されます。プロダクションビルドが作成された後、すべてのリクエストは静的に生成されたHTMLファイルを再利用することになります。

また、静的生成にはデータありとデータなしの2種類がある。

最初のケースでは、HTMLはpromiseを解決してデータを取得した後に生成されます。この場合、getStaticPropsデータ取得メソッドを使用できます。ただし、Next.js 9.3以降を使用している場合に限ります。古いgetInitialPropsメソッドは推奨されなくなり、非推奨になります。また、このメソッドはクライアントサイドのナビゲーションごとに呼び出されるため、リクエストごとにデータを取得したくない場合は効率的ではありません。

非同期関数 getStaticProps() { をエクスポートする。
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: { posts }、
  };
} 

これはSSGとSSRの中間のようなものです。revalidateという特定のキーを使うことで、ページをインクリメンタルに再生成することができます。このキーがあれば、サーバーから取得したデータの更新を取得するたびにアプリを再構築する必要はありません。revalidateキーと、秒単位の更新期間を追加するだけです。

非同期関数 getStaticProps() { をエクスポートする。
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts、
    },
    revalidate: 30、
  };
}

つまり、その期間後にリクエストが来た場合は、サーバーからデータを再度フェッチするということだ。

もう1つの状況は、動的なページを使用し、パスが外部データに依存する場合です。そのような場合、動的なルートがプリロードされるべきかを指示するgetStaticPathsメソッドを使うことができます:

export async const getStaticProps = ({ params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  return {
    props: { post }、
  };
}
非同期関数 getStaticPaths() { をエクスポートする。
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` }));
  return {
    paths、
    fallback: false、
  };
}

どのダイナミック・ルートが作成されたかを確認する良い方法がある。次のビルドと次のエクスポートを実行すれば、新しく作成されたoutディレクトリに静的バージョンのアプリができる。

それでは、ビルド前のパスを制限してみよう:

非同期関数 getStaticPaths() { をエクスポートします。
  return {
    paths: [{ params: { id: "1" } }, { params: { id: "2" }]、
    fallback: false、
  };
}

次のエクスポートを実行した後、両方のケース(パスの数に制限がある場合とない場合)で、my-appoutpostsで見つかった投稿の数が異なることに気づくことができる。

ネクスト・エクスポート

それでは、重要で必須のフォールバック・パラメーターを詳しく見ていこう。これは、ページがビルド時にプリレンダリングされなかった場合にどうするかを示しています。もしtrueに設定されていれば、getStaticPropsが実行され、そのページが生成されます。falseの場合、特定のパスをロードしようとすると404が表示されます。もうひとつ、getStaticPathsで有効になっているフォールバックのあるページはエクスポートできません。

以下に、両方のケースで同じダイナミック・ページをロードしてみた結果を示します:

最初のケース(パスを限定しない)

第一

2つ目のケース(パスを制限し、フォールバックをfalseに設定した場合)

second<em>フォールバック</em>false

2つ目のケース(パスを制限し、フォールバックをtrueに設定した場合)

セカンド<em>フォールバック</em>トゥルー

サーバーサイド・レンダリング

SSG との主な違いは、リクエストごとに新しい HTML が生成されることです。これは主に外部データを取得するときに使われます。この場合、サーバーからデータを更新するたびにアプリをリビルドする必要はありません。

非同期関数 getServerSideProps() { をエクスポートする。
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts、
    },
  };
}

getServerSidePropsメソッドはgetStaticPropsとよく似ています。違いは、 getStaticProps がビルド時に一度だけ実行されるのに対して、 getServerSideProps はリクエスト毎に実行されることです。

クライアント側レンダリング

クライアントサイド・レンダリングでは、ページの初期ロードに少し時間がかかる。サーバーとの通信は実行時に行われる。もっと伝統的な方法でもできる:

コンスト・ブログ = () => {


 const [posts, setPosts] = useState([]);
  useEffect(())=>の{。
    const fetchData = 非同期() => { { [投稿]; [setPosts
      const res = await fetch(
     "https://jsonplaceholder.typicode.com/posts");
      const posts = await res.json();
      setPosts(posts);
    };
    fetchData();
  }, []);

また、NextJSの作者が強く推奨している、Vercel*によるデータ取得のためのReact Hooksライブラリ、swrを使うこともできます。SWRはState While Revalidateの略です。

* データソース ヴェルセルのSWR

swr "からuseSWRをインポートする;


const ブログ = () =&gt; {
 const fetcher = (url) =&gt; fetch(url).then((r) =&gt; r.json());
 const { data: posts = [], error } = useSWR(
    "https://jsonplaceholder.typicode.com/posts", fetcher);
 if (error) return <div>投稿の読み込みに失敗しました</div>;
 if (!posts.length) return <div>ロード...</div>;
 を返す(
    <>
      {posts.map((post) =&gt; (
            {post.title}
        ))}
    </>
}

概要

NextJSでは、各ページでどのデータ取得ストラテジーを使うかを選択することができます。アプリケーション全体に対して、ただひとつのソリューションに従う必要はないのです。

ショートカット

  • getServerSideProps - 取得したデータを使って、リクエストごとにアプリをプリレンダリングする必要がある場合。
  • getStaticProps - データがビルド時に一度取得され、各リクエストで更新されることなく使用される場合。
  • getInitialProps - 推奨されません。
  • getStaticPaths - ダイナミックパスをプリレンダリングする。
NextJsの長所と短所
デジタル製品開発コンサルティング

続きを読む

Rails APIとCORS。意識

なぜ(おそらく)Typescriptを使うべきなのか?

SaaSプロジェクトにおける最高品質のコード。技術者ではない)創業者として、なぜそれを気にする必要があるのでしょうか?

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese