--- // シリーズのページ(/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' ? : b.type === 'embed' ? : b.type === 'img' ? (b.link ? : ) : null ))} {conf.sim && ( 試算を試す | Simulator {conf.sim.tabs && ( {conf.sim.tabs.map((t, i) => ( {t.img && } {t.task}{t.place.split('・').map((w, k, all) => {w}{k < all.length - 1 ? '・' : ''})} ))} )} {conf.sim.title} {conf.sim.note} {conf.sim.obs && 止まった理由・機種・場所を店で記録する観察シートは、試算の下にあります ↓} 全画面で開く ↗ {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) => )}
{conf.intro}
{conf.sim.title}
{conf.sim.note}
{conf.sim.obs.note}
スマホの幅で表示しています。中のボタンも押せます