Next.jsのBlog記事にメイン画像を埋め込むスマートな方法
目次
こんにちは。
Next.jsというWeb開発フレームワークで作ったブログを運営しています。このブログのことですね。
最近、記事中に何でも良いので画像がついていると少し見栄えが良くて心地よいな、と思いました。
とはいえ、毎回記事中にimgタグを入れてメイン画像を割り当てるのは少し不格好です。
ということで、今回はNext.jsチュートリアルのブログを少し弄ってスマートに画像を出力する仕組みを作ってみようと思います。
チュートリアルの完成形(サンプルコード)を導入する方法はこちらをご参考ください。
チュートリアルからの変更点
以下のファイルを変更します。
lib/posts.ts
pages/posts/[id].tsx
まず、posts.ts
で一番下の関数内のreturn
にimage
要素を追加します。
matterResult
は記事内の文字列情報が入ります。
return {
id,
contentHtml,
...(matterResult.data as {
date: string;
title: string;
image:string;
})
}
次に、[id].tsx
内で、2箇所変更します。
1箇所目は、Post
関数内の上の方で定義しているpostData
オブジェクトの型情報です。ここに先程同様、string
型のimage
を追加します。
postData: {
title: string
date: string
image: string
contentHtml: string
}
2箇所目は、return
文の中です。ここにimage
から取得した文字列を元に画像を出力するHTMLコードを作成します。
今回は記事の日付の下にメイン画像を表示したいので、{postData.date}
を出力している下に以下の文を書き込みました。
<Image
src={`/posts/${postData.image}`}
height={200}
width={200}
alt="Main Image"
/>
これで、piblic/posts/
ディレクトリにあるimage
の文字列に一致する画像ファイルを参照します。
Next.jsのImage
コンポーネントについてはこちら。
Next.js next/image
実際に記事を作ってみる
それでは新しく記事を作ってみましょう。
posts/
に新しいMarkdownファイルを作成し、ヘッダ部分に以下を書き込みます。
---
title: "Next.jsのBlog記事にメイン画像を埋め込むスマートな方法"
date: "2021-03-27"
image: "hogehoge.png"
---
hogehoge.png
という画像ファイルを用意してpublic/posts/
に格納します。
これで、記事の日付の下に画像が表示されるようになりました。
この記事ページの先頭の画像も、実際にこの方法で表示させています。
まとめ
というわけでNext.jsフレームワークを利用して、チュートリアルに小変更を加えて画像ファイルをスマートに表示させてみました。
毎回記事中にimgタグを書き込む手間なしで、見栄えの向上ができました。
画像サイズやスタイルなどは[id].tsx
内のImage
コンポーネントだけ管理すれば良いのでラクですね。全ての記事に統一感が出るようにもなりました。
category
などの属性も加えて、image
が指定されなかったらcategory
のデフォルト画像を出力する、といったような応用もできそうですね。
参考 : Next.jsの入門書がAmazonで購入可能です!Kindle版もあります。日本語の解説書があるのは嬉しいですね。