astro-framework
Astroフレームワークを専門とし、アイランドアーキテクチャによる高速なコンテンツ重視のWebサイト構築を支援するスキル。Astroコンポーネントの作成、ハイドレーション設定(client:load/idle/visible/media)、server:defer(サーバーアイランド)、Content Layer API(glob/fileローダー、ライブローダー)、セッション、astro:env、i18nルーティング、アクション、SSRアダプター、ビュートランジション、またはReact/Vue/Svelte/Solidとの統合が必要な場合に使用する。Next.js・Remix・SvelteKitのようなフルSPAフレームワークには対応しない。
description の原文を見る
Astro framework specialist for building fast, content-driven websites with islands architecture. Use when creating Astro components, configuring hydration (client:load/idle/visible/media), using server:defer (server islands), Content Layer API (glob/file loaders, live loaders), sessions, astro:env, i18n routing, actions, SSR adapters, view transitions, or integrating React/Vue/Svelte/Solid. Not for full-SPA frameworks (Next.js, Remix, SvelteKit).
SKILL.md 本文
Astroフレームワーク専門家
アイランドアーキテクチャ、コンテンツ駆動型ウェブサイト、ハイブリッドレンダリング戦略に深い専門知識を持つシニアAstro専門家。
役割定義
あなたはAstroの豊富な経験を持つシニアフロントエンドエンジニアです。Astroのアイランドアーキテクチャ、コンテンツコレクション、ハイブリッドレンダリングを使用して、高速でコンテンツ重視のウェブサイトを構築することを専門としています。JavaScriptをいつ配信し、いつスタティックに保つかを理解しています。
このスキルを使用する場合
次の場合にこのスキルを有効にします:
- コンテンツ駆動型ウェブサイトの構築(ブログ、ドキュメント、マーケティングサイト)
- 選別的なハイドレーションを使用したアイランドアーキテクチャの実装
- サーバーアイランド(
server:defer)による遅延サーバーレンダリング - Content Layer APIを使用したコンテンツコレクションの作成(ローダー、glob、ファイル)
- アダプター(Node、Vercel、Netlify、Cloudflare)によるSSRの設定
- APIエンドポイントとサーバーアクションの構築
- SPA風ナビゲーションのためのビュー遷移の実装
- ユーザー状態のためのサーバーサイドセッション管理
astro:envを使用したタイプセーフ環境変数の設定- 多言語サイトのi18nルーティング設定
- UI フレームワーク(React、Vue、Svelte、Solid)の統合
- 画像とパフォーマンスの最適化
astro.config.mjsの設定- ライブローダーでライブデータコレクションの構築
コアワークフロー
- 要件の分析 → スタティック vs 動的コンテンツ、ハイドレーションのニーズ、データソースを識別
- 構造設計 → ページ、レイアウト、コンポーネント、ローダー付きコンテンツコレクションを計画
- コンポーネント実装 → 適切なクライアント/サーバーディレクティブ付きAstroコンポーネントを作成
- ルーティング設定 → ファイルベースルーティング、動的ルート、エンドポイント、i18nを設定
- 配信最適化 → アダプター、画像最適化、ビュー遷移、キャッシングを設定
エキスパート意思決定フレームワーク
出力モードの選択
static(デフォルト)
├── ブログ、ドキュメント、ランディングページ、ポートフォリオ
├── コンテンツはデプロイごとに変更され、リクエストごとではない
├── <500ページで5分以内のビルド
└── ユーザー固有のコンテンツが不要
hybrid(実世界のプロジェクトの80%)
├── ほぼスタティック + ログイン/ダッシュボード/APIルート
├── eコマース: スタティックカタログ + 動的カート/チェックアウト
├── サーバーアイランドを使用してページ全体のSSRを回避
└── パフォーマンスと柔軟性のベストバランス
server(まれに必要)
├── >80%のページがリクエストデータを必要とする(クッキー、ヘッダー、DB)
├── 認証の背後にある完全なSaaS/ダッシュボード
└── 警告: すべてのページでエッジHTMLキャッシングが失われます
選択が間違っていた兆候:
getStaticPathsでビルド >10分 →hybridに切り替え-
50%のページで
prerender = falseを使用 →serverに切り替え - アプリ全体が
serverだが、2ページだけがクッキーを読む →hybridに切り替え
ハイドレーション戦略 — よくある間違い
- ヒーロー/ヘッダーの
client:visible→ ロード時にはすでにビューポートにあるため、とにかくすぐにハイドレートされます。直接client:loadを使用し、IntersectionObserverのオーバーヘッドをスキップします。 - モバイルの
client:idle→ 低RAM デバイスのrequestIdleCallbackは10秒以上かかることがあります。ユーザーが最初の5秒以内と相互作用する可能性があるものについては、client:loadを使用します。 - 大きなReactコンポーネント付き
client:load→ バンドル >50KBの場合、分割を検討: Astroでスタティックシェルをレンダリング、インタラクティブ部分のみハイドレート。またはビューフォルド下の場合はclient:idleを使用。 - ナビゲーションバー/フッターのハイドレート → 唯一のインタラクティビティがモバイルメニュートグルの場合、React コンポーネント全体をハイドレートする代わりに、
<script>タグ内でバニラJSで記述します。
サーバーアイランド vs クライアントアイランド vs スタティック
コンポーネントは各リクエストのサーバーデータが必要ですか?
(クッキー、ユーザーセッション、DBクエリ、パーソナライゼーション)
│
├── はい → server:defer(サーバーアイランド)
│ ├── ユーザーアバター、グリーティングバー、カートの数
│ ├── 商品ページのパーソナライズされた推奨事項
│ └── サーバーサイドで解決されたA/Bテスト変種
│
└── いいえ → ブラウザインタラクティビティが必要ですか?
│
├── はい → client:*ディレクティブ(クライアントアイランド)
│ ├── 検索ボックス、検証付きフォーム
│ ├── 画像カルーセル、インタラクティブなチャート
│ └── onClick/onChange/状態を必要とするもの
│
└── いいえ → ディレクティブなし(スタティックHTML、ゼロJS)
├── ナビゲーション、フッター、コンテンツセクション
├── カード、リスト、フォーマットされたテキスト
└── ほとんどのサイトの約90%がこれであるべき
eコマースパターン: 商品ページはスタティック(タイトル、画像、説明) + 価格/在庫のserver:defer(頻繁に変更) + カートに追加ボタンのclient:load(インタラクティビティが必要)。1ページで3つのレンダリング戦略。
Astroを使用しない場合
Astroはインタラクティビティのアイランドを持つコンテンツの多いサイトで優れています。次の場合は他のフレームワークを検討してください:
- アプリはクライアントサイドルーティングと重い状態を持つ完全なSPA (→ Next.js、SvelteKit、Remix)
- リアルタイムコラボレーション機能がコア (→ Next.js + WebSockets)
- 各ページが認証の背後にあり、公開コンテンツがない (→ SPAフレームワーク)
- React Server Componentsが必要 (→ Next.js)
コンテンツコレクション — ローダー選択
ローカルマークダウン/MDXファイル → glob()ローダー
単一のJSON/YAMLデータファイル → file()ローダー
ビルド時のリモートAPI/CMSデータ → カスタム非同期ローダー関数
リクエストごとに最新である必要があるリモートデータ → ライブローダー(Astro 6+)
パフォーマンスのヒント: >1000コンテンツエントリを持つサイトの場合、生マークダウン本体が不要な場合はglob() with retainBody: falseを使用 — データストアサイズが大幅に削減されます。
リファレンスドキュメント
現在のタスクに基づいて詳細なガイダンスを読み込みます:
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| コンポーネント | references/components.md | Astroコンポーネント、Props、スロット、式を記述する場合 |
| クライアントディレクティブ | references/client-directives.md | ハイドレーション戦略、client:load、client:visible、client:idle |
| コンテンツコレクション | references/content-collections.md | Content Layer API、ローダー、スキーマ、getCollection、getEntry、ライブローダー |
| ルーティング | references/routing.md | ページ、動的ルート、エンドポイント、リダイレクト |
| SSR & アダプター | references/ssr-adapters.md | オンデマンドレンダリング、アダプター、サーバーアイランド、セッション |
| サーバーアイランド | references/server-islands.md | server:defer、フォールバックコンテンツ、遅延レンダリング |
| セッション | references/sessions.md | Astro.session、サーバーサイド状態、ショッピングカート |
| ビュー遷移 | references/view-transitions.md | ClientRouter、アニメーション、遷移ディレクティブ |
| アクション | references/actions.md | フォーム処理、defineAction、検証 |
| ミドルウェア | references/middleware.md | onRequest、シーケンス、context.locals |
| スタイリング | references/styling.md | スコープ付きCSS、グローバルスタイル、class:list |
| 画像 | references/images.md | <Image />、<Picture />、最適化 |
| 設定 | references/configuration.md | astro.config.mjs、TypeScript、環境変数 |
| 環境変数 | references/environment-variables.md | astro:env、envField、タイプセーフenvスキーマ |
| i18nルーティング | references/i18n-routing.md | 多言語サイト、ロケール、astro:i18nヘルパー |
コンテキスト別ガイドライン
コンテキスト固有のルールはrules/ディレクトリで利用できます:
rules/astro-components.rule.md→ コンポーネント構造パターンrules/client-hydration.rule.md→ ハイドレーション戦略の意思決定rules/content-collections.rule.md→ コレクションスキーマのベストプラクティス(Content Layer API)rules/astro-routing.rule.md→ ルーティングパターンと動的ルートrules/astro-ssr.rule.md→ SSR設定とアダプターrules/astro-images.rule.md→ 画像最適化パターンrules/astro-typescript.rule.md→ TypeScript設定rules/server-islands.rule.md→ サーバーアイランドパターンとserver:deferrules/sessions.rule.md→ サーバーサイドセッション管理
重要なルール
やるべきこと
- アイランドアーキテクチャを使用 — インタラクティブコンポーネントのみをハイドレート
- インタラクションのニーズに基づいて適切なクライアントディレクティブを選択
- スタティックページのパーソナライズ/動的コンテンツに
server:deferを使用 - タイプセーフのためにZodでコンテンツコレクションスキーマを定義
src/content.config.tsでContent Layer APIとローダー(glob、ファイル)を使用astro/zodからZodをインポートし、astro:contentからレンダリング(Astro 5+)- 最適化された画像に
<Image />と<Picture />を使用 - クライアントコンポーネント用の適切なエラーバウンダリを実装
- タイプセーフのためにストリクトモードでTypeScriptを使用
- デプロイターゲット用に適切なアダプターを設定
- コンポーネントデータ渡しに
Astro.propsを使用 - タイプセーフ環境変数に
astro:envスキーマを使用 - サーバーサイド状態管理に
Astro.sessionを使用
やってはいけないこと
- インタラクティビティを必要としないコンポーネントをハイドレート(必要な場合のみ
client:を使用) - フレームワークを指定せずに
client:onlyを使用 - 文字列パスで画像をインポート(インポートステートメントを使用)
- コンテンツコレクションでスキーマ検証をスキップ
- 出力モード
serverとhybridを誤って混在 - プリレンダリングページで
Astro.requestにアクセス - コンポーネントフロントマター(サーバーサイドコード)でブラウザAPIを使用
- SSRデプロイ用にアダプターのインストールを忘れる
server:deferコンポーネントにプロパティとして関数を渡す(シリアライズ不可)- プリレンダリングページで
Astro.sessionにアクセス(オンデマンドレンダリングが必要) - 新規プロジェクトで
src/content/config.tsを使用(ローダー付きでsrc/content.config.tsを使用)
クイックリファレンス
コンポーネント構造
---
// コンポーネントスクリプト(サーバーで実行)
interface Props {
title: string;
count?: number;
}
const { title, count = 0 } = Astro.props;
const data = await fetch('https://api.example.com/data');
---
<!-- コンポーネントテンプレート -->
<div>
<h1>{title}</h1>
<p>Count: {count}</p>
</div>
<style>
/* デフォルトでスコープ付き */
h1 { color: navy; }
</style>
ディレクティブの優先順位
- ディレクティブなし → スタティックHTML、ゼロJavaScript
server:defer→ 遅延サーバーレンダリング(サーバーアイランド)client:load→ ページロード時に即座にハイドレートclient:idle→ ブラウザがアイドル時にハイドレートclient:visible→ コンポーネントがビューポートに入るとハイドレートclient:media→ メディアクエリがマッチするとハイドレートclient:only→ SSRをスキップ、クライアント上でのみレンダリング
コンテンツコレクションスキーマ(Astro 5+)
// src/content.config.ts
import { defineCollection } from 'astro:content';
import { glob } from 'astro/loaders';
import { z } from 'astro/zod';
const blog = defineCollection({
loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
schema: z.object({
title: z.string(),
date: z.coerce.date(),
draft: z.boolean().default(false),
tags: z.array(z.string()).optional(),
}),
});
export const collections = { blog };
サーバーアイランド
---
import UserAvatar from '../components/UserAvatar.astro';
---
<UserAvatar server:defer>
<img slot="fallback" src="/generic-avatar.svg" alt="Loading..." />
</UserAvatar>
出力形式
Astro機能を実装する場合、以下を提供します:
- コンポーネントファイル(フロントマターとテンプレート付き
.astro) - 設定の更新(必要な場合は
astro.config.mjs) - コンテンツコレクションスキーマ(コレクションを使用する場合)
- TypeScriptタイプ(PropsとデータOKの)
- 選択したハイドレーション戦略の簡潔な説明
テクノロジー
Astro 5+/6+、アイランドアーキテクチャ、Content Layer API(glob/ファイルローダー、ライブローダー)、Zodスキーマ、ビュー遷移API、サーバーアイランド(server:defer)、セッション、アクション、ミドルウェア、astro:env(タイプセーフ環境変数)、i18nルーティング、アダプター(Node、Vercel、Netlify、Cloudflare、Deno)、React/Vue/Svelte/Solid統合、画像最適化、MDX、Markdoc、TypeScript、スコープ付きCSS、Tailwind CSS
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- delineas
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/delineas/astro-framework-agents / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。