[Next.js App Router]メタデータの設定をしよう
Next.js2024/8/17
はじめに
Next.js(App Router)でメタデータを生成する方法について書いていきます。
参考
静的メタデータの設定方法
静的メタデータを設定するには、以下のように書きます。
「metadata」関数をエクスポートする形で定義し、その中で、静的なメタデータを定義できます。
import { Metadata } from "next";
export const metadata: Metadata = {
  title: "タイトル",
  description: "説明",
};
動的メタデータの設定方法
例として、ブログの詳細ページなどで、ブログのタイトルをメタデータに設定したい場合などがあります。
その時は、以下のようにすると、動的にメタデータを設定できます。
import { Metadata } from "next";
export const generateMetadata = async ({ params }: { params: { blogId: string } }): Promise<Metadata> => {
 // ブログの詳細データを取得する関数
  const blogData: ArticleContent = await blodDetailData(params.blogId);
  return {
    title: blogData.title,
    description: blogData.title
  };
}
このように、「generateMetadata」関数をエクスポートする形で定義、その中でデータの取得、メタデータの設定を行うことができます。
Faviconを設定
最後に、Faviconを設定する方法です。
いくつか方法があるみたいですが、今回は「icon.tsx」を設置する方法について書いていきます。
まず、ルートディレクトリにある「page.tsx」と同じ階層に「icon.tsx」を設定し、以下のようにソースを書いていきます。
〇設定する項目
- runtime
ランタイム(実行中にコードで使用できるライブラリ、API、および一般的な機能)を設定 - size
画像のサイズを設定 - contentType
画像の形式を設定 - Iconメソッド
ICONを生成するメソッド 
import { ImageResponse } from 'next/og'
 
// Route segment config
export const runtime = 'edge'
 
// Image metadata
export const size = {
  width: 32,
  height: 32,
}
export const contentType = 'image/png'
 
// Image generation
export default function Icon() {
  return new ImageResponse(
    (
      // ImageResponse JSX element
      <div
        style={{
          fontSize: 24,
          background: 'black',
          width: '100%',
          height: '100%',
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'center',
          color: 'white',
        }}
      >
        A
      </div>
    ),
    // ImageResponse options
    {
      // For convenience, we can re-use the exported icons size metadata
      // config to also set the ImageResponse's width and height.
      ...size,
    }
  )
}
以下の記事に、主な実装例が書いてあります。