--- // シリーズのページ(/series1〜8)。上に Studio で置いていた資料(Figma・スプレッドシートなど)、下にそのシリーズの記録 import Base from '../layouts/Base.astro'; import RecordCard from '../components/RecordCard.astro'; import LoadMore from '../components/LoadMore.astro'; import GuideBanner from '../components/GuideBanner.astro'; import ThinkingBanner from '../components/ThinkingBanner.astro'; import ServingBanner from '../components/ServingBanner.astro'; import { seriesCards, SERIES_PAGES } from '../lib/records'; import { media } from '../lib/media'; import staticPages from '../data/static.json'; import { SITE, SITE_NAME } from '../lib/seo'; export function getStaticPaths() { return Object.keys(SERIES_PAGES).map((series) => ({ params: { series } })); } const { series } = Astro.params; const conf = SERIES_PAGES[series]; const blocks = (staticPages[series]?.blocks || []).slice(1); // 先頭はページの見出し const items = await seriesCards(conf.series); const [enName, jaName] = conf.title.split(' | '); // 見出しは日本語を先に置く(検索結果のタイトルが見出しに置き換えられるため。2026-10-25) const heading = jaName ? `${jaName} | ${enName}` : conf.title; const description = conf.intro ? `${SITE_NAME} のシリーズ「${jaName || conf.title}」(${enName})。${conf.intro}` : `${SITE_NAME} のシリーズ「${jaName || conf.title}」(${enName})の記録一覧。ロボットとフィジカルAIを、29年のデザイナー経験から実機とシミュレーションで試した過程を、失敗も含めて公開しています。`; const jsonLd = { '@context': 'https://schema.org', '@type': 'CollectionPage', name: heading, description, url: `${SITE}/${series}`, inLanguage: 'ja', hasPart: items.slice(0, 50).map((c) => ({ '@type': 'BlogPosting', headline: c.title, url: `${SITE}/record/${c.slug}` })), }; ---

{heading}

{conf.intro &&

{conf.intro}

} {conf.points && (
{conf.points.map((p) => (

{p.h}

    {p.items.map((t) =>
  • {t}
  • )}
))}
)} {conf.guide &&
} {conf.thinking &&
} {conf.serving &&
} {blocks.map((b) => ( b.type === 'text' ? (b.link ? :

) : b.type === 'iframe' ?

{conf.sim && (

試算を試す | Simulator

{conf.sim.tabs && (
{conf.sim.tabs.map((t, i) => ( ))}
)} {conf.sim.obs && (

{conf.sim.obs.title}

{conf.sim.obs.note}

    {conf.sim.obs.points.map((t) =>
  • {t}
  • )}
{conf.sim.obs.label}

スマホの幅で表示しています。中のボタンも押せます

)}
)}

記録 | Record

{items.map((c) => )}