コンテンツへスキップ
Fumadocs

GraphQL

GraphQL スキーマからドキュメントを生成します。

セットアップ

必要なパッケージをインストールします。

npm i @fumadocs/graphql graphql

スタイルの生成

次の行を追加します。

Tailwind CSS
@import 'tailwindcss';
@import 'fumadocs-ui/css/neutral.css';
@import 'fumadocs-ui/css/preset.css';
@import '@fumadocs/graphql/css/preset.css';

プラグインの設定

GraphQL サーバーインスタンスと <GraphQLPage /> コンポーネントを作成します。

import { createGraphQL } from '@fumadocs/graphql/server';

// 注: これはサーバーサイドAPIです
export const graphql = createGraphQL({
  // GraphQLスキーマ。次の形式を指定できます:
  // SDLファイル/URL(`extend type` を含む)、SDLテキスト、
  // イントロスペクション結果、`GraphQLSchema` インスタンス。
  input: ['./schema.graphql'],
});

各オプションについては、createGraphQL() と createGraphQLPage() を参照してください。

ページを生成する

loader() に staticSource() を渡します。ファイルを書き出さずにページを生成できます。

src/lib/source.ts
import { getCollection } from 'astro:content';
import { loader } from 'fumadocs-core/source';
import { toFumadocsSource } from '@fumadocs/astro/source';
import { graphql } from '@/lib/graphql'; 

export const source = loader(
  {
    docs: toFumadocsSource(await getCollection('docs'), await getCollection('meta')),
    graphql: await graphql.staticSource({
      baseDir: 'graphql',
    }),
  },
  {
    baseUrl: '/docs',
    // 任意: ページツリーの各ページ項目に query/mutation/subscription のバッジを追加します
    plugins: [graphql.loaderPlugin()],
  },
);

staticSource() はオペレーションごとに1ページを生成し、種類別のフォルダー (例: queries/) にまとめます。名前付き型のページはオプトインで生成されます。

source のページは docs と graphql の2種類になりました。 source を使用しているすべての箇所を更新してください。

GraphQL ページは専用のアイランドでレンダリングします。このアイランドでは、<GraphQLPage /> を docs レイアウトでラップします。

---
import type { GetStaticPaths, InferGetStaticPropsType } from 'astro';
import Layout from '@/layouts/Layout.astro';
import { Docs } from '@/components/docs';
import { GraphQLDocs } from '@/components/graphql-docs'; 
import { source } from '@/lib/source';

export const prerender = true;

export const getStaticPaths = (() => {
  return source.getPages().map((page) => ({
    params: { slug: decodeURI(page.slugs.join('/')) || undefined },
    props: { page },
  }));
}) satisfies GetStaticPaths;

type Props = InferGetStaticPropsType<typeof getStaticPaths>;

const { page } = Astro.props;
const pageTree = await source.serializePageTree(source.getPageTree());
---

{/* [!code ++:13] */}
{page.type === 'graphql' && (
  <Layout title={page.data.title ?? 'My App'}>
    <GraphQLDocs
      client:load
      pathname={Astro.url.pathname}
      params={Astro.params}
      tree={pageTree}
      title={page.data.title}
      props={page.data.getGraphQLPageProps()}
    />
  </Layout>
)}

移行が完了していることを確認してください

次に進む前に、型チェックを実行してください。

npm run types:check

機能

公式の GraphQL インテグレーションは、以下の機能をサポートしています。

  • オペレーション(query/mutation/subscription)ごとのページ。使用している型をその場で展開して確認できます
  • 引数、フィールド、非推奨情報、デフォルト値、@oneOf 入力オブジェクト
  • スキーマで適用されているディレクティブとその定義
  • リクエストとレスポンスの例(自動生成、または独自のオペレーションを使用)
  • cURL、JavaScript、Go、Python、Java、C#、Rust のコードサンプル
  • 変数フォームを備えたプレイグラウンド。WebSocket や SSE 経由でサブスクリプションも実行できます
  • LLM 向けのページの Markdown
  • 名前付き型のページ(任意)。スキーマ全体での使用箇所も表示されます

デモ

GraphQL のサンプルをご覧ください。

How is this guide?

最終更新日