1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gatsby-plugin-typegenでTypeScript化したgatsby-node.jsで呼び出したGraphQLにも型を生成するための対策

Last updated at Posted at 2021-12-04

gatsby-plugin-typegen を使うことで build 時に GraphQL の型生成ができます。
しかし、 gatsby-node.js 側で呼び出した GraphQL に対しての型生成は行われません。
そのためにやったことを紹介します。

そもそも gatsby-node.js をTS化するやり方に関してはGatsby.jsのTypeScript化 2020の記事がわかりやすいです。
(gatsby-node.js側にtsファイルをimportすることによってTypeScript化しています。自分もこのやり方を採用)

ダミーページで GraphQL を呼び出す

アナログな手法なのですが gatsby-node 側で呼ばれないのであればコンポーネントおよびpageディレクトリのファイルで呼び出します。

dammy.tsx
import React, { VFC } from 'react';
import { graphql } from 'gatsby';

const Hoge: VFC = () => {
  return (
    <>
     // 省略されたJSX.Element
    </>
  );
};

// 実際には使わないし引数として受け取ったりしないがdammyとして記載しておく
export const query = graphql`
query HogeTable {
  allHoge {
    edges {
      node {
        data {
          createdAt
          descIconImg
          description
          publicUrl
          fullName
          refFullName
          refUnitName
        }
      }
    }
  }
}
`;

export default Hoge;

この状態で gatsby build に成功すれば 型 HogeTableQuery のような名前で
src/generated/gatsby-types.ts にデフォルト設定として生成されています。

プラグインが gatsby-node.js 側での型生成に対応していない

Gatsby公式サイト - gatsby-plugin-typegenの詳細を見てもnode側の型生成に対応してないことが記載されています。

いつか誰かがコミットしてくれるかもしれないので入れ違いにならないようチェックしてみてください。

gatsby-node.jsに関わるおまけの小ネタ

gatsby-nodeでcreatePagesを使ってページを生成するとページはできているしテンプレートも読み込まれているしTS設定周りとかも何度も確認したけれどページにテンプレートがあたっていない問題にぶち当たったんですが結果としてそれぞれのslugに小さいスペース入っていたことが原因でした。trim()で解決。

gatsby-node/index.ts
createPage({
            path: `/hoge/${slug}`, // string型のslugデータ末尾に小さいスペースが入っていることに気がつかなかったのでページが生成されなかった(おそらく空白スペース入りのURLとしては生成されていた)
            component: testComponent,
            context: {
              post: hogedata,
           },
   });

エラーとして拾われないのでわからなかったけれどソースデータ側でtrimができていなかったりするとこういうこともありますという事例です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?