Contentfulから取得した記事中の画像を、WebPに変換する
#Gatsby
#Contentful
にメンテナンス済み
Gatsby + Contentful の構成で、Contentful のマークダウン本文に埋め込んだ画像は、そのままでは元のサイズ・形式で配信されてしまいます。この記事では、gatsby-remark-images-contentful プラグインを使い、本文中の画像をリサイズし、対応ブラウザには WebP で表示させる設定手順を紹介します。
前提
- Gatsby のサイトで、
gatsby-source-contentfulにより Contentful からデータを取得している - 記事本文は Contentful の Long text(マークダウン)フィールドで管理している
- 画像変換に使う
gatsby-plugin-sharpが導入済み(未導入の場合は下記で一緒にインストールします)
プラグインをインストールする
使用するのは gatsby-remark-images-contentful です。マークダウン内の Contentful 画像を処理するプラグインで、gatsby-transformer-remark のサブプラグインとして動作します。
npm i gatsby-remark-images-contentful gatsby-transformer-remark gatsby-plugin-sharp
プラグインを追加する
gatsby-config.js に設定します。gatsby-remark-images-contentful は単独ではなく、gatsby-transformer-remark の plugins オプションの中に追加する点に注意してください。
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [
{
resolve: `gatsby-remark-images-contentful`,
options: {
maxWidth: 980,
withWebp: true,
},
},
],
},
},
主なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
maxWidth | 本文中の画像の最大幅(px)。コンテンツ幅に合わせて指定します |
withWebp | true にすると WebP 版も生成し、対応ブラウザには WebP で配信します |
設定後に gatsby clean してからビルドし直すと、記事中の画像が srcset 付きのレスポンシブ画像となり、対応ブラウザでは WebP が読み込まれます。ブラウザの開発者ツールのネットワークタブで、画像の種類が webp になっていることを確認してください。
うまく変換されない場合
- 画像が Contentful のアセット URL(
images.ctfassets.net)でないと対象になりません。外部サイトの画像は変換されません。 gatsby-transformer-remarkを使わずに別のマークダウン処理(MDX など)をしている場合、このプラグインは使えません。- 変更が反映されないときは
gatsby cleanでキャッシュを削除してください。