【AstroJS】 Markdown のフロントマターで設定した画像を最適化する
1. はじめに
yarn create astro
の blog テンプレートを使えば、すぐにブログサイトを構築することが出来ます。しかし、blog テンプレートで表示される一部の画像は、最適化処理がされていません。これは、<img>
タグを用いて画像を表示しているのが原因です。AstroJS では、<Image />
コンポーネントを使用することで画像が最適化されます 1 。本記事では、AstroJS の blog テンプレート内で使用されている <img>
タグを <Image />
コンポーネントに置換し、画像が最適化されるようにする手順について記述します。また、本記事は Node.js と Yarn がインストールされている前提で記述しています。
2. テンプレート
まずは、yarn create astro
で blog テンプレートを作成します。
3. 編集作業
初期設定では、heroImage
は文字列と定義されているので、これを画像に置換します。コンテンツコレクションについて詳しく知りたい方は AstroJS の公式ドキュメント 2 を参照ください。
次に、画像を表示している src/pages/blog/index.astro
と src/layouts/BlogPost.astro
を編集します。それぞれ、<Image />
コンポーネントをインポートして、<img>
タグを <Image />
コンポーネントに置換しています。
最後に、src/content/blog/*.md
の heroImage
で設定されている画像パスを編集します。
これで作業は完了です。yarn run dev
で起動し、http://localhost:4321/blog/ で表示されている画像のソースを表示させると、以下のように最適化されていると思います。
4. おわりに
ここまで、AstroJS の blog テンプレート内で使用されている <img>
タグを <Image />
コンポーネントに置換し、画像が最適化されるようにする手順について記述してきました。AstroJS は、画像の扱いに少し癖 (Markdown 本文で画像を読み込む際に、絶対パスを設定すると最適化されないなど) がある印象です。GatsbyJS 3 のように GraphQL で統一するということも出来ないので、お作法を覚えるしかないですね。画像周りの知見が溜まったら記事にしたいと思います。