[Gatsby.js] ブログ毎に動的にgraphqlを実行する方法

June 01, 2023

top画像

Gatsby.jsは、Reactベースの静的サイト生成フレームワークであり、非常に人気があります。Gatsby.jsを使うと、コンテンツを動的に生成するための便利なツールが提供されています。その中でも、createPageメソッドとGraphQLクエリを活用することで、より高度な動的コンテンツの生成が可能となります。

createPageメソッドの基本的な使い方

まずは、Gatsby.jsのcreatePageメソッドの基本的な使い方から始めましょう。createPageメソッドは、GatsbyのNode APIの一部であり、ページを動的に作成するために使用されます。以下のコードは、createPageメソッドを使用して新しいページを作成する例です。

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions;

  // ここにページの作成ロジックを記述します

  // createPageメソッドを使用して新しいページを作成します
  createPage({
    path: "/my-new-page",
    component: path.resolve("./src/templates/my-template.js"),
    context: {
      // ここにコンテキストのデータを設定します
    },
  });
};

このコードでは、createPageメソッドを使用して/my-new-pageというパスの新しいページを作成しています。また、componentプロパティには、ページのテンプレートコンポーネントのパスを指定しています。

変数の定義とコンテキストへの追加

次に、変数を定義し、それをcontextオブジェクトに追加してみましょう。contextオブジェクトは、ページコンポーネント内で利用可能なデータを保持するために使用されます。以下のコードは、変数を定義し、contextオブジェクトに追加する例です。

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions;

  // 変数を定義します
  const myVariable = "my-value";

  createPage({
    path: "/my-new-page",
    component: path.resolve("./src/templates/my-template.js"),
    context: {
      // 変数をコンテキストに追加します
      myVariable: myVariable,
    },
  });
};

このコードでは、myVariableという変数を定義し、contextオブジェクトに追加しています。この変数は、後ほどテンプレートコンポーネント内で利用することができます。

テンプレートコンポーネントでのGraphQLクエリの動的実行

最後に、テンプレートコンポーネント内で変数を使用してGraphQLクエリを動的に実行する方法を見ていきましょう。以下のコードは、my-template.jsというテンプレートコンポーネント内でGraphQLクエリを動的に実行する例です。

import React from "react";
import { graphql } from "gatsby";

const MyTemplate = ({ data }) => {
  // GraphQLクエリの結果を取得します
  const { myVariable } = data.site.siteMetadata;

  return (
    <div>
      <h1>{myVariable}</h1>
      {/* ここにコンテンツを表示します */}
    </div>
  );
};

export const query = graphql`
  query($myVariable: String!) {
    site {
      siteMetadata {
        title
        myVariable
      }
    }
  }
`;

export default MyTemplate;

このコードでは、graphqlタグを使用してGraphQLクエリを定義しています。クエリ内の変数として$myVariableを指定し、query変数の引数として渡します。そして、クエリの結果をdataオブジェクトから取得して、テンプレートコンポーネント内で利用することができます。

まとめ

この記事では、Gatsby.jsのcreatePageメソッドとGraphQLクエリを活用して、動的なコンテンツを生成する方法を紹介しました。createPageメソッドを使用してページを作成し、contextオブジェクトに変数を追加することで、テンプレートコンポーネント内で動的なGraphQLクエリを実行することができます。この仕組みを活用することで、柔軟なコンテンツ生成が可能となり、ユーザーによりパーソナライズされた体験を提供することができます。


Profile picture

Written by Mittsu
ベンチャー企業のしがないエンジニア。趣味はサッカーとTCG.

© 2024