はじめに
現代の Web サイトにおいて、コンテンツ管理システム(CMS) の選択は非常に重要です。特に、開発者にとって使いやすく、パフォーマンスに優れ、SEO フレンドリーなソリューションが求められています。
この記事では、ContentLayerとNext.js 14を組み合わせて、最新のブログシステムを構築する方法について詳しく解説します。
ContentLayer とは
ContentLayer は、型安全な静的サイト生成を可能にするコンテンツ SDK です。以下の特徴があります:
主な特徴
- ✅ TypeScript 完全対応:コンテンツに対する型安全性
- ✅ MDX サポート:リッチなマークダウンコンテンツ
- ✅ 高速なビルド:増分更新による効率的な生成
- ✅ 柔軟なスキーマ:カスタマイズ可能なコンテンツ構造
// ContentLayerの型定義例
export const Blog = defineDocumentType(() => ({
name: "Blog",
filePathPattern: `blog/**/*.mdx`,
contentType: "mdx",
fields: {
title: { type: "string", required: true },
description: { type: "string", required: true },
publishedAt: { type: "date", required: true },
// ... その他のフィールド
},
computedFields: {
slug: {
type: "string",
resolve: (doc) => doc._raw.flattenedPath.replace(/^blog\//, ""),
},
},
}));実装のポイント
1. SEO 最適化
ContentLayer を使用することで、以下の SEO 最適化が自動的に実現されます:
- メタタグの自動生成
- 構造化データ(JSON-LD)
- OGP タグの最適化
- サイトマップの自動生成
2. パフォーマンス最適化
// 静的生成によるパフォーマンス向上
export async function generateStaticParams() {
return allBlogs.map((blog) => ({
slug: blog.slug,
}));
}
export async function generateMetadata({ params }) {
const blog = allBlogs.find((blog) => blog.slug === params.slug);
return {
title: blog.metaTitle,
description: blog.metaDescription,
openGraph: {
title: blog.ogp.title,
description: blog.ogp.description,
images: [blog.ogImage],
},
};
}3. 開発体験の向上
ContentLayer は開発者体験も大幅に向上させます:
- リアルタイムプレビュー
- 型安全なコンテンツアクセス
- 自動補完サポート
まとめ
ContentLayer と Next.js 14 を組み合わせることで、以下の利点を得ることができます:
- 開発効率の向上:型安全性とツールサポート
- SEO 最適化:自動的なメタデータ生成
- 高いパフォーマンス:静的生成による高速化
- 保守性:構造化されたコンテンツ管理
この組み合わせは、企業サイトやブログ、ドキュメントサイトなど、様々な用途に活用できる強力なソリューションです。
次のステップ:この基本設定を元に、カテゴリー機能やタグ機能、検索機能などを追加して、より充実したブログシステムを構築していきましょう。
