Next.jsのBlog記事にメイン画像を埋め込むスマートな方法

2021-03-27
Main Image

目次

こんにちは。

Next.jsというWeb開発フレームワークで作ったブログを運営しています。このブログのことですね。

最近、記事中に何でも良いので画像がついていると少し見栄えが良くて心地よいな、と思いました。

とはいえ、毎回記事中にimgタグを入れてメイン画像を割り当てるのは少し不格好です。

ということで、今回はNext.jsチュートリアルのブログを少し弄ってスマートに画像を出力する仕組みを作ってみようと思います。

チュートリアルの完成形(サンプルコード)を導入する方法はこちらをご参考ください。

チュートリアルからの変更点

以下のファイルを変更します。

  • lib/posts.ts
  • pages/posts/[id].tsx

まず、posts.tsで一番下の関数内のreturnimage要素を追加します。 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版もあります。日本語の解説書があるのは嬉しいですね。

React.js&Next.js超入門 第2版

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord