PR

【Next.jsブログ構築】WordPressから移行したMarkdown記事を表示する方法(Tailwind CSS対応)

Next.js で WordPress から移行した Markdown 記事を表示する手順をイメージしたアイキャッチ画像。ノートPCに Markdown ブログが表示され、Tailwind CSS や React Markdown によるデザイン適用や変換処理を表現したイラスト。 VPS・RentalServer
この記事は約8分で読めます。
記事内に広告が含まれています。
スポンサーリンク

これまでの Next.js ブログサイト構築シリーズをまとめたページは以下の通りです。

前回の記事では、VPS 上で Nginx を設定し、
Next.js の初期システムをインターネットに公開するインフラ構築を行いました。

サーバーの黒い画面と睨み合うハードな作業はひと段落し、
今回からは、いよいよ本格的な Web 制作のステップに入ります。

この記事では、WordPress から抽出して手元に確保しておいた
Markdown 形式の記事データを、Next.js のシステムで読み込み、
ブラウザの画面に表示させる手順を解説します。

いよいよ Next.js を使ったブログサイト構築のスタートです。
WordPress を使ってきた非エンジニアの私にとって、
ターミナルでの操作は緊張感がありますが、
新しいシステムで実際にサイトが表示されていく過程は、
非常に楽しいので、ぜひ取り組んでみてください。

gray-matter と react-markdown の導入

Next.js は、標準状態では Markdown ファイルを解釈できません。まずは、Markdown を正確に読み取り、綺麗な Web ページに変換するための定番ツールを2つ導入します。

VPS に接続し、ブログのシステムフォルダ(example-blog)に移動して、以下のコマンドを実行します。

cd ~/example-blog
npm install gray-matter react-markdown

それぞれのツールには、以下のような役割があります。

  • gray-matter は、記事データの上部にあるタイトルや日付などの設定情報(フロントマター)を整理して読み取るためのツールです。
  • react-markdown は、Markdown で書かれた本文(見出しや箇条書きなど)を、Web サイト用の画面(HTML)に安全に変換して表示するツールです。

テスト用の Markdown 記事を配置する

次に、Next.js に読み込ませるためのテスト記事を VPS 上に用意します。

  1. 以下のコマンドで、記事データを保管するための専用フォルダ posts を作成します。
mkdir ~/example-blog/posts
  1. 作成したフォルダ内に、テスト用の Markdown ファイルを作成してテキストエディタを開きます。(ここでは読者に分かりやすいよう sample-post.md というファイル名で進めます)
nano ~/example-blog/posts/sample-post.md
  1. 開いた黒い画面に、WordPress から抽出しておいたテスト用 Markdown 記事の中身(一番上の --- から最後まで)をすべて貼り付けます。
  2. Ctrl + O を押し、Enter で保存してから、Ctrl + X で終了します。

トップページ(page.tsx)を書き換えて記事を表示する

準備が整ったので、ブラウザでアクセスした時に最初に表示されるトップページのプログラムを書き換えて、先ほど保存したテスト記事を表示させます。

  1. トップページを作っているプログラムファイルを開きます。
nano ~/example-blog/app/page.tsx
  1. サンプルとして書かれている英語のコードをすべて消去し、以下のプログラムにまるごと書き換えます。
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
import ReactMarkdown from 'react-markdown';

export default function Home() {
  // 1. さきほど保存したMarkdownファイルの場所を指定して読み込む
  const filePath = path.join(process.cwd(), 'posts', 'sample-post.md');
  const fileContents = fs.readFileSync(filePath, 'utf8');

  // 2. gray-matterで、上部の設定情報(フロントマター)と本文を切り分ける
  const { data, content } = matter(fileContents);

  // 3. 画面に表示するHTMLの枠組み
  return (
    <main className="max-w-3xl mx-auto p-8">
      {/* タイトルを表示 */}
      <h1 className="text-3xl font-bold mb-8">{data.title}</h1>
      
      {/* react-markdownを使って本文を表示 */}
      <div>
        <ReactMarkdown>{content}</ReactMarkdown>
      </div>
    </main>
  );
}
  1. 保存して終了後、以下のコマンドを実行して Next.js を起動します。
npm run dev

起動したら、ブラウザでサイトにアクセスしてみます。

ここまでの作業で文字は無事に表示されると思います。
しかし、見出しなどのデザインが全く反映されていません。

最初この画面を見たときは、「何か設定を間違えたのか」と少し焦りましたが、実はこれ、失敗ではありません。次に行うデザイン設定のための、誰もが通るお約束の通過点です。

Tailwind CSS の公式プラグインでブログデザインを復活させる

文字がのっぺりしてしまうのは、導入している Tailwind CSS というデザインツールが、標準の Web デザインをすべて平坦にリセットする機能を持っているためです。

公式プラグインを導入して、ブログらしい綺麗な装飾を復活させます。

  1. 新しいツールや設定を追加する前に、ターミナル上で Ctrl + C を押し、起動中の Next.js を一旦停止させます。
  2. 停止して元の入力待ち($)に戻ったら、以下のコマンドで装飾用の公式プラグインをインストールします。
npm install @tailwindcss/typography
  1. 全体の設定ファイルを開きます。
nano ~/example-blog/app/globals.css
  1. 一番上のほうに @plugin "@tailwindcss/typography"; という1行を追記して保存します。
@import "tailwindcss";
@plugin "@tailwindcss/typography"; /* ←これを追記します */
  1. 先ほどの app/page.tsx を再び開き、表示部分の <div> に魔法のクラス名(prose prose-invert)を追加して保存します。
      {/* react-markdownを使って本文を表示 */}
      <div className="prose prose-invert max-w-none">
        <ReactMarkdown>{content}</ReactMarkdown>
      </div>

これで npm run dev で Next.js を再起動すると、見違えるように綺麗なブログ記事のデザインが反映されます。

HTML タグと画像の表示を整える仕上げ作業

最後に、WordPress から移行した記事に含まれる、取り消し線などの HTML タグや画像を正しく表示させるための仕上げを行います。

rehype-raw で HTML タグを許可する

Next.js はセキュリティ対策として、Markdown 内の HTML タグを標準でブロックします。これを許可するための追加ツールを導入します。

  1. 以下のコマンドでツールをインストールします。
npm install rehype-raw
  1. 再び app/page.tsx を開き、一番上にツールの読み込みを追記し、表示部分に組み込んで保存します。
// 一番上に追記
import rehypeRaw from 'rehype-raw';

// 表示部分を以下のように書き換え
<ReactMarkdown rehypePlugins={[rehypeRaw]}>{content}</ReactMarkdown>

public フォルダを使って画像を表示する

Next.js では、ブログで使う画像はすべて public という特別なフォルダに入れておくルールがあります。

  1. 画像を入れる専用フォルダを作成します。
mkdir ~/example-blog/public/images
  1. 作成したフォルダに、使用する画像ファイル(.webp など)をパソコンからアップロードします。
  2. Markdown 記事(sample-post.md)を開き、画像のパスの先頭に / を付け足し、実際のファイル名と完全に一致するように記述を修正します。

これで、 npm run dev で Next.js を再起動すると、Markdown の書式が反映され、画像も表示された記事が表示されます。

なお、Markdown を書く際のちょっとしたコツですが、日本語の文章中で **太字** のように装飾を使う際、文字に密着させるとうまく変換されないことがあります。**太字** のように、装飾記号の前後に半角スペースを空けるのがトラブルを防ぐ鉄則です。

まとめ

今回は、WordPress から抽出した Markdown 記事を Next.js で読み込み、Web ページとして綺麗に表示させるまでの手順を解説しました。

文字の表示から始まり、Tailwind CSS の調整、HTML タグの許可、画像のパス設定と段階を踏むことで、Next.js 特有のルールを深く理解することができました。

自分の書いた記事が新しい環境で表示された瞬間の喜びは、Web 制作ならではの醍醐味です。

次回は、この仕組みをさらに応用して、複数の記事データを読み込む新着記事の一覧(トップページ)を作る作業に進みます。

コメント

タイトルとURLをコピーしました