Astro
Astroでgenko.meの記事一覧・詳細をサーバーでレンダリングし、シェアボタンだけをislandとして動かす方法と向き不向き。
Astroはページを既定でサーバー側(ビルド時、またはリクエスト時)でHTMLへ変換し、クライアントへは基本的にJavaScriptを送りません。genko.meのようなCMS駆動のコンテンツサイトでは、この「既定でJS 0kb」がそのまま効きます。
取得は.astroファイルのフロントマター(ファイル先頭の---で囲んだ部分)で@genko-me/sdkを直接呼び、結果をAstroのテンプレート構文でマークアップに流し込みます。List・Viewのような、取得から表示までを任せる専用部品は用意していません。クリック操作が要る部分——シェアボタンなど——だけ、ReactやVue・SvelteのようなUIフレームワークを1つ選び、その部分だけをisland(client:*ディレクティブを付けたコンポーネント)にします。
すでにNext.js・Nuxt・SvelteKitで組んでいるなら、Next.js・Nuxt・SvelteKitを参照してください。それぞれ専用の表示部品があり、そちらのほうが近道です。
使うパッケージ
| パッケージ | 役割 |
|---|---|
@genko-me/sdk | フロントマターから直接呼ぶ配信APIクライアント。ランタイム依存ゼロで、ビルド時・リクエスト時どちらの実行でも同じように動く |
@genko-me/react(@astrojs/reactと組み合わせ)、または@genko-me/vue(@astrojs/vue)・@genko-me/svelte(@astrojs/svelte) | シェアボタンなど、クリック操作が要る部分だけをislandにする場合 |
この対象で使えないもの。 @genko-me/react/nextのList・View・Pagination——Next.jsのApp RouterとServer Actionsに依存しており、Astroでは動きません。Astro向けのページ送りは、静的なページ番号ルートで自分で組み立てます(実践)。
向いている用途
- 記事一覧・詳細が中心で、検索流入を重視するサイト。ほとんどのページがJS 0kbで届く
- Vue・Svelte・Reactを混在させたい、あるいは将来UIフレームワークを乗り換えたいサイト(Astroはisland単位でフレームワークを選べる)
- 大半のページはビルド時に確定させ、下書きプレビューのページだけリクエスト時レンダリングに切り替えたい構成
向いていないもの
- 画面のほとんどがクライアント側の状態でできている、SPAに近いアプリ。Reactだけの構成、あるいはNext.js・Nuxt・SvelteKitのほうが部品も揃っています
- すでにNext.js・Nuxt・SvelteKitで構築済みのサイト。専用の表示部品がある分、そちらを使うほうが近道です
次に読む
最終更新: 2026年9月17日