Markdown と MDX
Markdown は、テキストを形式化するための軽量なマークアップ言語です。 プレーンテキストの構文を書くことで、構造的に有効な HTML に変換できます。ウェブサイトやブログのコンテンツを書くためによく使われます。
次のように書くと:
I **love** using [Next.js](https://nextjs.org/)
以下のように出力されます:
<p>I <strong>love</strong> using <a href="https://nextjs.org/">Next.js</a></p>
MDX は、Markdown のスーパーセットで、Markdown ファイルに直接 JSX を書くことができます。コンテンツに動的な対話性を追加したり、React コンポーネントを埋め込む強力な方法です。
Next.js は、アプリケーション内のローカル MDX コンテンツと、サーバー上で動的にフェッチされるリモート MDX ファイルの両方をサポートしています。 Next.js プラグインは、Markdown と React コンポーネントを HTML に変換する役割を果たし、Server Components(App Routerのデフォルト)での使用をサポートします。
@next/mdx
@next/mdx
パッケージは、Markdown と MDX を処理できるように Next.js を設定します。 ローカルファイルからデータを取得し、.mdx
拡張子のページを直接 /pages
または /app
ディレクトリに作成できます。
MDX を Next.jsで設定し、使う方法をみていきましょう。
Getting Started
MDX をレンダリングするために必要なパッケージをインストールします:
npm install @next/mdx @mdx-js/loader @mdx-js/react @types/mdx
アプリケーションのルート(src/
または app/
の親フォルダのいずれか)に mdx-components.tsx
ファイルを作成します:
Good to know:
mdx-components.tsx
は App Router と MDX を使うために必要であり、これがなければ動作しません。
import type { MDXComponents } from 'mdx/types'
export function useMDXComponents(components: MDXComponents): MDXComponents {
return {
...components,
}
}
次に、プロジェクトのルートにある next.config.js
ファイルを更新して、MDX を使用できるように設定します:
const withMDX = require('@next/mdx')()
/** @type {import('next').NextConfig} */
const nextConfig = {
// `pageExtensions` MDX をサポートするための設定
pageExtensions: ['js', 'jsx', 'mdx', 'ts', 'tsx'],
// 任意で他の設定を追加
}
module.exports = withMDX(nextConfig)
その後、/app
ディレクトリ内に新しい MDX ページを作成します:
your-project
├── app
│ └── my-mdx-page
│ └── page.mdx
└── package.json
これで、MDX ページ内で Markdown を使用したり、直接 React コンポーネントをインポートできます:
import { MyComponent } from 'my-components'
# Welcome to my MDX page!
This is some **bold** and _italics_ text.
This is a list in markdown:
- One
- Two
- Three
Checkout my React component:
<MyComponent />