ろぼいんブログ

Astro v5.10リリース コンテンツを動的に取得できるライブコンテンツコレクションが追加

「5.10」というテキストが中央に書かれている画像
画像:Astro

コンテンツコレクションを動的に取得できるライブコンテンツコレクションや、レスポンシブ画像の対応などが含まれるAstro 5.10がリリースされました。

ライブコンテンツコレクションの実験的なサポート

Astro v5.10で実験的に追加されたライブコンテンツコレクションでは、ビルド時ではなく実行時にコンテンツをフェッチし、動的でリアルタイムなコンテンツを提供できるようになります。

広告

Astroのこれまでのコンテンツコレクションはビルド時に構築されていたため、動的なコンテンツを扱いたい場合はコンテンツコレクションを利用できませんでした。

ビルド時に構築される従来のコンテンツコレクションは、頻繁に更新されないコンテンツや、短時間でビルドできる軽量なサイトに適しています。

一方で、頻繁にコンテンツが更新される場合や、ユーザーごとにコンテンツをパーソナライズしたい場合にはライブコンテンツコレクションが便利です。

ライブコンテンツコレクションは、実行時にデータを取得する新しいローダーを使用します。

既存のローダーはビルド時に実行されますが、ライブローダーはユーザーがページにアクセスした際に実行されます。

広告

ビルド時に実行されるローダーの方がページの読み込み時のパフォーマンスは優れていますが、動的なコンテンツを扱いたい場合はライブローダーを利用できます。

(実は当サイトは最近、コンテンツの更新に時間がかかることを理由にAstroからNext.jsに移行したのですが、もう少し早くライブコンテンツコレクションがリリースされていれば…)

Astroでライブコンテンツコレクションを利用するには、設定を編集し、コンテンツコレクションを定義します。

astro.config.mjs
export default defineConfig({
experimental: {
liveContentCollections: true,
},
});
src/live.config.t
import { defineLiveCollection } from 'astro:content';
import { storeLoader } from './loaders/store';
export const products = defineLiveCollection({
type: 'live',
loader: storeLoader({
apiKey: process.env.STORE_API_KEY,
endpoint: 'https://api.mystore.com/v1',
}),
});

ライブコンテンツコレクションのデータを取得するには、getLiveCollection()getLiveEntry()を使用します。

詳細な実装方法は、Astroのドキュメントを参照してください。

広告

レスポンシブ画像が安定版に

Astroの<Image>コンポーネントのlayoutプロパティを使用すると、生成される<img>要素にsrcsetsizesが設定されます。

レスポンシブ画像の設定は、Astroの設定でグローバルに適用するか、画像ごとに適用できます。

グローバルに適用するには、astro.config.mjsimage.layoutを指定します。

astro.config.mjs
export default defineConfig({
image: {
responsiveStyles: true,
layout: 'constrained',
},
});

layoutプロパティには、constrainedfixedfull-widthのいずれかを指定できます。

<Image>コンポーネントのlayoutプロパティを指定すると、グローバルな設定を上書きできます。

広告
<Image
src="/hero.jpg"
alt="A panoramic view of the mountains"
layout="full-width"
/>

また、LCP(Largest Contentful Paint)要素に使用するためのpriorityプロパティも追加されており、このプロパティを指定するとloading="eager"decoding="sync"fetchpriority="high"が自動で設定されます。

<Image src="/hero.jpg" alt="Hero image" priority />

画像のトリミング方法とは一方法を制御できる、fitプロパティとpositionプロパティも追加されました。

<Image
src="/profile.jpg"
alt="Profile photo"
fit="cover"
position="center top"
width={300}
height={300}
/>

レスポンシブ画像機能を実験的な段階から利用していた場合は、experimental.responsiveImagesを削除し、image.responsiveStylestrueに設定します。

astro.config.mjs
export default defineConfig({
experimental: {
responsiveImages: true,
},
image: {
responsiveStyles: true,
},
});

そのほかの機能

静的ページでCSPを設定できるようになったほか、Cloudflare Workersのエントリーポイントファイルをカスタマイズできるようになりました。

参考リンク

記事をシェア

Xに共有するBlueskyに共有するMisskeyに共有するLINEに共有するThreadsに共有する

フォローして最新情報を入手

Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。

Googleの優先ソースとして追加するGoogleの優先ソースとして追加するXのロゴ
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。