Next.js との連携
2025-08-04

前回は Sanity Studio の Vision を利用して、GROQ を利用したクエリーから必要となるコンテンツの取得ができました。今回は、Next.js から同様の処理を実行して Web のコンテンツとして利用する方法を紹介します。

Next.js のプロジェクト作成

まず最初に、Next.js のプロジェクトの作成を進めていきます。コマンドとしては以下のようになります。

sh

プロジェクトの作成は以下のように進めました。

Image

フォルダの構成は以下のようになります。

        続いて Next.js で Sanity と連携するためのパッケージをインストールします。Next.js のパスに移動して以下のコマンドを実行します。

        sh

        これで準備ができました。まだパッケージをインストールしただけですが、以下のコマンドで Next.js を起動します。

        sh

        Next.js のテンプレートのページが立ち上がりました。

        Image

        Sanity と連携する

        続いて Next.js にコードを追加して、Sanity からデータを取得していきます。

        イベント一覧の表示

        Sanity からデータを取得するためのクライアントを apps/web/src/sanity/client.ts に作成します。

        apps/web/src/sanity/client.ts

        projectId は apps/studio/sanity.cli.ts に記載されているので、参照して書き換えてください。

        これだけでも十分ですが、コンテンツの変更を素早く反映させるためのモードを追加します。

        apps/web/src/sanity/live.ts

        これで、Sanity と連携するためのコードの準備ができました。

        Next.js 側で利用できるように変更をしていきます。まずは apps/web/src/app/layout.tsx のファイルを以下のように書き換えます。

        apps/web/src/app/layout.tsx

        続いてトップページを以下のように書き換えます。なお、公式サイトに記載されていませんが、Event の interface を追加、ダークモードでも文字が見えるように少し変更をしています。

        apps/web/src/app/page.tsx

        コードを確認していくと。

        • イベントデータを取得する GROQ のクエリ
        • sanityFetch を利用してデータを取得
        • 取得したデータを表示

        結果として、イベントの情報が表示されるようになりました。

        Image

        イベントのページ作成

        一覧から各ページへのリンクを作成するために、events のフォルダの作成、その下に [slug] のフォルダを作成して、page.tsx を作成します。これにより slug を利用した URL を利用できるようになります。

        src/app/events/[slug]/page.tsx

        実際に追加したあと、トップページのイベントをクリックすると以下のようにイベントの詳細ページが表示されるようになりました。

        Image

        このページで重要なコードは以下の部分になります。

        apps/web/src/app/events/[slug]/page.tsx

        以下のような動作になっています。

        • EVENT_QUERY には $slug という形で取得した slug を利用できるようにする
        • [0] ということで slug の値が一致した 1 つ目のデータを利用
        • sanityFetch では query と params を渡して、$slug が [slug] の値として動作するようにしている

        取得したイベントのデータをページで簡単に利用できるように以下のように定義しています。

        apps/web/src/app/events/[slug]/page.tsx

        sanityFetch にクエリと値を渡せば、結果となるデータの取得が決まり、ページの中で表示する値も作成できるようになります。

        アセットの表示

        画像を表示するためのパッケージとして @sanity/image-url が提供されています。これを Next.js のプロジェクトに追加します。

        sh

        続いて Next.js で外部のドメインの画像を利用する際には、設定にドメインを登録する必要があります。remotePatterns で追加することになります。設定は以下の通りです。

        apps/web/next.config.ts

        続いて画像を表示するためのコードを追加します。

        apps/web/src/sanity/image.ts

        上記で追加した apps/web/src/sanity/image.ts を利用して、イベントのページ apps/web/src/app/events/[slug]/page.tsx のコードを更新します。

        apps/web/src/app/events/[slug]/page.tsx

        これで、イベントに画像が設定されている場合はその画像を、そうではない場合は Placeholder の画像を表示するようにしました。

        Image

        イベントによっては画像が含まれていないアーティストもいるため、一覧から画像が指定されているアーティストのイベントを選択してください。

        まとめ

        今回は Next.js のプロジェクトの作成、そのプロジェクトに Sanity と連携するためのパッケージをインストールしたあと、パッケージで提供している機能を利用して、かつ GROQ を利用して Web ページを作成しました。また、画像に関する情報も併せて取得してページに表示することができました。

        ここまでのコードは以下のリポジトリ / ブランチで参照できます。