---
title: "いま考えていることを、言葉だけで伝える ― 縦書きのページを作った"
slug: what-i-think-now-page
date: 2026-10-24
day: 373
cover: "/media/LOG373_cover.jpg"
meta_description: "考察記事66本から、いま考えていることを1ページにまとめた。写真も動画も使わず縦書きで組み、文はcodexで3回確かめた。TOPと考察記事の一覧に入口を置き、アクセスの記録を見て位置を決めた。"
tags: [縦書き, タイポグラフィ, 組版, 考察記事, 引用の確かめ, codex, ファクトチェック, アクセス解析, コンテナクエリ, 配膳ロボット, Astro, デザインの詰め方]
series: "ひとり研究所の裏側"
---

このサイトには、研究の記録が370本ほど並んでいます。ロボットアームの関節の角度、学習の数字、試算のコード。記録としてはそろっていますが、初めて来た人が「この人は何を考えて、何をしようとしているのか」を知るには、どれから読めばいいのか分かりません。そこで、2026年2月から10月までに書いた考察記事66本を読み直し、いま考えていることと目指すことを、1ページにまとめました。pixelstomotors.com/thinking です。

このページには、ロボットの写真も動画も、図も入れていません。言葉だけで伝わるかを試すページなので、文字の組み方（書体・大きさ・行の間・余白）だけで読ませるように作り、最後は縦書きにしました。経歴（何年の経験、どこに住んでいる、前の仕事）も書いていません。履歴書のような事実より、いま何を考えていて、何を目指しているかのほうが、読む人にとって大事だと考えたためです。

もう一つ気をつけたのは、本人が言っていないことを、本人の考えとして書かないことです。考察記事の多くは、AI（Claude）との対話をまとめたものです。記事の中には、本人の発言と、AI が書いた説明が混ざっています。そのまま抜き出すと、AI の説明が「本人の考え」としてページに載ってしまいます。そこで、**かぎかっこ「」で引くのは、対話の中で本人が実際に言った言葉だけ**と決めました。さらに、まとめた文が記事の本文で言えるかを、別の AI（codex）に反論するつもりで3回確かめてもらいました。1回目は「直してから」という判定で、強い指摘が11件ありました。

ページができたあとは、入口を作りました。TOP と考察記事の一覧（/series5）に入口を置き、同じ並びに、ほかの2つの案内ページ（ロボットAIの学習用GPUを買うか借りるか・配膳ロボットの導入前シミュレーション）への入口も、カード2枚にして置きました。TOP のどこに置くかは、サイトのアクセスの記録で決めました。TOP を開いた人のうち、ページの4分の1の深さまで読んだ人は42%しかいませんでした。一番下に置くと、ほとんどの人に届きません。

| やったこと | なぜ | 結果 |
|---|---|---|
| 考察記事66本から、本人の考え・気持ち・迷いを抜き出した | 何を考えている人かが、記録の量からは分からないため | 考えの軸を5つにまとめた |
| 「」は本人の発言だけにし、codex で3回確かめた | AI の説明を本人の考えとして載せないため | 強い指摘は11件、0件、8件。すべて直してから公開した |
| 写真なし・縦書きのページにした | 言葉だけで伝わるかを試すため | /thinking として公開した |
| TOP・/series5・/series8 に入口を置いた | ページを作っても、見つけてもらえなければ読まれないため | TOP は4コマとシリーズの間に置いた |
| 配膳ロボットの入口の絵を作り直した | 縦に切り抜いた図では、何の図か分からなかったため | 同じ店を斜め上から見た立体の絵にした |

この記事の効果の書き方について先に断っておきます。入口を置いた効果は、公開したばかりなので、まだ測れていません。ここに書く効果は見込みで、来週のアクセスの記録で確かめます。アクセスの数字は、2026年10月24日の13時台に取った値です。


## 作業ログ ― 考察記事から、考えのページを作り、入口を置くまで

### 最初の依頼：LP ではなく、考えや気持ちを抜き出すページ

依頼は次のとおりでした。

> https://pixelstomotors.com/series5 考察記事をベースにエイイチ本人が何を考え、どんな意図で、ロボティクスやロボット、AIを使うことによってどんなことが可能になったり、技術向上が目指せるのかを伝える記事を作りたい。LPとは違くて、考察記事から考えや、思考、感情、意思を抜き出してわかりやすく伝えるためのページを作ることを意図としています。どんな構成にするべきかまずはベースから考えてみてください。

最初に出した構成案には、「29年のデザイナー経験」「秋田でひとりで研究している」「ラジコンの製造、アパレルで遠くの工場が実行できる仕様書を書いてきた経験」のような経歴の行が入っていました。これに対する指摘です。

> 事実ベースの履歴書みたいなのはノイズ。今何を考えていて何を目指すのかの方が重要度が高いため。

経歴の行はすべて外しました。ページに載せるのは、いま考えていること、考えの軸、考えが変わったこと、まだ分からないこと、目指すこと、の5つです。

### 66本を3つに分けて読み、本人の言葉と AI の文を分けた

考察記事は LOG53 から LOG336 までの66本で、本文を合わせると約120万バイトありました。1回で読み切れないので、前期・中期・後期の22本ずつに分け、3つの作業に分けて全文を読みました。各記事から、主張・本人の言葉（最大3つ）・現状の見方・目指すこと・迷いを抜き出しています。

抜き出すときに、言葉ごとに次の印を付けました。

| 印 | 何か | ページでの扱い |
|---|---|---|
| 【本人】 | 対話の中で、独立した行として置かれた本人の問いかけや感想。直後に AI の説明が続く | 「」で引いてよい |
| 【AI/一般論】 | 本人の発言を受けた AI の説明、データや業界の説明 | 本人の言葉として引かない |
| 【不明】 | 一人称の地の文。本人の言葉か AI の文章か区別できない | 本人の言葉として引かない |

この分け方で、引ける言葉はかなり減りました。たとえば LOG174・181・187・207 は全文が一人称の文章で、【本人】と分かる行が1つもありませんでした。考えとしては大事でも、「」で引くことはしていません。

### codex に3回、反論するつもりで確かめてもらった

下書きができるたびに、codex（OpenAI のコードと文章を扱う AI。Mac のターミナルで動かした）に、「この下書きを論破するつもりで」検証を頼みました。出典として、66本の本文をすべて1つのファイルにまとめて渡し、本文で確かめられないことは「未確認」と書くように頼んでいます。

| 回 | 判定 | 強い指摘（❌） | 注意（⚠️） | 主な指摘 |
|---|---|---|---|---|
| 1回目 | 直してから | 11 | 15 | 原因を1つに決めつけた最初の一文、「可能になること」で効果を約束した文、本人が見ていない場面 |
| 2回目 | 直してから（1回目より改善） | 0 | 7 | 引用の前提、評価の物差しの対象、過去の迷いを今の状態として書いた文 |
| 3回目 | 直してから | 8 | 7 | 計画をやったことに変えた文、AI の説明を本人の経験に移した文、一度の判断を今の習慣に広げた文 |

3回目は、各軸に「なぜそう考えるか」と本人の言葉を足し、「考えが変わったこと」の節を新しく作ったあとの検証です。足した文に、また強い指摘が8件付きました。直した例を並べます。

| 下書きの文 | 何が違っていたか | 直したあと |
|---|---|---|
| ロボットはもう動く。止まっているのは、何を任せるかを誰も決めていないから。 | 技術は解決済み、原因は1つ、と66本の考えを1つの説明に縮めていた | ロボットに、何を任せればいいのか。動かすことと、現場で使われることは違う。 |
| 大きな会社が100万回の試行で進めていることを、手元のアームで10回から始めました。 | 100万は学習に使った操作の記録の件数で、試行の回数ではない。10回やった記録は本文にない（構想だった） | 大きな会社は、約100万件のロボット操作の記録で学習させています。手元では、アームを動かした結果をスマホで撮り、AIに成否を判定させるところから、小さく確かめる方法を考えました。 |
| 15ほどの事実のうち、裏を取っていたのは4つだけでした。それからは別の目で確かめるようにしています。 | 数字は AI の側の振り返りで、本人の確認不足ではない。確かめる習慣はそれより前（LOG195）からあった | 書いた説明も、根拠まで確かめ直す（考えが変わったこと） |
| 深度カメラのノイズが学習の邪魔になると知り、まず普通のカメラでやると決めた | 決めたのが先で、ノイズの話はあとから聞いた AI の説明だった | 「考えが変わったこと」から外し、軸5に「深度カメラを買う前に、普通のカメラでできる限界まで試すと決めました」とだけ書いた |
| セルフレジの横に店員が立っている光景から考え直した | 本文で確かめられない場面だった | 外した |

**ねらい・変わったこと・見込める効果**
- ねらい：本人が言っていないこと・やっていないことを、本人の考えや実績としてページに載せない。
- 変わったこと：強い指摘は1回目11件・2回目0件・3回目8件で、すべて直すか外した。「」の引用は、すべて本文と一字一句同じ発言から取った。
- 見込める効果：ページを読んだ人が元の記事を開いても、書いてあることが食い違わない。各段落の横に元の記事の LOG 番号を置いたので、確かめたい人はたどれる（読まれたかは、公開後のアクセスの記録で見る）。

3回分の検証結果は、この記事の終わりに全文を載せています。

### ページの中身：5つの考えの軸と、考えが変わったこと

ページは次の順に並べました。

| 節 | 中身 |
|---|---|
| 最初の画面 | ロボットに、何を任せればいいのか。動かすことと、現場で使われることは違う。その間を、実機を触りながら考えています。 |
| いま見えていること | 公開されている事例では、ふだんの動きはできていても、例外が起きると人の手に戻っていた（LOG286・306）。本人の言葉「今のロボットの方向性はなにかピントがズレているのでは？」（LOG314） |
| 考えの軸 | 1 人が足りない仕事から、任せる作業を探す／2 今の技術で成り立つ形を見極める／3 次にどう動くかを、人に伝える／4 人が自分でできる余地を残す／5 個人で試せて、他の人も確かめられる形にする |
| 考えが変わったこと | どんなロボットかを考える前に、人の苦痛を整理する（LOG264）／書いた説明も、根拠まで確かめ直す（LOG286） |
| まだ分からないこと | 自分から問いかけるロボットは役に立つのか（LOG262）など3つ |
| 目指すこと | 本人の言葉（LOG214）と、ソフトの側でできることを続けるという立ち位置（LOG336） |
| 最後 | メッセージを送るボタン1つ |

各軸は、気づいた場面 → 本人の言葉 → なぜそう考えるか → 本人の言葉 → やりたいこと → 元の記事、の順です。本人の考えは「〜だと思う」と言い切り、効果やできることは「〜したい」と書きました。まだ確かめていないことを、できたことのように書かないためです。

ページの日付は「2026年10月までの考察記事から」にしました。最初は「考察記事66本から」と本数を書いていましたが、記事が増えると数字が古くなります。

> 「66本」をどう書くかは…「2026年10月までの考察記事から」 本数が記事が増えていくごとに動的に変わるならそのままでもいいよ

本数を自動で数え直す方法もありましたが、ページの文は codex で確かめた66本から書いたものです。本数だけが増えると、中身と数字が合わなくなります。そのため、日付で書く形にしました。

【画像】LOG373_03_thinking_now_pc.png 考えのページの「いま見えていること」の節。左の余白に元の記事の LOG 番号、右に横組みの本文、その下に縦書きの本人の言葉

### 「」は本人の言葉だけにした

途中の版では、まとめた文の中に「」が多く入っていました。概念を強調するための「」と、本人の言葉の「」が混ざると、どれが本人の発言か分かりません。

> 無駄な「」書きは無くすように注意してください。「」つけるなら意図を教えてください。

> 「」は俺の言葉という意図かな？

そのとおりで、「」を残したのは本人の発言の引用だけです。まとめた文の中の強調の「」はすべて外しました。引用は、縦書きの独立した段落にして、地の文（まとめた文）と見た目でも分けています。

### 言葉だけのページのデザイン：横組みと縦書きの2案

> ロボットの絵や動画がなくても伝わるくらい言葉に特化したページにしてください。LPではありません。

> デザインも現行サイトや、今作っているLPとは変える必要があります。言葉に特化したサイトを徹底的にチェックしてみてください。

言葉が主役のサイトを24件開いて、最初の画面と、少しスクロールした画面を撮って見比べました。英語の読み物（Paul Graham・Craig Mod・iA・Ink & Switch・Stripe Press・Linear の Method・Frank Chimero・Robin Sloan・Bret Victor・Butterick's Practical Typography）、日本語の読み物と理念のページ（アジャイルソフトウェア開発宣言の日本語訳・ほぼ日・中川政七商店・ソニー・SmartHR・Takram・青空文庫・note・暮しの手帖・良品計画・メルカリ・サイボウズ・岩波書店）などです。見えたのは次のことでした。

- 色はほぼ使わない。白に近い地と、黒に近い文字だけ
- 1行の長さを短く保つ（日本語で30〜40字くらい）
- 行の間を広く取る（文字の大きさの1.8〜2倍）
- 飾りの線や囲みを使わず、余白だけで区切る
- 日本語の理念のページには縦書きが多い

> 1. 横組みの読み物…2. 縦書き…この二つを作って比較したいので進めてください。黒や白の色、余白など、文字、行間、文字間など、文章だけに特化しているので大事なのは派手なビジュアルとは別の部分です。それらを徹底的に考え抜いて提案してください。

横組みと縦書きの2案を、同じ文・同じ決まりで作りました。決めた値は次のとおりです。

| 項目 | 値 | 理由 |
|---|---|---|
| 書体 | Noto Serif JP | Shippori Mincho B1・Zen Old Mincho・BIZ UDPMincho と同じ文で並べ、細い所がかすれず、画面で読みやすかった |
| 地の色 | #f5f3ee | 真っ白より目が疲れにくい、紙に近い色 |
| 文字の色 | #22201c（地との差 14.7:1） | 真っ黒より柔らかく、差は十分に取れる |
| 補足の文字の色 | #696459（地との差 5.3:1） | LOG 番号などの小さな文字でも読める差（4.5:1 以上） |
| 本文の大きさ | 18px（スマホ 16.5px） | |
| 行の間 | 文字の1.95倍（スマホ 1.9倍） | |
| 文字の間 | 0.04em | 明朝は詰まって見えるので少しだけ空ける |
| 1行の長さ | 36字（縦書きのページの横組みの列は28字） | |
| 縦の間隔 | 本文1行の高さの倍数だけ | 間隔がそろい、線を引かなくても区切りが見える |
| 線・飾り | 使わない | |

文の折り返しには、ブラウザの `word-break: auto-phrase`（日本語を文節の切れ目で折り返す）と `text-wrap: pretty`（最後の行に1〜2字だけ残るのを避ける）を使いました。

比べた結果、エイイチが縦書きを選びました。

【画像】LOG373_01_thinking_top_pc.png 縦書きにした考えのページの最初の画面。右から、日付の小さな文字、大きな問い「ロボットに、何を任せればいいのか。」、説明の2行

【画像】LOG373_04_thinking_top_sp.png スマホで見た考えのページの最初の画面

### 縦書きの英字と数字を、組版の決まりに合わせた

> 縦書きの英字ってこういう書き方だっけ？いろんなページを調査して見直してください。

最初の版は、英字をすべて横に倒していました。W3C の「日本語組版処理の要件」（JLREQ）と、縦書きの新聞・書籍のサイトを見直し、次の決まりにしました。

| 文字 | 縦書きでの置き方 | 例 |
|---|---|---|
| 小文字を含む英単語 | 横に倒す（読むときは首を右に傾ける） | micro factory |
| 5字以下の大文字の略語 | 1字ずつ立てる | AI |
| 2桁の数字、数字と英字1字 | 1字分の幅に横に並べる（縦中横） | 2D |

【図解】LOG373_tate_rules.html

縦中横の「2D」は、そのままだと行の真ん中から少しずれて見えました。2字を半分の幅の字形に切り替える指定（`font-feature-settings: "hwid" 1`）を足して、真ん中にそろえています。

縦書きの引用の折り返しも手で決めました。縦書きでは、ブラウザに任せると文節の途中で折れることがありました。文節で区切る仕組み（BudouX）も試しましたが、「方向性」を「方」と「向性」に分けたため使っていません。折り返す位置を「／」で書いた一覧（`TATE_BREAKS`）を作り、ビルドのときに、一覧の文から「／」を除いたものが元の引用と一字でも違えば止まるようにしました。引用を写し間違えたまま公開されることはありません。

> 縦書きですが、縦に早く読むので、もう少しコンテンツ幅が狭い方が良さそうです。

> タイトルと説明文、本文のジャンプ率をもう少しだけ上げてください（もしくはタイトルは太く？）

> 横のテキストと縦のテキストのマージンが少ない。もっと余白を

縦書きのページの横組みの列を36字から28字に狭めました。題名を太くし（700）、説明文を 1.375rem に上げて、本文との大きさの差を広げました。縦書きの引用の上下の余白は、本文1行の高さの3倍（スマホは2.2倍）にしています。

【画像】LOG373_02_thinking_axis_pc.png 考えの軸1の節。左の余白に「気づいた場面」「なぜそう考えるか」と LOG 番号、横組みの本文の間に、縦書きの本人の言葉が入る

### 文を増やした：なぜそう考えるか・考えが変わったこと

> 文章だけで見せるならもっと内容が充実していても良さそうです。

写真がない分、文が少ないと、ページがすぐに終わってしまいます。足したのは3つです。各軸の「なぜそう考えるか」の段落、各軸の本人の言葉を1〜2つ、「考えが変わったこと」の節です。足した文は、上の codex の3回目で確かめ、指摘された8件を直してから載せました。考えが変わったことの候補は3つありましたが、順番を取り違えていた深度カメラの話を外し、2つ（LOG264・LOG286）を残しています。

### 公開と入口：TOP・/series5 に置き、検索に載せた

> これで一旦いいです。これをTOPや考察記事の一覧ページを掲載することを考えてください。他にもサービスロボット導入シミュレーションLPのバナーなんかも入ります。フィジカルAI研究所のバナーと合わせたセクションを考えてください。

TOP に2つのセクションを作りました。

- 導入前ガイド：GPU を買うか借りるかのページと、配膳ロボットの導入前シミュレーションのページへの入口を、カード2枚にして横に並べる
- いまの考え：考えのページへの入口。紙の色の地に、縦書きの問いと説明を置く

考察記事の一覧（/series5）の説明の下にも、同じ入口を置きました。どちらのページも、確認のあいだは検索に出ない設定（noindex）にし、サイトマップからも外していました。公開に合わせて、両方とも外しています。

【画像】LOG373_05_top_thinking_banner.png TOP の「いまの考え」の入口。紙の色の地に、左に説明と「読む」、右に縦書きの問い

### TOP の導入前ガイド：2枚のカードを見分けられるようにした

最初は2枚を同じ形（黒い地に写真と文字）にしていました。

> バナーが同じデザインでどっちがどっちなのかわかりません。サービスロボット導入バナーは違うデザインに変更

GPU のカードは黒い地のまま、配膳ロボットのカードを明るい灰色の地に変え、左に文字、右に絵を置きました。カードの高さは、最初は約520pxありました。

> バナーの高さ下げたい別アイデア出して（大きすぎ！）

高さを決め打ちせず、中身で決まるようにして約330pxにしました。ほかのセクションのカードと同じ角丸（8px）と影も付けています。

配膳ロボットのカードの絵は、何度か作り直しました。

| 版 | 絵 | 何が問題だったか |
|---|---|---|
| 1 | 3D の店の録画から切り出した画像 | 元の録画が高さ720pxまでしかなく、粗く見えた |
| 2 | 店の平面図（SVG）を縦長に切り抜いたもの | 何の図か分からなかった |
| 3 | 白黒の平面図を切らずに全体を置いたもの | 色味がなく、目に留まらない |
| 4 | 新しく作った立体の絵（同じ店を斜め上から見たもの） | 採用 |

3のあと、手元にある画像から候補を6つ並べました。

> 右の画像は色味があるやつがいいね。何か他に候補はないですか？一度にいくつも作ってください。候補がないとわからないです。

【画像】LOG373_08_existing_images.png 手元にある画像から作った候補A〜F。3Dの店の画面、通り道の図、試算の画面などを、カードに入れた形で並べた

> イメージを作って提案して！

手元の画像ではなく、新しく絵を作りました。試算と同じ店の図（plan-p1.svg）から、席・キッチン・レジの位置を読み出し、6通りに描き分けています。色は配膳ロボットの LP で使っている色（オレンジ #f2600c・黄色 #f2c230・青 #2f5bd8・濃い灰色）だけにしました。

【画像】LOG373_09_new_illustrations.png 新しく作った絵の案1〜6。色つきの平面図、立体の絵、混む所を色の濃さで見せた図、青い地、黄色い地、一部を大きく切り取った図

エイイチが選んだのは案2の立体の絵です。斜め上から見た形にするため、平面の座標を斜めから見た座標に置き換え、席やキッチンを高さのある箱として描いています。奥にある箱から先に描かないと、手前の箱が奥の箱に隠れるので、描く順番を決める処理を入れました。この絵を作るスクリプト（tools/make_cta_iso.py）は、この記事の終わりに全文を載せています。ロボットの通り道の点線は、通路の真ん中を通るように描いた見せ方の線で、試算の結果ではありません。

【画像】LOG373_10_iso_illustration.png 採用した立体の絵。黄色い席、濃い灰色のキッチン、オレンジのロボットと通り道、青い店員

カードに入れていた「47/99条件で、2台入れても人が減らない」という数字は外しました。

> これノイズに見えるから削除してバナーの高さ変えたら？

この数字は配膳ロボットの試算の結果ですが、カードの中だけでは何の条件の何の数なのかが分かりません。

### カードの組み方を、画面の幅ではなくカードの幅で切り替えた

絵を大きくしようとして、文字と絵の間を詰めたところで、次の指摘がありました。

> テキストが押し返しするくらい間を詰めたらダメだよ？ コンテンツ幅が狭くなったらレイアウト変更する必要あるんじゃない？どこで区切ってる？

> イラスト切り抜かないとコンテンツ幅が狭くなった時にテキスト見切れるよ

区切りは画面の幅 899px の1か所だけでした。それより広いと、文字と絵を必ず横に並べていました。ところが2枚並びのカードは、画面が900〜1300pxくらいだと幅が450〜600pxしかありません。そこに文字と絵を並べたので、文字の列が細くなり、絵に押されて文字が切れていました。

区切りを、画面の幅ではなくカードの幅で決めるようにしました（CSS のコンテナクエリ。親の要素の幅で見た目を切り替える仕組み）。横に並べるのは、ガイドの枠が1180px以上（カード1枚が約580px以上）のときだけです。文字の列は300pxより狭くしません。それより狭いときは、絵を上、文字を下に置きます。

**ねらい・変わったこと・見込める効果**
- ねらい：どの画面の幅でも、題名と説明が細かく折り返したり、絵に隠れたりしないようにする。
- 変わったこと：画面の幅 900〜1440px の間で、文字の列が約200pxまで細くなっていたのが、300px以上か、カードの幅いっぱいになった。幅 1440・1340・1200・1024・920・390px で表示し、文字が切れていないことを確かめた。
- 見込める効果：ノートPCのように画面が狭いときも、カードの題名が読める。押されたかは、来週のアクセスの記録のクリックの数で確かめる。

【画像】LOG373_11_card_widths.png 画面の幅ごとのガイドのカード。上から1440・1340・1200・1024・920・390px。1440pxだけ文字と絵が横に並び、それより狭いと絵が上に来る

【画像】LOG373_06_top_guide_cards.png 幅1440pxで見たTOPの導入前ガイド。左が黒いGPUのカード、右が明るい面に立体の絵を置いた配膳ロボットのカード

### アクセスの記録を見て、「いまの考え」の位置を決めた

最初は、「いまの考え」を TOP の一番下、事業所の説明のすぐ上に置いていました。

> 今の考え、一番下だとそこまで行かない可能性が高いのでもう少し上にセクション位置を移動。サイトのアクセス分析してみて

サイトのアクセスの記録（ページを開いた数、どこまで読んだか、どこから来たか、を自分のサイトで数えている仕組み）を見ました。

| ページ | 開いた数 | 滞在の中央値 | 25%の深さまで | 50% | 75% | 一番下まで | 動画の再生 |
|---|---|---|---|---|---|---|---|
| TOP（/） | 100 | 21秒 | 42% | 37% | 36% | 33% | 45 |

TOP を開いた人の約6割は、ページの4分の1の深さに届く前に、帰るか別のページへ移っています。一番下まで読んだのは3人に1人です。

どこから来たかは、直接（ブックマーク・URL の入力・アプリの中のリンクなど）が770、Google が89、サイトの中から44、Yahoo が6でした。この週（10月19日〜25日）の開いた数は897ですが、滞在の中央値が6秒、スマホからが4%しかありません。機械による巡回か、自分での確認がかなり混ざっていると見ています。メッセージのフォームからの送信は、この週は0件で、前の週に2件届いています。

いまの考えを、最初の画面のすぐ下に移しました。

> いやFV下は流石に上すぎじゃね？

> シリーズと4コママンガの間でいいよ

いまの TOP の並びは、最初の画面 → 解説動画 → 導入前ガイド → 4コマ → いまの考え → シリーズ → 記録 → 事業所について、です。

**ねらい・変わったこと・見込める効果**
- ねらい：TOP を開いた人のうち、考えのページの入口を見る人を増やす。
- 変わったこと：入口の位置を、一番下の事業所の説明の上から、4コマとシリーズの間に上げた。
- 見込める効果：一番下に置いたままなら、入口まで届くのは3人に1人程度（一番下まで読んだ33%）。上げた位置は、幅1440pxの画面で入口が見え始めるのがスクロールの約21%の所（スマホでも約21%）で、25%の深さまで読んだ42%の人には届く見込み。実際の数は、来週のアクセスの記録で /thinking の開いた数と入口のクリックの数を見て確かめる。いまの時点では /thinking と配膳ロボットの LP は記録にまだ出ていない（0件）。

### /series8 にも配膳ロボットの LP への入口を置いた

> サービスロボット導入シミュレーションにLPへの遷移バナー作らないと

サービスロボット導入シミュレーションのシリーズのページ（/series8）は、試算と記録を並べたページで、店舗の人に向けた LP への入口がありませんでした。説明文の下に、TOP のカードと同じ明るい面と立体の絵で、横長の入口を置きました。説明文は「このシリーズの試算を、店舗で使える形にまとめたページです」で始め、記録から LP へ移る理由が分かるようにしています。組み方は TOP のカードと同じく入口の幅で切り替え、720px より狭いときは絵を上に置きます。

【画像】LOG373_12_series8_banner.png /series8 の説明の下に置いた、配膳ロボットの導入前シミュレーションへの入口

### コミットの一覧（p2m-site・2026-10-24）

考えのページと入口に関係するコミットだけを、新しい順に並べます。配膳ロボットの LP そのものの作り直しは LOG371 に書いています。

```
840945c 13:49 /series8 に配膳ロボットの導入前シミュレーション（LP）への入口を置く
fab5068 13:47 TOP: 配膳ロボットのカードを、カードの幅で組み方を切り替える
a7438d1 13:41 TOP: 配膳ロボットのカードの絵を大きくし、文字との間を詰める
f69f502 13:36 TOP: 配膳ロボットのカードの絵を、同じ店を斜め上から見た立体の絵に変更
4a3cb37 13:28 TOP: いまの考えを4コマとシリーズの間へ移動
d961c7d 13:24 TOP: 配膳ロボットのカードから「○/99条件」の数字を外し、カードの高さを下げる
934a6e8 13:20 TOP: いまの考えを最初の画面の直下へ移動、配膳カードの図を店の全体が見える平面図に変更
2a1ccb9 13:09 TOP の導入前ガイドのカードと、考えのページの入口に、ほかのセクションのカードと同じ角丸（8px）と影を付ける
e9c807b 12:58 TOP の導入前ガイド：カードの高さを中身で決めて約520px→約330pxに。GPU は背景の写真の上に文字をそのまま、配膳ロボットは文字を左・平面図を右に置く
6db191a 12:54 TOP の導入前ガイド：配膳ロボットのカードの画像を、粗い 3D の録画から店の平面図（SVG・LP の最後と同じ図）に替える
09f9211 12:52 考えのページ：軸2の「気づいた場面」の MicroFactory に公式サイトへのリンクを付ける（横組みの文だけ）
1a181bc 12:50 TOP の導入前ガイド：配膳ロボットのカードを明るい面に替え、3D の店の画像を上に分けて置く（GPU の黒いカードとひと目で見分けられるように）
8f37f44 12:39 考えのページを /thinking（縦書き）で公開。TOP に「導入前ガイド」（GPU・配膳ロボットの LP 2つを横に並べる）と「いまの考え」を置き、/series5 に考えのページの入口を置く。配膳ロボットの LP と考えのページを検索・サイトマップに載せる。縦中横の 2D を行の真ん中にそろえる
b4bdbbf 12:23 考察記事のページの試作：各軸に「なぜそう考えるか」と本人の言葉を足し、「考えが変わったこと」を新設（codex 3回目の指摘を反映）。日付を「2026年10月までの考察記事から」に。縦書きの「」の上下の余白を広げる
4e48d9e 11:49 考察記事のページの試作（縦書き）：横組みの列を28字に狭める。「」の縦書きを文節で折り返す（改行位置を手で決め、元の言葉と違えばビルドで止める）
9620a50 11:18 考察記事のページの試作：タイトル・説明文・本文の大きさの差を上げる。「」は本人の言葉だけに。縦書きの欧字を組版の決まりに合わせる
5ede467 11:09 考察記事から考えを伝えるページの試作：横組みと縦書きの2つ（noindex・サイトマップに載せない）
```

### アクセスの記録（2026-10-24 13:59 に取得した値・必要な部分）

```json
{"取得":"2026-10-24 13:59（日本時間）・/api/ev-stats?format=json から必要な部分だけ",
 "total": 919,
 "byWeek": [
  {"week":"2026-10-19","label":"2026-10-19 〜 10-25","views":897,"medianSeconds":6,"read75Pct":78,"spPct":4,"backViews":19,"outClicks":0,"deadClicks":69,"rageClicks":1,"messageViews":3,"formStarts":0,"formSubmits":0,"formSubmitsValid":0,"messagesReceived":0},
  {"week":"2026-10-12","label":"2026-10-12 〜 10-18","views":22,"medianSeconds":17,"read75Pct":5,"spPct":36,"backViews":0,"outClicks":0,"deadClicks":1,"rageClicks":0,"messageViews":0,"formStarts":0,"formSubmits":0,"formSubmitsValid":0,"messagesReceived":2}],
 "byPage（TOP と関係するページ）": [
  {"path":"/","views":100,"medianSeconds":21,"read25Pct":42,"read50Pct":37,"read75Pct":36,"read100Pct":33,"deadClicks":2,"rageClicks":0,"copies":0,"videoPlays":45,"outClicks":0},
  {"path":"/series8","views":7,"medianSeconds":18,"read25Pct":29,"read50Pct":29,"read75Pct":14,"read100Pct":0,"deadClicks":0,"rageClicks":0,"copies":0,"videoPlays":0,"outClicks":0},
  {"path":"/gpu-buy-or-rent","views":3,"medianSeconds":9,"read25Pct":67,"read50Pct":67,"read75Pct":33,"read100Pct":0,"deadClicks":0,"rageClicks":0,"copies":0,"videoPlays":0,"outClicks":0}],
 "referrers": [
  {"from":"（直接・不明）","count":770},{"from":"www.google.com","count":89},{"from":"（サイト内）","count":44},{"from":"search.yahoo.co.jp","count":6},{"from":"app.raindrop.io","count":2},{"from":"www.linkedin.com","count":2},{"from":"gemini.google.com","count":1},{"from":"pixelstomotors.github.io","count":1},{"from":"www.city.oga.akita.jp","count":1},{"from":"websearch.excite.co.jp","count":1},{"from":"com.linkedin.android","count":1},{"from":"www.youtube.com","count":1}],
 "areas": [
  {"area":"本文","count":42},{"area":"ページの中身","count":22},{"area":"ヘッダー","count":15},{"area":"目次","count":7},{"area":"sim","count":7},{"area":"フッター","count":3},{"area":"前後の記事","count":2},{"area":"関連記事","count":2},{"area":"その他","count":1},{"area":"現在地","count":1}],
 "clicks（多い順の10件）": [
  {"target":"/｜ヘッダー","count":4},{"target":"btn:シリーズ｜ヘッダー","count":4},{"target":"iframe:/embeds/day126-F4igYhgG.html｜本文","count":2},{"target":"/issues｜ヘッダー","count":2},{"target":"/series6｜ヘッダー","count":2},{"target":"#index_R7T_TlUx｜目次","count":2},{"target":"/series8｜本文","count":2},{"target":"/record/drag-teach-waypoint-replay｜その他","count":1},{"target":"#index_dLFWrz7T｜目次","count":1},{"target":"/record/day19｜前後の記事","count":1}]
}
```


## コードとデータの全量

ページの文の正は src/data/thinking.ts です。縦書きのページは src/components/ThinkingPage.astro が組み、src/pages/thinking.astro が /thinking として出します。

### src/data/thinking.ts（ページの文・引用・縦書きの折り返し位置）

```ts
// 考察記事から、いま考えていることと目指すことを伝えるページの文（試作）
// 文の正：iCloud の 記事/考えのページ/下書き_考えのページ_3版.md（codex で2回検証）
// 「」の引用は、対話形式の記事の中の本人の発言だけ（原文と一字一句同じ）

export type Log = { n: string; slug: string };
const L = (n: number, slug: string): Log => ({ n: `LOG${n}`, slug });

export const LOGS = {
  118: L(118, 'day118'), 140: L(140, 'day140'), 166: L(166, 'day166'),
  212: L(212, 'motion-uncanny-valley'), 214: L(214, 'when-robot-motion-is-learned'), 223: L(223, 'two-layers-of-motion'),
  262: L(262, 'reachy-mini-motion-ux-timing'), 264: L(264, 'robot-ideas-from-pain-not-robots'), 286: L(286, 'why-robot-arms-stop-at-one'), 291: L(291, 'not-chasing-humanoids'),
  292: L(292, 'wB1BUDZj'), 296: L(296, 'four-layers-of-robot-softness'), 306: L(306, 'DesFKiCf'),
  314: L(314, 'what-to-hand-to-robots'), 315: L(315, 'road-marking-job-post-and-physical-ai'), 318: L(318, 'find-tasks-where-nobody-comes'),
  319: L(319, 'ai-visual-inspection-lighting'), 320: L(320, 'ai-writes-code-not-motions'), 323: L(323, 'so101-imitation-learning-papers'),
  324: L(324, 'physical-ai-beyond-industrial-robots'), 329: L(329, 'microfactory-fairino-fr3'), 336: L(336, 'alphanist-binary-reward-assembly'),
} as const;

export const TOP = {
  note: '2026年10月までの考察記事から、いま考えていること',
  q: ['ロボットに、', '何を任せればいいのか。'],
  lead: ['動かすことと、現場で使われることは違う。', 'その間を、実機を触りながら考えています。'],
};

export const NOW = {
  h: 'いま見えていること',
  text: '公開されている事例を調べると、ふだんの動きはできていても、例外が起きると人の手に戻っていました。別の現場に広げるたびに、調整の手間がまたかかるという問題もあります。一方で、運用を組み替えて、長く使われている例もあります。',
  logs: [LOGS[286], LOGS[306]],
  voice: { t: '今のロボットの方向性はなにかピントがズレているのでは？', log: LOGS[314] },
};

export type Voice = { t: string; log: Log };
export type Axis = {
  no: string; h: string;
  scene: { k: string; t: string; link?: { text: string; href: string } };   // link：文の中の語に付ける外部リンク
  why: { t: string; logs: Log[] };           // なぜそう考えるか（記事に書いたことから。引用ではない）
  voice: Voice[];                            // 本人の言葉。1つ目は「気づいた場面」の後、2つ目からは「なぜ」の後に置く
  think?: string; want: string; logs: Log[];
};

export const AXES: Axis[] = [
  {
    no: '1', h: '人が足りない仕事から、任せる作業を探す',
    scene: { k: '気づいた場面', t: '人手が足りない現場の話を聞いたとき。わかめのゴミ取りや魚の仕分けのように、次にやってくれる人がもう見つからない仕事があります。' },
    why: { t: '次の人が見つからないまま、熟練の人がいなくなりそうな仕事があると聞きました。そうした人の判断には、言葉や数字になっていない部分があります。いなくなれば、その判断も一緒に消えてしまいます。', logs: [LOGS[314], LOGS[319]] },
    voice: [
      { t: '役に立ちそうなタスクがなにかを決めるのが実は結構大変よな。', log: LOGS[318] },
      { t: '人がほんとうに集まらないけど、世の中には常に必要である業務を見つけるのが大事だよね。', log: LOGS[318] },
      { t: '暗黙知があるうちに自動化、AI化、ロボット化しないと技術が消えるね。', log: LOGS[319] },
    ],
    think: 'ロボットに合う作業から探すより、人がどうしても集まらない仕事から探すほうがいいと思います。',
    want: '熟練の人がどこを見て、なぜそう判断しているのかを、聞けるうちに記録したい。そのうえで、機械に任せられる部分を見つけたい。',
    logs: [LOGS[306], LOGS[314], LOGS[318], LOGS[319]],
  },
  {
    no: '2', h: '今の技術で成り立つ形を見極める',
    scene: { k: '気づいた場面', t: 'MicroFactory の構成を調べたとき。派手なデモより、今使える技術を組み合わせて、任せる作業を絞る進め方に目が向きました。', link: { text: 'MicroFactory', href: 'https://microfactory.com/' } },
    why: { t: 'ロボットは本体が安くなっても、置く場所や扱う物が変わるたびに調整が要るので、1台から先に広がりにくいことがあります。中身の見えない作り方だと、問題が起きたときに現場で直せないおそれもあります。だから、本体の安さより、今使える技術で作業を切り出し、人が手を入れられる形かどうかを見ます。', logs: [LOGS[286], LOGS[329]] },
    voice: [
      { t: 'micro factoryのいいところは派手なデモではなく、現実的で、現時点で合理的な技術でタスクを切り出してロボットアームの可能性を少しずつ広げているように思います。', log: LOGS[320] },
      { t: '後付けAIや後付けロボット技術などの方を進めた方が、中小にはハードルが低くていいかもな。', log: LOGS[315] },
    ],
    think: 'ロボットの形は、人型である必要はないと思います。',
    want: '人型のロボットを待つより、今ある機械に画像認識や判断を後から足す方法を試したい。中小企業の負担を下げられるかも確かめたい。',
    logs: [LOGS[286], LOGS[291], LOGS[315], LOGS[320], LOGS[329]],
  },
  {
    no: '3', h: '次にどう動くかを、人に伝える',
    scene: { k: '気づいた場面', t: '滑らかに動けば安心だ、という前提に違和感を持ったとき。' },
    why: { t: '人と同じ場所で動くなら、滑らかさより、次にどう動くかが相手に伝わることのほうが大事だと考えています。伝われば、人を傷つけることも減らせると思います。', logs: [LOGS[212], LOGS[296]] },
    voice: [
      { t: '実際のところ、滑らかにアームやロボットが動く＝人が怖くないではないからね。 中途半端に滑らかに動くなら、カクカクしてた方が人は安心するかもだよね。', log: LOGS[212] },
    ],
    want: '高い機体に頼らず、次の動きが伝わる間や予備動作を試したい。それが、そばにいる人にどう受け取られるかも確かめたい。',
    logs: [LOGS[212], LOGS[223], LOGS[262], LOGS[296]],
  },
  {
    no: '4', h: '人が自分でできる余地を残す',
    scene: { k: '考えが広がったこと', t: '生産性と完全自動化を目的に、人が入らない前提の場所を考えていたときは、無人化が答えだと思っていました。そこから、人が自分で進めるのを支える役割も考えるようになりました。' },
    why: { t: '作業を肩代わりするだけでは、人が自分で進めるのを支えることにはならないと考えています。効率を上げる場所と、人が自分で進めるのを支える場所は、分けて考えます。', logs: [LOGS[292]] },
    voice: [
      { t: '正直無人化が唯一の最適解で人は必要ないと思ってました。', log: LOGS[292] },
      { t: '結局、協働ロボットが本当の意味で協働でないのは、人の主体性を奪っていることが問題なのでは？と思いました。', log: LOGS[292] },
      { t: 'おれがロボットアームに求めているのは、精巧な動きをするロボットアームではないです。なんなら少し頼りないくらいでちょうど良さそうなアームです。やれることもそんなに多くなくて、これはココに入れてと指差す、代わりにボタンを押してあげる。手を振って呼び込むくらいの機能を持つ。', log: LOGS[292] },
    ],
    want: '人が自分で進めるのを手伝うことも、ロボットの役割として考えたい。',
    logs: [LOGS[262], LOGS[292], LOGS[324]],
  },
  {
    no: '5', h: '個人で試せて、他の人も確かめられる形にする',
    scene: { k: '気づいた場面', t: '工場で何十人もの人がロボットを遠隔操作して、動きのデータを集めている映像を見たとき。' },
    why: { t: '大きな会社は、約100万件のロボット操作の記録で学習させています。手元では、アームを動かした結果をスマホで撮り、AIに成否を判定させるところから、小さく確かめる方法を考えました。2026年4月には、深度カメラを買う前に、普通のカメラでできる限界まで試すと決めました。高い機材がなくても、同じ問いは小さく回せると思います。', logs: [LOGS[140], LOGS[166]] },
    voice: [
      { t: '人と機材使ってでもとにかくデータが欲しい。', log: LOGS[118] },
      { t: 'まずは2Dの限界までやってそのあと深度カメラだね。そこまではまだまだがんばるよ。', log: LOGS[166] },
    ],
    think: '研究のテーマを選ぶときは、他の人が同じ環境で再現できるかを物差しにします。',
    want: 'スマホとシミュレーションで動きのデータを作る手順を、失敗した条件や判断の理由も含めて公開したい。他の人が同じ条件で確かめられる形を増やしたい。',
    logs: [LOGS[118], LOGS[140], LOGS[166], LOGS[318], LOGS[323]],
  },
];

// 考えが変わったこと（本人の言葉で、考えが動いた場面）
export const CHANGES = {
  h: '考えが変わったこと',
  items: [
    {
      h: 'どんなロボットかを考える前に、人の苦痛を整理する',
      t: 'AIとの対話で、欲しいロボットの案を60個出し、ほとんどを採用しませんでした。今ある道具で済むものや、ロボットである必要がないものが多かったからです。何を作るかを決める前に、人が何を大変だと感じているかを整理する順番に変えました。',
      voice: { t: 'ロボットそのものを考えるより、苦痛の分類の方がどんなロボットを作ったら良さそうかが明確になるのは確かだね。', log: LOGS[264] },
    },
    {
      h: '書いた説明も、根拠まで確かめ直す',
      t: 'AIとの対話をまとめた記事を確かめ直したら、間違いが見つかりました。記事に書いたことでも、そのまま鵜呑みにはできません。説明の筋だけでなく、根拠まで確かめる必要があると考えています。',
      voice: { t: 'なんか記事で書いたことそのまま鵜呑みはまずいような状況だね。', log: LOGS[286] },
    },
  ],
};

export const OPEN = {
  h: 'まだ分からないこと',
  items: [
    { t: '自分から問いかけるロボットは、人が考えたり、仕事に新しい価値を見つけたりする助けになるのか。', v: '今は答えはなさそうだけど。', when: '2026年7月', log: LOGS[262] },
    { t: '指を差す、ボタンを押す、といった案を、実際に使われる機械としてどう形にするのか。', v: 'そういったロボットや自動化の機械の具体例を思いついていないし、多くの人がそこに市場があると思っていないのが実情。', when: '2026年7月', log: LOGS[292] },
    { t: '作った動きのデータが、実機や現場でどこまで使えるのか。AIによる成否の判定が、人の目とどこまで合うのか。これから確かめます。', log: LOGS[323] },
  ],
};

export const AIM = {
  h: '目指すこと',
  voice: { t: 'ロボットアームを触るのは、触りながらロボットの問題を一から一つずつ理解して、まだまだあるはずの社会実装の課題を見つけ出し、クリアしたい——そういうところだね。', log: LOGS[214] },
  text: 'ハードを作って売る・貸すより、ソフト側でできることを続けるほうが、自分には向いていると思います。デモ機で、シミュレーションやソフトでどれだけ変わるかを見せたい。',
  log: LOGS[336],
};

// 縦書きのページで、本人の言葉（「」）を折り返す位置。文節の途中で折らないように手で決める
// 「／」で区切る。区切りを外した文が元の言葉と一字でも違えば、ビルドで止まる（ThinkingPage.astro）
export const TATE_BREAKS: string[] = [
  '今のロボットの方向性は／なにかピントが／ズレているのでは？',
  '役に立ちそうなタスクが／なにかを決めるのが／実は結構大変よな。',
  '人がほんとうに集まらないけど、／世の中には常に必要である／業務を見つけるのが／大事だよね。',
  '暗黙知があるうちに／自動化、AI化、／ロボット化しないと／技術が消えるね。',
  'micro factoryの／いいところは／派手なデモではなく、／現実的で、／現時点で合理的な技術で／タスクを切り出して／ロボットアームの可能性を／少しずつ広げているように／思います。',
  '後付けAIや／後付けロボット技術などの／方を進めた方が、／中小には／ハードルが低くて／いいかもな。',
  '実際のところ、／滑らかにアームやロボットが／動く＝人が怖くない／ではないからね。 ／中途半端に滑らかに／動くなら、／カクカクしてた方が／人は安心するかもだよね。',
  '正直無人化が／唯一の最適解で／人は必要ないと／思ってました。',
  '結局、協働ロボットが／本当の意味で／協働でないのは、／人の主体性を／奪っていることが／問題なのでは？と／思いました。',
  'おれがロボットアームに／求めているのは、／精巧な動きをする／ロボットアームではないです。／なんなら少し頼りないくらいで／ちょうど良さそうなアームです。／やれることも／そんなに多くなくて、／これはココに入れてと指差す、／代わりにボタンを押してあげる。／手を振って呼び込むくらいの／機能を持つ。',
  '人と機材使ってでも／とにかくデータが欲しい。',
  'まずは2Dの限界までやって／そのあと深度カメラだね。／そこまでは／まだまだがんばるよ。',
  'ロボットそのものを考えるより、／苦痛の分類の方が／どんなロボットを／作ったら良さそうかが／明確になるのは確かだね。',
  'なんか記事で書いたこと／そのまま鵜呑みは／まずいような状況だね。',
  '今は答えは／なさそうだけど。',
  'そういったロボットや／自動化の機械の具体例を／思いついていないし、／多くの人がそこに／市場があると／思っていないのが実情。',
  'ロボットアームを触るのは、／触りながら／ロボットの問題を／一から一つずつ理解して、／まだまだあるはずの／社会実装の課題を／見つけ出し、／クリアしたい——／そういうところだね。',
];
```

### src/components/ThinkingPage.astro（横組みと縦書きの組み方・組版の値）

```astro
---
// 考察記事から、いま考えていることと目指すことを伝えるページ（試作）
// v="yoko"：全部を横組みの読み物に。出典・見出しの番号・ラベルは左の余白に置く
// v="tate"：最初の画面と本人の言葉（「」）を縦書きに。説明の文は横組み
import { TOP, NOW, AXES, CHANGES, OPEN, AIM, TATE_BREAKS, type Log } from '../data/thinking';
import V from './ThinkingVoice.astro';
interface Props { v: 'yoko' | 'tate' }
const { v } = Astro.props;
const tate = v === 'tate';
const href = (l: Log) => `/record/${l.slug}`;
// 縦書きの中の欧字と数字（日本語組版の決まり JLREQ 3.2.3 に合わせる）
// - 小文字の英単語（micro factory など）は、決まりどおり時計回りに90度寝かせる（何もしない＝ブラウザの既定）
// - 大文字だけの略語（AI・VLA など5字まで）は1字ずつ正立させる
// - 2桁の数字は縦中横にする
const esc = (t: string) => t.replace(/[&<>"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]!));
const BR = new Map(TATE_BREAKS.map((b) => [b.replaceAll('／', ''), b]));
for (const [plain] of BR) {
  const all = [NOW.voice.t, ...AXES.flatMap((a) => a.voice.map((q) => q.t)), ...CHANGES.items.map((c) => c.voice.t), ...OPEN.items.map((o) => o.v).filter(Boolean), AIM.voice.t];
  if (!all.includes(plain)) throw new Error(`縦書きの改行位置が、本人の言葉と一致しない: ${plain}`);
}
const tateHtml = (t: string) => (BR.get(t) ?? t).split('／').map((ln) => esc(ln)
  .replace(/(?<![0-9A-Za-z])([0-9]{2}|[0-9][A-Z])(?![0-9A-Za-z])|(?<![0-9A-Za-z])([A-Z]{1,5})(?![A-Za-z])/g,
    (_m, tcy, up) => tcy ? `<span class="tcy">${tcy}</span>` : `<span class="up">${up}</span>`)).join('<br>');
---
<article class={`tp tp-${v}`}>

  <!-- 最初の画面 -->
  {tate ? (
    <header class="top-tate">
      <div class="tt">
        <p class="tt-note">二〇二六年十月までの考察記事から、いま考えていること</p>
        <h1>{TOP.q[0]}<br />{TOP.q[1]}</h1>
        <p class="tt-lead">{TOP.lead[0]}<br />{TOP.lead[1]}</p>
      </div>
    </header>
  ) : (
    <header class="row top">
      <p class="note">2026年10月までの<br />考察記事から、<br />いま考えていること</p>
      <div class="txt">
        <h1><span class="ph">{TOP.q[0]}</span><span class="ph">{TOP.q[1]}</span></h1>
        <p class="lead">{TOP.lead[0]}<br />{TOP.lead[1]}</p>
      </div>
    </header>
  )}

  <!-- いま見えていること -->
  <section class="sec">
    <div class="row"><span class="note"></span><h2 class="txt">{NOW.h}</h2></div>
    <div class="row"><p class="note mono">{NOW.logs.map((l) => <a href={href(l)}>{l.n}</a>)}</p><p class="txt">{NOW.text}</p></div>
    <figure class="row voice">
      <figcaption class="note mono"><a href={href(NOW.voice.log)}>{NOW.voice.log.n}</a></figcaption>
      <blockquote class="txt">{tate ? <p set:html={tateHtml(NOW.voice.t)} /> : <p>{NOW.voice.t}</p>}</blockquote>
    </figure>
  </section>

  <!-- 考えの軸 -->
  <section class="sec">
    <div class="row"><span class="note"></span><h2 class="txt">考えの軸</h2></div>
    {AXES.map((a) => (
      <div class="axis">
        <div class="row"><p class="note no">{a.no}</p><h3 class="txt"><span class="no-sp">{a.no}　</span>{a.h}</h3></div>
        <div class="row"><p class="note">{a.scene.k}</p><p class="txt">{a.scene.link
          ? a.scene.t.split(a.scene.link.text).map((part, i) => i === 0 ? part : <><a href={a.scene.link!.href} target="_blank" rel="noopener">{a.scene.link!.text}</a>{part}</>)
          : a.scene.t}</p></div>
        {a.voice.slice(0, 1).map((q) => <V q={q} tate={tate} html={tateHtml(q.t)} />)}
        <div class="row why"><p class="note"><span>なぜそう考えるか</span>{a.why.logs.map((l) => <a class="mono" href={href(l)}>{l.n}</a>)}</p><p class="txt">{a.why.t}</p></div>
        {a.voice.slice(1).map((q) => <V q={q} tate={tate} html={tateHtml(q.t)} />)}
        {a.think && <div class="row"><p class="note">考え</p><p class="txt think">{a.think}</p></div>}
        <div class="row"><p class="note">やりたいこと</p><p class="txt">{a.want}</p></div>
        <div class="row src"><p class="note">元の記事</p><p class="txt mono">{a.logs.map((l) => <a href={href(l)}>{l.n}</a>)}</p></div>
      </div>
    ))}
  </section>

  <!-- 考えが変わったこと -->
  <section class="sec">
    <div class="row"><span class="note"></span><h2 class="txt">{CHANGES.h}</h2></div>
    {CHANGES.items.map((c) => (
      <div class="chg">
        <div class="row"><span class="note"></span><h3 class="txt h-chg">{c.h}</h3></div>
        <div class="row"><span class="note"></span><p class="txt">{c.t}</p></div>
        <V q={c.voice} tate={tate} html={tateHtml(c.voice.t)} />
      </div>
    ))}
  </section>

  <!-- まだ分からないこと -->
  <section class="sec">
    <div class="row"><span class="note"></span><h2 class="txt">{OPEN.h}</h2></div>
    {OPEN.items.map((o) => (
      <div class="open">
        <div class="row"><p class="note mono">{!o.v && <a href={href(o.log)}>{o.log.n}</a>}</p><p class="txt">{o.t}</p></div>
        {o.v && (
          <figure class="row voice">
            <figcaption class="note mono"><a href={href(o.log)}>{o.log.n}</a><span class="when">{o.when}</span></figcaption>
            <blockquote class="txt">{tate ? <p set:html={tateHtml(o.v)} /> : <p>{o.v}</p>}</blockquote>
          </figure>
        )}
      </div>
    ))}
  </section>

  <!-- 目指すこと -->
  <section class="sec aim">
    <div class="row"><span class="note"></span><h2 class="txt">{AIM.h}</h2></div>
    <figure class="row voice big">
      <figcaption class="note mono"><a href={href(AIM.voice.log)}>{AIM.voice.log.n}</a></figcaption>
      <blockquote class="txt">{tate ? <p set:html={tateHtml(AIM.voice.t)} /> : <p>{AIM.voice.t}</p>}</blockquote>
    </figure>
    <div class="row"><p class="note mono"><a href={href(AIM.log)}>{AIM.log.n}</a></p><p class="txt">{AIM.text}</p></div>
  </section>

  <!-- 最後に1つだけ -->
  <div class="row end">
    <span class="note"></span>
    <div class="txt">
      <p>この考えについて、話してみたいことがあれば。</p>
      <a class="btn" href="/message">メッセージを送る<i class="ms" aria-hidden="true">arrow_forward</i></a>
    </div>
  </div>

</article>

<style is:global>
/* ============================================================
   文字だけのページの決まり（横組み・縦書きで共通）
   - 紙：真っ白にしない（#fff と純黒の組は、長く読むと白がまぶしい）。黄みに寄せすぎない温かい生成り
   - 墨：純黒（#000）にしない。紙との差は 14:1 前後。注の灰色も 5:1 以上
   - 本文：明朝 18px・行の高さ 1.95・字間 0.04em。1行 36字前後（日本語で長く読める幅）
   - 縦の間隔は、本文1行の高さ（--L）の倍数だけで取る
   - 線・枠・色の帯・飾りは使わない。区切りは余白で作る
   ============================================================ */
.tp{
  --paper:#f5f3ee; --ink:#22201c; --sub:#696459; --sel:#22201c;
  --serif:"Noto Serif JP","Hiragino Mincho ProN","Yu Mincho",serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
  --fs:18px; --lh:1.95; --L:calc(var(--fs) * var(--lh));
  --col:calc(36 * 1.04 * var(--fs));     /* 36字 */
  --note:10rem; --gap:2.75rem;
  --gut:max(20px,env(safe-area-inset-left,0px));
  background:var(--paper);color:var(--ink);font-family:var(--serif);
  font-size:var(--fs);line-height:var(--lh);letter-spacing:.04em;font-weight:400;
  padding:48px 0 calc(var(--L) * 5);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  line-break:strict;text-spacing-trim:trim-start;text-autospace:normal
}
.tp *{box-sizing:border-box}
.tp ::selection{background:var(--sel);color:var(--paper)}
.tp p,.tp figure,.tp blockquote{margin:0}
.tp a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.28em}
.tp a:hover{text-decoration-thickness:2px}
.tp .mono{font-family:var(--mono);letter-spacing:0}

/* 余白の列（注）と本文の列。本文の列をページの真ん中に置き、注は左の余白にかける */
.tp .row{display:grid;grid-template-columns:var(--note) minmax(0,var(--col)) var(--note);column-gap:var(--gap);justify-content:center;padding-inline:var(--gut)}
.tp .note{grid-column:1;font-size:.74rem;line-height:var(--L);letter-spacing:.06em;color:var(--sub);text-align:right;white-space:nowrap}
.tp .note.mono{font-size:.72rem;display:flex;flex-direction:column;align-items:flex-end}
.tp .note a{text-decoration-color:color-mix(in srgb,var(--sub) 45%,transparent)}
.tp .txt{grid-column:2}
.tp .txt + .txt{grid-column:2}
.tp .row + .row{margin-top:calc(var(--L) * .6)}
.tp p.txt,.tp .txt p{text-wrap:pretty}

/* 見出し：大きい文字ほど字間を詰める（palt）。文節の途中で折り返さない */
.tp h1,.tp h2,.tp h3{margin:0;font-weight:600;font-feature-settings:"palt";word-break:auto-phrase;text-wrap:balance}
.tp h1{font-size:clamp(2.6rem,4.8vw,4.1rem);line-height:1.45;letter-spacing:.02em;font-weight:700}
.tp h1 .ph{display:inline-block}
.tp h2{font-size:.95rem;line-height:var(--L);letter-spacing:.2em}
.tp h3{font-size:1.65rem;line-height:1.6;letter-spacing:.03em}
.tp .no-sp{display:none}

/* 最初の画面（横） */
.tp .top{padding-top:calc(var(--L) * 4);padding-bottom:calc(var(--L) * 3)}
.tp .top .note{padding-top:1.4rem;white-space:normal}
.tp .top .txt{grid-column:2 / 4}
.tp .lead{margin-top:calc(var(--L) * 1.3);font-size:1.375rem;line-height:1.95;letter-spacing:.05em;word-break:auto-phrase}

/* 節と軸：区切りは余白だけ */
.tp .sec{padding-top:calc(var(--L) * 4)}
.tp .sec > .row:first-child{margin-bottom:calc(var(--L) * 1)}
.tp .axis{padding-top:calc(var(--L) * 2.5)}
.tp .sec > .row + .axis{padding-top:calc(var(--L) * .5)}
.tp .axis .row:first-child{margin-bottom:calc(var(--L) * .6)}
.tp .note.no{font-size:1.65rem;line-height:1.6;font-weight:600;color:var(--ink);letter-spacing:0;font-feature-settings:"lnum"}
.tp .think{font-weight:600}
.tp .src .txt{font-size:.74rem;display:flex;flex-wrap:wrap;gap:0 1.2em;color:var(--sub)}
.tp .src .note{opacity:0}

.tp .why .note{display:flex;flex-direction:column;align-items:flex-end}
.tp .why .note a{font-size:.72rem}
.tp .chg + .chg{padding-top:calc(var(--L) * 2)}
.tp .h-chg{font-size:1.24rem;line-height:1.7;margin-bottom:calc(var(--L) * .2)}

/* 本人の言葉：少し大きく・少し太く。色も線も足さない */
.tp .voice{margin-block:calc(var(--L) * 1)}
.tp .voice blockquote p{font-size:1.24rem;line-height:1.95;font-weight:500;letter-spacing:.05em}
.tp .voice blockquote p::before{content:"「"}
.tp .voice blockquote p::after{content:"」"}
.tp .voice .note{padding-top:.3rem}
.tp .voice.big blockquote p{font-size:1.5rem;line-height:1.9}

.tp .open + .open{margin-top:calc(var(--L) * 1.5)}
.tp .open .voice{margin-block:calc(var(--L) * .6) 0}
.tp .note .when{font-family:var(--serif);letter-spacing:.06em}

/* 最後の一つ：サイトのボタンとそろえる */
.tp .end{padding-top:calc(var(--L) * 4)}
.tp .end p{margin-bottom:calc(var(--L) * .6)}
.tp .btn{display:inline-flex;align-items:center;gap:10px;padding:14px 20px;border-radius:4px;background:var(--ink);color:var(--paper);text-decoration:none;font-family:"Noto Sans JP",system-ui,sans-serif;font-weight:700;font-size:.95rem;letter-spacing:.04em}
.tp .btn:hover{background:#000}
.tp .btn .ms{font-family:"Material Symbols Outlined";font-style:normal;font-size:18px;transition:transform .2s}
.tp .btn:hover .ms{transform:translateX(3px)}

/* ---- 縦書き：最初の画面と、本人の言葉 ---- */
/* 縦書きのページは上から下へ速く読むので、横組みの列も1行28字に狭める（横組みのページは36字） */
.tp-tate{--col:calc(28 * 1.04 * var(--fs))}
.tp-tate .top-tate{min-height:calc(100svh - 48px);display:flex;justify-content:center;align-items:center;padding:calc(var(--L) * 2) var(--gut)}
.tp-tate .tt{writing-mode:vertical-rl;display:flex;flex-direction:column;gap:calc(var(--L) * 1.6)}
.tp-tate .tt > *{white-space:nowrap}
.tp-tate .tt-note{font-size:.78rem;letter-spacing:.2em;color:var(--sub)}
.tp-tate .tt h1{font-size:clamp(2.6rem,5.6vh,3.9rem);line-height:1.7;letter-spacing:.08em;font-weight:700}
.tp-tate .tt-lead{font-size:1.3rem;line-height:2.2;letter-spacing:.12em;padding-top:5.5em}
.tp-tate .voice blockquote{display:flex;justify-content:center}
.tp-tate .voice blockquote p{writing-mode:vertical-rl;white-space:nowrap;font-size:1.3rem;line-height:2.1;letter-spacing:.12em;text-align:start}
.tp-tate .voice.big blockquote p{font-size:1.45rem}
/* 横の文と縦の「」の間は、横どうしより大きく空ける（向きが変わる所で目を休ませる） */
.tp.tp-tate .row.voice{margin-block:calc(var(--L) * 3)}
.tp.tp-tate .open .row.voice{margin-block:calc(var(--L) * 2.5) calc(var(--L) * 1)}
.tp-tate .voice .up{text-orientation:upright;letter-spacing:0}
/* 縦中横（2D など）：前後の自動の空きと字間を外し、半角の字形で行の真ん中にそろえる */
.tp-tate .voice blockquote p{text-autospace:no-autospace}
.tp-tate .voice .tcy{text-combine-upright:all;letter-spacing:0;font-feature-settings:"hwid" 1}  /* 半角の字形にして、2字でちょうど1字分の幅にする */

/* ---- スマホ ---- */
@media (max-width:820px){
  .tp{--fs:16.5px;--lh:1.9}
  .tp .row{grid-template-columns:minmax(0,1fr);column-gap:0}
  .tp .note,.tp .txt{grid-column:1}
  .tp .note{text-align:left;line-height:1.8;white-space:normal}
  .tp .note.mono{flex-direction:row;gap:0 1em;justify-content:flex-start}
  .tp .row > .note:empty{display:none}
  .tp .row > .note + .txt{margin-top:2px}
  .tp .note.no{display:none}
  .tp .top .note br{display:none}
  .tp .no-sp{display:inline}
  .tp .voice .note{order:2;padding-top:4px}
  .tp .src .note{display:none}
  .tp .why .note{flex-direction:row;flex-wrap:wrap;gap:0 1em;align-items:baseline}
  .tp h1{font-size:calc((100vw - 2*var(--gut)) / 11.6)}
  .tp h3{font-size:1.4rem}
  .tp .lead{font-size:1.04rem;letter-spacing:.03em}
  .tp .top .txt{grid-column:1}
  .tp .top{padding-top:calc(var(--L) * 2.5)}
  .tp .voice blockquote p{font-size:1.12rem}
  .tp .voice.big blockquote p{font-size:1.25rem}
  .tp-tate .tt{gap:calc(var(--L) * 1)}
  .tp-tate .tt h1{font-size:2.2rem}
  .tp-tate .tt-lead{font-size:1.02rem;padding-top:4em}
  .tp-tate .voice blockquote p{font-size:1.1rem}
  .tp.tp-tate .row.voice{margin-block:calc(var(--L) * 2.2)}
  .tp-tate .voice.big blockquote p{font-size:1.2rem}
}
</style>
```

### src/components/ThinkingVoice.astro（本人の言葉1つ分）

```astro
---
// 考察記事のページ（試作）：本人の言葉を1つ置く。左の余白に出典の LOG
// 「」は、本人が対話の中で言った言葉を一字一句変えずに載せた、という印（ページの中でここだけに付ける）
import type { Voice } from '../data/thinking';
interface Props { q: Voice; tate: boolean; html?: string; big?: boolean; when?: string }
const { q, tate, html, big = false, when } = Astro.props;
---
<figure class={`row voice${big ? ' big' : ''}`}>
  <figcaption class="note mono"><a href={`/record/${q.log.slug}`}>{q.log.n}</a>{when && <span class="when">{when}</span>}</figcaption>
  <blockquote class="txt">{tate ? <p set:html={html} /> : <p>{q.t}</p>}</blockquote>
</figure>
```

### src/pages/thinking.astro（/thinking のページ）

```astro
---
// 考察記事から、いま考えていることと目指すことを伝えるページ（縦書き）
// 言葉だけで伝えるページ。写真・動画・ロボットの絵は使わない。LP ではない
// 文の正は src/data/thinking.ts（codex で3回検証）。入口は TOP と /series5（ThinkingBanner）
import Base from '../layouts/Base.astro';
import ThinkingPage from '../components/ThinkingPage.astro';
import { SITE, AUTHOR, PUBLISHER } from '../lib/seo';
const path = '/thinking';
const url = SITE + path;
const title = 'ロボットに、何を任せればいいのか ― 考察記事から、いま考えていること';
const description = '動かすことと、現場で使われることは違う。2026年10月までの考察記事から、いま考えていること・考えの軸・考えが変わったこと・まだ分からないこと・目指すことを、本人の言葉と一緒に言葉だけでまとめたページ。';
const published = '2026-10-24';
const jsonLd = [
  {
    '@context': 'https://schema.org', '@type': 'Article', headline: title, description, url, mainEntityOfPage: url,
    image: [SITE + '/og/thinking.jpg'], inLanguage: 'ja', datePublished: published, dateModified: published,
    author: AUTHOR, publisher: PUBLISHER,
    isPartOf: { '@type': 'CollectionPage', name: '考察記事（Deep Dive）', url: SITE + '/series5' },
    about: [{ '@type': 'Thing', name: 'フィジカルAI' }, { '@type': 'Thing', name: 'ロボットの社会実装' }],
  },
  {
    '@context': 'https://schema.org', '@type': 'BreadcrumbList',
    itemListElement: [
      { '@type': 'ListItem', position: 1, name: 'Pixels to Motors', item: SITE + '/' },
      { '@type': 'ListItem', position: 2, name: '考察記事', item: SITE + '/series5' },
      { '@type': 'ListItem', position: 3, name: 'ロボットに、何を任せればいいのか', item: url },
    ],
  },
];
---
<Base title={`${title} | Pixels to Motors`} description={description} path={path} ogImage="/og/thinking.jpg" ogType="article" published={published} modified={published} jsonLd={jsonLd}>
  <link slot="head" rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" />
  <ThinkingPage v="tate" />
</Base>
```

### src/components/ThinkingBanner.astro（TOP と /series5 の入口）

```astro
---
// 考えのページ（/thinking）への入口。TOP と /series5 に置く
// LP のバナー（黒い面・写真・差し色）とは分け、考えのページと同じ紙の色と明朝で、問いを縦に置く
---
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;700&display=swap" />
<a class="tbn" href="/thinking" data-ev="考えのページへ">
  <span class="tbn-q" aria-hidden="true">ロボットに、<br />何を任せればいいのか。</span>
  <span class="tbn-text">
    <span class="tbn-label">2026年10月までの考察記事から、いま考えていること</span>
    <span class="tbn-title">ロボットに、何を任せればいいのか。</span>
    <span class="tbn-lead">動かすことと、現場で使われることは違う。その間を、実機を触りながら考えています。考察記事から、考えの軸と、まだ分からないこと、目指すことを言葉だけでまとめました。</span>
    <span class="tbn-go">読む<i class="ms">arrow_forward</i></span>
  </span>
</a>
<style>
  .tbn { display: grid; grid-template-columns: minmax(0, 30em) auto; justify-content: center; align-items: center; gap: 72px; padding: 48px 48px; border-radius: 8px; box-shadow: 0 8px 16px rgba(0,0,0,.08); background: #f5f3ee; color: #22201c; text-decoration: none;
    font-family: "Noto Serif JP", "Hiragino Mincho ProN", "Yu Mincho", serif; }
  .tbn:focus-visible { outline: 2px solid #121418; outline-offset: 3px; }
  .tbn-q { grid-column: 2; grid-row: 1; writing-mode: vertical-rl; white-space: nowrap; font-size: 28px; line-height: 1.7; letter-spacing: .08em; font-weight: 700; }
  .tbn-text { grid-column: 1; grid-row: 1; display: grid; gap: 14px; }
  .tbn-label { font-size: 12px; line-height: 1.8; letter-spacing: .06em; color: #696459; }
  .tbn-title { display: none; }
  .tbn-lead { font-size: 15px; line-height: 2; letter-spacing: .04em; text-wrap: pretty; }
  .tbn-go { justify-self: start; display: inline-flex; align-items: center; gap: 6px; height: 44px; padding: 0 20px; border-radius: 4px; background: #22201c; color: #f5f3ee;
    font: 700 14px/1 var(--sans); transition: background .15s; }
  .tbn:hover .tbn-go { background: #000; }
  .tbn-go .ms { font-size: 18px; transition: transform .2s; }
  .tbn:hover .tbn-go .ms { transform: translateX(3px); }
  @media (max-width: 699px) {
    .tbn { grid-template-columns: 1fr; justify-content: stretch; gap: 20px; padding: 28px 20px; }
    .tbn-q { display: none; }
    .tbn-title { display: block; font-size: 22px; line-height: 1.5; font-weight: 700; word-break: auto-phrase; }
    .tbn-text { grid-column: 1; }
  }
</style>
```

### src/components/GuideCards.astro（TOP の導入前ガイドのカード2枚）

```astro
---
// TOP の「導入前ガイド」：LP 2つ（GPU を買うか借りるか・配膳ロボットの導入前シミュレーション）への入口を横に並べる
// GPU は黒い面で、背景の写真の上に文字をそのまま置く。配膳ロボットは明るい面に、文字を左・店の立体の絵（SVG・試算と同じ店）を右に置く
// 3D の店の録画は高さ 720px までしかなく粗く見えたため、どの大きさでも粗くならない線の図にした。
// 縦に切り抜くと何の図か分からず、白黒の平面図は色味がなかったので、同じ店を斜め上から見た立体の絵（tools/make_cta_iso.py で作る）を切らずに置く
// 配膳ロボットの数字（○/99条件）は、ここだけでは意味が分からずノイズに見えたので載せない（2026-10-24）
// 2枚がひと目で別のものと分かるように、面の色と組み方を変える（中身の順番はそろえる）。/series6 は GuideBanner（1本）のまま
const cards = [
  {
    href: '/gpu-buy-or-rent', bg: '/site/gbr/reverse.webp', light: false, label: '導入比較ガイド',
    fig: { old: '¥750,000', big: '¥4,700', small: '' },
    title: 'ロボットAIの学習用GPU、買うか借りるか',
    sub: '実際に借りて学習させた費用と、損益分岐の計算機、判定フローで決められます。',
    ev: 'TOPガイド:GPU',
  },
  {
    href: '/serving-robot-one-less-staff', img: '/site/srl/cta-iso.svg', light: true, label: '導入前シミュレーション',
    title: '配膳ロボットを、導入前に自分の店舗でシミュレーション',
    sub: '店舗の図面と人数から、何人で回るか・どこで止まるか・月いくらかかるかを出します。',
    ev: 'TOPガイド:配膳ロボット',
  },
];
---
<div class="gcards">
  {cards.map((c) => (
    <a class={`gcard${c.light ? ' light' : ''}`} href={c.href} data-ev={c.ev} style={c.bg ? `--bg:url(${c.bg})` : undefined}>
      {c.img && <span class="gc-img"><img src={c.img} alt="店の立体図（席・キッチン・配膳ロボットの通り道）" width="1400" height="900" loading="lazy" /></span>}
      <span class="gc-body">
        <span class="gc-label">{c.label}</span>
        {c.fig && <span class="gc-fig" aria-hidden="true">
          {c.fig.old && <s class="gc-old">{c.fig.old}</s>}
          <b class="gc-big">{c.fig.big}</b>
          {c.fig.small && <small class="gc-small">{c.fig.small}</small>}
        </span>}
        <span class="gc-title">{c.title}</span>
        <span class="gc-sub">{c.sub}</span>
        <span class="gc-go">読む<i class="ms">arrow_forward</i></span>
      </span>
    </a>
  ))}
</div>
<style>
  .gcards { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
  /* ほかのセクションのカード（記録・4コマ・シリーズ）と同じ角丸と影 */
  .gcard { position: relative; isolation: isolate; overflow: hidden; display: grid; border-radius: 8px; box-shadow: 0 8px 16px rgba(0,0,0,.08); background: #0b0c0e; color: #fff; text-decoration: none; }
  .gc-body { display: grid; align-content: center; gap: 10px; padding: 32px; }
  .gcard::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--bg) right center / cover no-repeat; transition: transform .6s ease; }
  .gcard::after { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(11,12,14,.95) 0%, rgba(11,12,14,.86) 55%, rgba(11,12,14,.55) 100%); }
  .gcard:hover::before { transform: scale(1.03); }
  .gcard:focus-visible { outline: 2px solid #121418; outline-offset: 3px; }
  .gc-label { font: 700 12px/18px var(--sans); color: #b9bec7; letter-spacing: .08em; }
  .gc-fig { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; font-family: 'Manrope', 'Noto Sans JP', sans-serif; font-variant-numeric: tabular-nums; line-height: 1.1; }
  .gc-old { font-size: 20px; font-weight: 800; color: #8d939d; text-decoration-thickness: 2px; }
  .gc-big { font-size: 40px; font-weight: 800; color: #f2600c; letter-spacing: -.01em; }
  .gc-small { font: 700 14px/1.5 var(--sans); color: #d6dae3; }
  .gc-title { margin-top: 4px; font: 900 22px/1.45 var(--sans); word-break: auto-phrase; text-wrap: pretty; }
  .gc-sub { font: 400 14px/1.7 var(--sans); color: #c8ccd4; text-wrap: pretty; }
  .gc-go { justify-self: start; display: inline-flex; align-items: center; gap: 6px; height: 44px; margin-top: 6px; padding: 0 20px; border-radius: 4px;
    background: #f2600c; color: #fff; font: 700 14px/1 var(--sans); white-space: nowrap; transition: background .15s, color .15s; }
  .gcard:hover .gc-go { background: #fff; color: #121418; }
  /* 配膳ロボット：明るい面。カードが広いときは文字を左・立体の絵を右に、狭いときは絵を上・文字を下に置く。
     区切りはカードの幅で決める（画面の幅ではない）。2枚並びのカードは画面が 900〜1300px くらいだと 450〜600px しかなく、
     横に並べると文字の列が細くなって題名と説明が細かく折り返すため。
     横に並べるのは、ガイドの枠（.gcards）が 1180px 以上（カード1枚が約580px 以上）のときだけ。文字の列は 300px より狭くしない */
  .gcards { container-type: inline-size; }
  .gcard.light { grid-template-columns: 1fr; background: #eceef1; color: #121418; }
  .gcard.light::before, .gcard.light::after { content: none; }
  .gc-img { grid-column: 1; grid-row: 1; position: relative; display: block; overflow: hidden; height: 220px; background: #eceef1; }
  .gc-img img { position: absolute; top: 12px; left: 12px; display: block; width: calc(100% - 24px); height: calc(100% - 24px); object-fit: contain; object-position: 50% 50%; transition: transform .6s ease; }
  .gcard.light .gc-body { grid-column: 1; grid-row: 2; padding: 24px 32px 32px; }
  @container (min-width: 1180px) {
    .gcard.light { grid-template-columns: minmax(300px, 1fr) minmax(0, 1fr); }
    .gc-img { grid-column: 2; grid-row: 1; height: auto; }
    .gc-img img { top: 0; left: 0; width: calc(100% - 20px); height: 100%; object-position: 0 50%; }
    .gcard.light .gc-body { grid-column: 1; grid-row: 1; padding: 32px 20px 32px 32px; }
  }
  .gcard.light:hover .gc-img img { transform: scale(1.03); }
  .gcard.light .gc-title { font-size: 20px; }
  .gcard.light .gc-label { color: #5c616b; }
  .gcard.light .gc-small { color: #121418; }
  .gcard.light .gc-body { word-break: auto-phrase; text-wrap: pretty; }
  .gcard.light .gc-sub { color: #4a4f58; }
  .gcard.light:hover .gc-go { background: #121418; color: #fff; }
  .gc-go .ms { font-size: 18px; transition: transform .2s; }
  .gcard:hover .gc-go .ms { transform: translateX(3px); }
  @media (max-width: 899px) {
    .gcards { grid-template-columns: 1fr; }
    .gcard { min-height: 0; }
    .gc-body, .gcard.light .gc-body { padding: 24px 20px; }
    .gcard:not(.light)::after { background: rgba(11,12,14,.84); }
    .gc-big { font-size: 32px; }
    .gc-title { font-size: 19px; }
  }
</style>
```

### src/components/ServingBanner.astro（/series8 の配膳ロボットの LP への入口）

```astro
---
// 配膳ロボットの導入前シミュレーション（LP・/serving-robot-one-less-staff）への入口。/series8 の説明の下に置く
// TOP の導入前ガイドの配膳ロボットのカードと同じ見た目（明るい面・左に文字・右に同じ店の立体の絵 cta-iso.svg）を、横長の帯にしたもの
// 組み方はバナーの幅で切り替える（画面の幅ではない）。720px 未満では絵を上・文字を下に置き、文字が絵に押されて細くならないようにする
---
<div class="sv-wrap">
  <a class="sv-bn" href="/serving-robot-one-less-staff" data-ev="series8:配膳ロボットLP">
    <span class="sv-img"><img src="/site/srl/cta-iso.svg" alt="店の立体図（席・キッチン・配膳ロボットの通り道）" width="1400" height="900" loading="lazy" /></span>
    <span class="sv-text">
      <span class="sv-label">導入前シミュレーション</span>
      <span class="sv-title">配膳ロボットを、導入前に自分の店舗でシミュレーション</span>
      <span class="sv-sub">このシリーズの試算を、店舗で使える形にまとめたページです。店舗の図面と人数から、何人で回るか・どこで止まるか・月いくらかかるかを出します。</span>
      <span class="sv-go">読む<i class="ms">arrow_forward</i></span>
    </span>
  </a>
</div>
<style>
  .sv-wrap { container-type: inline-size; }
  .sv-bn { display: grid; grid-template-columns: 1fr; overflow: hidden; border-radius: 8px; box-shadow: 0 8px 16px rgba(0,0,0,.08); background: #eceef1; color: #121418; text-decoration: none; }
  .sv-bn:focus-visible { outline: 2px solid #121418; outline-offset: 3px; }
  .sv-img { position: relative; display: block; height: 220px; overflow: hidden; }
  .sv-img img { position: absolute; top: 12px; left: 12px; display: block; width: calc(100% - 24px); height: calc(100% - 24px); object-fit: contain; object-position: 50% 50%; transition: transform .6s ease; }
  .sv-bn:hover .sv-img img { transform: scale(1.03); }
  .sv-text { display: grid; align-content: center; gap: 10px; padding: 24px 20px 28px; word-break: auto-phrase; text-wrap: pretty; }
  .sv-label { font: 700 12px/18px var(--sans); color: #5c616b; letter-spacing: .08em; }
  .sv-title { margin-top: 4px; font: 900 22px/1.45 var(--sans); }
  .sv-sub { font: 400 14px/1.7 var(--sans); color: #4a4f58; max-width: 40em; }
  .sv-go { justify-self: start; display: inline-flex; align-items: center; gap: 6px; height: 44px; margin-top: 6px; padding: 0 20px; border-radius: 4px;
    background: #f2600c; color: #fff; font: 700 14px/1 var(--sans); white-space: nowrap; transition: background .15s, color .15s; }
  .sv-bn:hover .sv-go { background: #121418; color: #fff; }
  .sv-go .ms { font-size: 18px; transition: transform .2s; }
  .sv-bn:hover .sv-go .ms { transform: translateX(3px); }
  /* 広いときは文字を左・絵を右に。文字の列は 360〜600px、残りの幅に絵を真ん中に置く */
  @container (min-width: 720px) {
    .sv-bn { grid-template-columns: minmax(360px, 600px) minmax(0, 1fr); }
    .sv-img { grid-column: 2; grid-row: 1; height: auto; min-height: 260px; }
    .sv-img img { top: 16px; left: 0; width: calc(100% - 24px); height: calc(100% - 32px); object-position: 50% 50%; }
    .sv-text { grid-column: 1; grid-row: 1; padding: 36px 24px 36px 36px; }
  }
</style>
```

### tools/make_cta_iso.py（配膳ロボットのカードの立体の絵を作るスクリプト）

```python
"""TOP の導入前ガイド・配膳ロボットのカードの絵（public/site/srl/cta-iso.svg）を作る。
試算と同じ店（plan-p1.svg：席・キッチン・レジの位置）を、斜め上から見た立体の絵にする。
色は配膳ロボットの LP で使っている色だけ（オレンジ #f2600c・黄色 #f2c230・青 #2f5bd8・濃い灰色）。
ロボットの通り道は、通路の中心を通る見せ方の線で、試算の結果ではない。
使い方：python3 tools/make_cta_iso.py
"""
import re, math
import os
ROOT=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
s=open(os.path.join(ROOT,'public/site/srl/plan-p1.svg')).read()
R=[]
for m in re.finditer(r'<rect ([^>]*)/>',s):
    a=dict(re.findall(r'([\w-]+)=\"([^\"]*)\"',m.group(1)))
    R.append((float(a['x']),float(a['y']),float(a['width']),float(a['height']),a.get('fill'),a.get('stroke'),'stroke-dasharray' in a))
tables=[(r[0]+0.1,r[1]+0.1,r[2]-0.2,r[3]-0.2)+r[4:] for r in R if r[5]=='#111' and r[4]=='#fff']
kitchen=[r for r in R if r[4]=='#e3e3df' and r[0]>=14]
others_k=[r for r in R if r[4]=='#e3e3df' and r[0]<14]
walls=[r for r in R if r[4]=='#777']
others=[r for r in R if r[4]=='#ffffff']+others_k
# 通り道（通路の中心を通る）
PASS=(17.7,10.9)
routes=[[PASS,(17.7,12.1),(9.2,12.1),(9.2,6.6)],
        [PASS,(17.7,12.1),(5.5,12.1),(5.5,4.6)],
        [PASS,(17.7,12.1),(1.8,12.1),(1.8,8.4)],
        [PASS,(17.7,12.1),(12.7,12.1),(12.7,9.0)]]
ORANGE='#f2600c'; YEL='#f2c230'; BLUE='#2f5bd8'; DARK='#242424'; MID='#3a3a3a'
def pts(r): return ' '.join(f'{x},{y}' for x,y in r)
robots=[(9.2,9.4),(5.5,12.1)]
staff=[(12.7,5.0),(3.0,12.6),(19.5,11.4)]
def rect(r,fill,stroke='none',sw=0,rx=0.12): x,y,w,h=r[:4]; return f'<rect x="{x}" y="{y}" width="{w}" height="{h}" rx="{rx}" fill="{fill}" stroke="{stroke}" stroke-width="{sw}"/>'
def robot(x,y,c=ORANGE,ring='#fff',r=0.62): return f'<circle cx="{x}" cy="{y}" r="{r}" fill="{c}"/><circle cx="{x}" cy="{y}" r="{r*0.45}" fill="none" stroke="{ring}" stroke-width="0.14"/>'
def person(x,y,c=BLUE,r=0.42): return f'<circle cx="{x}" cy="{y}" r="{r}" fill="{c}" stroke="#fff" stroke-width="0.1"/>'
VB='viewBox="-1.2 -1.2 26.4 18.4"'
def svg(inner,bg,vb=VB): return f'<svg xmlns="http://www.w3.org/2000/svg" {vb}><rect x="-50" y="-50" width="200" height="200" fill="{bg}"/>{inner}</svg>'

# 2 立体（斜め上から）
c=math.cos(math.radians(30)); sn=math.sin(math.radians(30))
def P(x,y,z): return ((x-y)*c,(x+y)*sn-z)
def poly(ps,fill,stroke='none',sw=0): return f'<polygon points="{" ".join(f"{a:.3f},{b:.3f}" for a,b in ps)}" fill="{fill}" stroke="{stroke}" stroke-width="{sw}" stroke-linejoin="round"/>'
def box(x,y,w,h,z,top,side1,side2):
    X,Y=x+w,y+h
    o=poly([P(X,y,0),P(X,Y,0),P(X,Y,z),P(X,y,z)],side1)
    o+=poly([P(x,Y,0),P(X,Y,0),P(X,Y,z),P(x,Y,z)],side2)
    o+=poly([P(x,y,z),P(X,y,z),P(X,Y,z),P(x,Y,z)],top)
    return o
def iso():
    o=poly([P(0,0,0),P(24,0,0),P(24,16,0),P(0,16,0)],'#ffffff')
    o+=poly([P(0,0,0),P(24,0,0),P(24,0,1.2),P(0,0,1.2)],'#3a3a3a')+poly([P(0,0,0),P(0,16,0),P(0,16,1.2),P(0,0,1.2)],'#242424')
    o+=''.join(f'<polyline points="{" ".join(f"{a:.3f},{b:.3f}" for a,b in [P(x,y,0.02) for x,y in rt])}" fill="none" stroke="{ORANGE}" stroke-width="0.18" stroke-dasharray="0.45 0.3" stroke-linecap="round"/>' for rt in routes)
    items=[('b',r[:4],0.75,(YEL,'#d9a91c','#c4951a')) for r in tables]+[('b',r[:4],1.0,('#4a4a4a','#2f2f2f','#242424')) for r in kitchen]+[('b',r[:4],0.6,('#e6e6e6','#cfcfcf','#bdbdbd')) for r in others]
    items+=[('b',(x-0.4,y-0.4,0.8,0.8),1.3,(ORANGE,'#d4520a','#bf4a09')) for x,y in robots]
    items+=[('p',(x-0.3,y-0.3,0.6,0.6),0,None) for x,y in staff]
    # 奥にあるものから描く（x か y で完全に手前にあるものを後に）
    def behind(a,b):
        ax,ay,aw,ah=a[1]; bx,by,bw,bh=b[1]
        return ax+aw<=bx+1e-6 or ay+ah<=by+1e-6
    order=[]; rest=items[:]
    while rest:
        for it in rest:
            if not any(behind(o2,it) is False and behind(it,o2) is False and False for o2 in rest):
                pass
        # 他のどれよりも手前でないもの（＝自分の奥にまだ描いていないものがないもの）を選ぶ
        pick=None
        for it in rest:
            if not any(o2 is not it and behind(o2,it) for o2 in rest): pick=it; break
        if pick is None: pick=min(rest,key=lambda t:t[1][0]+t[1][1])
        order.append(pick); rest.remove(pick)
    for t,r,z,cols in order:
        if t=='b': o+=box(r[0],r[1],r[2],r[3],z,*cols)
        else:
            cx,cy=P(r[0]+0.3,r[1]+0.3,0); o+=f'<ellipse cx="{cx:.3f}" cy="{cy-1.05:.3f}" rx="0.3" ry="0.3" fill="{BLUE}"/><rect x="{cx-0.3:.3f}" y="{cy-0.7:.3f}" width="0.6" height="0.8" rx="0.26" fill="{BLUE}"/>'
    xs=[P(x,y,0)[0] for x,y in [(0,0),(24,0),(24,16),(0,16)]]; ys=[P(0,0,1.4)[1],P(24,16,0)[1]]
    vb=f'viewBox="{min(xs)-0.6:.2f} {ys[0]-0.6:.2f} {max(xs)-min(xs)+1.2:.2f} {ys[1]-ys[0]+1.2:.2f}"'
    return f'<svg xmlns="http://www.w3.org/2000/svg" {vb} role="img" aria-label="店の立体図（席・キッチン・配膳ロボットの通り道）">{o}</svg>'



open(os.path.join(ROOT,'public/site/srl/cta-iso.svg'),'w').write(iso())
print('public/site/srl/cta-iso.svg')
```

### src/pages/index.astro（TOP。セクションの並び）

```astro
---
import Base from '../layouts/Base.astro';
import RecordCard from '../components/RecordCard.astro';
import { ymd } from '../lib/format';
import { media } from '../lib/media';
// SNS アイコン（Font Awesome Free 6.7.2・CC BY 4.0。ライセンス表記は各 SVG の中に残している）
import icGithub from '../icons/github.svg?raw';
import icLinkedin from '../icons/linkedin.svg?raw';
import icX from '../icons/square-x-twitter.svg?raw';
import icYoutube from '../icons/youtube.svg?raw';
import { allCards } from '../lib/records';
import MangaCard from '../components/MangaCard.astro';
import LoadMore from '../components/LoadMore.astro';
import GuideCards from '../components/GuideCards.astro';
import ThinkingBanner from '../components/ThinkingBanner.astro';
import { allManga } from '../lib/records';
// Studio のトップと同じく、4コマは新しい4話
const mangaCards = allManga.slice(0, 4);

const series = [
  { href: '/series1', img: 's-1920x1318_v-frms_4cd7792b-68a1-4239-ad08-0785c4e538c5.webp', en: 'Drug Delivery Robot', ja: '薬剤搬送ロボットハコブくん',
    desc: 'A multidisciplinary documentation of Hakobu — a hospital drug-delivery robot — covering HRI design, UI, autonomous navigation in Unity, and daily development logs, told alongside 4-panel manga.' },
  { href: '/series6', img: 's-1672x941_76620d86-fa7b-491f-b554-99c2f8981d8d.webp', en: 'Physical AI Lab', ja: 'フィジカルAI研究室',
    desc: 'Building a Physical AI research environment at home, from zero — reproducible by anyone. The first build: an arm that learns from failure.' },
  { href: '/series7', img: 's-1800x1200_v-frms_82af05c4-20df-4ea1-b88d-355ed8fabd63.webp', en: 'Image recognition and Object detection', ja: '画像認識と物体検出',
    desc: 'Relearning image recognition from the bottom up, one measurable step at a time — pixels, colour spaces, thresholds, morphology, contours, and the metrics that judge them. Nothing is assumed: every step is measured on real photographs first.' },
  { href: '/series8', img: '/site/series8-service-robot-simulation.png?v=3', en: 'Service Robot Simulation', ja: 'サービスロボット導入シミュレーション',
    desc: 'What changes when a store brings in serving, cleaning or delivery robots — estimated before they arrive. Time, order and counts are simulated in SimPy; collisions and spills are left to Unity. Every assumption, result and line of code is published.' },
  { href: '/series5', img: 's-2528x1694_7a2b46a9-02c8-49d6-92c4-2e7994843726.webp', en: 'Deep Dive', ja: '考察記事',
    desc: 'Essays that go beyond the build log — examining why things work, what they mean, and where the field is heading.' },
  { href: '/series2', img: 's-1920x1318_v-frms_0d775000-730b-4ac2-90b5-d814a9f53fc6.webp', en: 'R2R2R', ja: 'デジタルツイン学習-R2R2R（Real to Render to Real）',
    desc: 'A hands-on project proving that robot arm motion can be designed without a robotics background — using only an iPhone for 3D scanning and Unity for simulation.' },
  { href: '/series4', img: '/site/series4-behind-the-solo-lab-door.png', en: 'Behind the Solo Lab', ja: 'ひとり研究所の裏側', desc: 'How a one-person Physical AI lab keeps running — the site, the videos and the records behind the research.' },
];
const records = await allCards();
import { SITE, SITE_NAME, AUTHOR, PUBLISHER } from '../lib/seo';
const jsonLd = [
  { '@context': 'https://schema.org', '@type': 'WebSite', name: SITE_NAME, url: SITE + '/', inLanguage: 'ja', publisher: PUBLISHER },
  { '@context': 'https://schema.org', ...PUBLISHER, founder: AUTHOR,
    sameAs: ['https://www.youtube.com/@PixelstoMotors', 'https://github.com/PixelstoMotors', 'https://x.com/adaptdesignjp'] },
  { '@context': 'https://schema.org', ...AUTHOR, sameAs: ['https://www.linkedin.com/in/eiichi-shimazu/', 'https://x.com/adaptdesignjp'], description: '29年のデザイナー経験を持つデザイナー／ディレクター。Pixels to Motors で人とロボットの関わり（HRI）とフィジカルAIを研究・発信している。' },
];
---
<Base title="Pixels to Motors ｜ 人とロボットの関わりを、シミュレーションでデザインする"
  description="29年のデザイナー経験を、いまロボティクスに応用しています。机の上のロボットアームでお手本のデータを集め、AIに学習させ、動かして確かめる。その環境を自宅で組み、誰でも同じ手順で始められる形で公開しています。"
  ogImage="/site/ffb300c2-1071-4714-978c-87d386d5dfd3.png" path="/" jsonLd={jsonLd}>

  <section class="hero">
    <div class="hero-text">
      <h1>Pixels to Motors | 人とロボットの関わりをシミュレーションでデザインする</h1>
      <p>29年のデザイナー経験を、いまロボティクスに応用しています。机の上のロボットアームでお手本のデータを集め、AIに学習させ、動かして確かめる。その環境を自宅で組み、誰でも同じ手順で始められる形で公開しています。基準は物理精度ではなく、人がロボットをどう感じ、どう関わるかという体験の成立。過程の失敗も含めて公開しています。</p>
    </div>
    <video class="hero-video" src={media("/media/hakobu_fv_voice_eleven.mp4") + "#t=0.01"} controls muted autoplay loop playsinline></video>
  </section>

  <!-- 解説動画：YouTube の新着を GitHub の videos.json から読む埋め込み（Studio で使っていたものをそのまま） -->
  <section class="sec"><div class="panel">
    <div class="embed-wide"><iframe src="/embeds/top-video.html" sandbox="allow-scripts allow-popups allow-popups-to-escape-sandbox" title="解説動画" data-embed style="height:450px"></iframe></div>
  </div></section>

  <!-- 導入前ガイド：LP 2つ（GPU を買うか借りるか・配膳ロボットの導入前シミュレーション）への入口 -->
  <section class="sec"><div class="panel">
    <h2 class="sec-h">Guide | 導入前ガイド</h2>
    <GuideCards />
  </div></section>

  <section class="sec"><div class="panel">
    <h2 class="sec-h">Archive | 4コママンガ</h2>
    <div class="grid4">{mangaCards.map((m) => <MangaCard item={m} />)}</div>
    <div class="center"><a class="btn-more" href="/manga-archive">もっと見る<i class="ms">arrow_forward</i></a></div>
  </div></section>

  <!-- 考えのページ（/thinking）への入口。4コマとシリーズの間に置く
       （2026-10-24 のアクセスの記録：TOP は25%の深さまでで42%、下まで33%しか読まれない。一番下では届かないため上げた。最初の画面の直下は上すぎるとエイイチの判断） -->
  <section class="sec"><div class="panel">
    <h2 class="sec-h">Thinking | いまの考え</h2>
    <ThinkingBanner />
  </div></section>

  <section class="sec"><div class="panel">
    <h2 class="sec-h">Series | シリーズ</h2>
    <div class="grid2">
      {series.map((s) => (
        <a class="scard" href={s.href}>
          <img src={s.img.startsWith('/') ? s.img : media(`/media/${s.img}`)} alt={`${s.en}｜${s.ja}`} loading="lazy" />
          <div class="sc-meta">
            <div class="sc-line"><span class="sc-en">{s.en}</span><span class="sc-ja">{s.ja}</span></div>
            {s.desc && <p class="sc-desc">{s.desc}</p>}
          </div>
        </a>
      ))}
    </div>
  </div></section>

  <section class="sec"><div class="panel">
    <h2 class="sec-h">Record | 記録</h2>
    <LoadMore limit={12} total={records.length}>{records.map((c) => <RecordCard item={c} />)}</LoadMore>
    <div class="embed-banner"><iframe src="/embeds/top-banner.html" sandbox="allow-scripts allow-popups allow-popups-to-escape-sandbox allow-top-navigation-by-user-activation" title="お知らせ" data-embed style="height:240px"></iframe></div>
  </div></section>

  <section class="sec" id="about"><div class="panel">
    <h2 class="sec-h">Sole Prop | 事業所について</h2>
    <div class="prop">
      <div class="prop-person">
        <video class="prop-photo" src={media("/media/s-1280x720_ff64009f-cd40-4e7d-8ba3-350ff0d6c3ad.mp4")} poster={media("/media/s-2048x2048_5af0bc9f-8d23-4bdb-85e4-ada51bfd7bbd.webp")} muted autoplay loop playsinline></video>
        <p class="prop-role">Robotics UX &amp; HRI Designer</p>
        <p class="prop-name">島津 栄一</p>
      </div>
      <div class="prop-body">
        <p class="prop-lead">画面（Pixels）のデザインから、動き（Motors）のデザインへ</p>
        <p class="prop-text">29年にわたるデザイナーとしての知見を土台に、人とロボットの関わり（HRI）と、ロボットが学習できる環境づくりに取り組むデザイン事務所です。Unityでのシミュレーション、実機のロボットアーム、借りたGPUでの学習・推論までを自分の手で回し、AIエージェント（Claude Code）を設計と実装の相棒にしています。基準は物理精度ではなく体験の成立。画面上の「Pixels（デジタル）」の設計を、現実の「Motors（モーター）」へ——その過程を公開しています。</p>
        <dl class="prop-facts">
          <div><dt>事業所名</dt><dd>ADAPT DESIGN</dd></div>
          <div><dt>設立</dt><dd>2021年10月</dd></div>
          <div class="wide"><dt>研究・実践分野</dt><dd>フィジカルAI（学習・推論） / HRI / ロボティクスUX設計 / デジタルツイン / 画像認識 / Unity / R2R2R</dd></div>
          <div><dt>SNS</dt><dd class="sns">
            <a href="https://github.com/PixelstoMotors/r2r2r-content" aria-label="GitHub" set:html={icGithub} />
            <a href="https://www.linkedin.com/in/eiichi-shimazu/" aria-label="LinkedIn" set:html={icLinkedin} />
            <a href="https://x.com/adaptdesignjp" aria-label="X" set:html={icX} />
            <a href="https://www.youtube.com/@PixelstoMotors" aria-label="YouTube" set:html={icYoutube} />
          </dd></div>
        </dl>
      </div>
    </div>
  </div></section>
</Base>

<style>
  .hero { max-width: 964px; margin: 0 auto; padding: 104px 0 40px; display: flex; gap: 40px; align-items: flex-start; }
  .hero-text { flex: 1 1 588px; min-width: 0; }
  .hero h1 { margin: 0 0 16px; font: 600 29px/40.6px var(--sans); }
  .hero p { margin: 0; font: 400 19px/1.6 'Noto Sans JP', sans-serif; color: #333; }
  .hero-video { flex: 0 0 336px; width: 336px; height: 320px; background: #111; border-radius: 4px; object-fit: cover; }
  .embed-wide { margin: 0 -16px; } /* 埋め込み側の左右 16px の余白ぶん外へ出し、カードの端をほかの節と揃える */
  .embed-wide iframe, .embed-banner iframe { display: block; width: 100%; border: 0; }
  .embed-banner { max-width: 964px; margin: 48px auto 0; }

  .grid4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; }

  .grid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; }
  .scard { display: block; background: #fff; border-radius: 8px; box-shadow: 0 8px 16px rgba(0,0,0,.08); overflow: hidden; }
  .scard img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
  .sc-meta { padding: 16px; display: flex; flex-direction: column; gap: 8px; }
  .sc-line { display: flex; align-items: baseline; gap: 8px 12px; flex-wrap: wrap; }
  .sc-en { font: 600 24px/24px var(--sans); }
  .sc-ja { font: 500 14px/16.8px var(--sans); }
  .sc-desc { margin: 0; font: 400 13px/1.6 var(--sans); color: #555; }

  .center { display: flex; justify-content: center; margin-top: 40px; }
  .btn-more { display: inline-flex; align-items: center; gap: 16px; padding: 8px 24px; border-radius: 4px; background: var(--dark); color: #fff; font: 500 20px/30px var(--sans); }

  .prop { display: flex; gap: 40px; }
  .prop-person { flex: 0 0 160px; text-align: center; }
  .prop-photo { width: 160px; height: 160px; border-radius: 50%; object-fit: cover; display: block; }
  .prop-role { margin: 12px 0 4px; font: 300 12px/1.3 var(--sans); color: #888; }
  .prop-name { margin: 0; font: 500 20px/20px var(--sans); }
  .prop-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 12px; }
  .prop-lead { margin: 0; padding: 10px 8px; background: #f7f7f7; font: 600 18px/1.4 var(--sans); }
  .prop-text { margin: 0; font: 400 14px/1.5 var(--sans); color: #333; }
  .prop-facts { margin: 8px 0 0; display: flex; flex-wrap: wrap; gap: 16px 40px; }
  .prop-facts dt { font: 300 12px/15.6px var(--sans); color: #888; }
  .prop-facts dd { margin: 4px 0 0; font: 400 14px/1.5 var(--sans); }
  .sns { display: flex; gap: 12px; }
  .sns a { display: inline-flex; color: #242424; }
  .sns a :global(svg) { height: 18px; width: auto; display: block; }
  .sns a:hover { color: #666; }

  @media (max-width: 1023px) {
    .hero { padding: 88px 24px 32px; flex-direction: column; gap: 24px; }
    /* 縦並びでは flex-basis の 588px が高さとして効き、文章と動画の間が大きく空いていた */
    .hero-text { flex: none; }
    .hero-video { width: 100%; flex-basis: auto; }
    .grid4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }
  @media (max-width: 599px) {
    .hero { padding: 72px 24px 24px; }
    .hero h1 { font-size: 24px; line-height: 1.5; }
    .hero p { font-size: 16px; line-height: 1.75; }
    .grid2 { grid-template-columns: 1fr; gap: 24px; }
    .grid4 { gap: 16px; }
    .prop { flex-direction: column; align-items: center; gap: 24px; }
  }
  .guide-wrap { max-width: 1280px; margin: 0 auto; }
</style>
```

### codex の検証結果 1回目（codex_検証結果_1回目.md）

```markdown
判定は **「直してから」** です。主な問題は引用の誤字ではなく、仮説を実績に変えていること、条件付きの考えを一般化していること、研究・発信と導入事業の目的が混ざっていることです。

指定された9箇所の引用は、すべて出典中に一字一句一致する部分があり、本人の発言と確認できました。ただし、部分引用の前後関係には問題があります。また、指定外の **P029のかぎ括弧内は出典と一致しません。**

以下、重大なものから並べます。根拠欄では、本人の発言と、AIの応答・地の文を区別します。

---

**[❌ NG] P001・P002・P007**

問題：「何を任せるかを誰も決めていないから」は、導入停滞の原因を一つに絞り、業界全体の不在まで断定しています。P001と続けることで、技術上の問題はもう解決したようにも読めます。

根拠：LOG314の本人の発言は「もしかしたら、みんなロボットにやらせるべきタスクの切り出しそのものが間違ってるから……かな？」という仮説です。LOG233は技術・制度・体験の課題を整理し、LOG315では本人も画像認識から実機を動かす難しさを述べています。「誰も」「〜だから」までは裏付けられません。

修正案：  
P001〜P002：ロボットを動かすことと、現場で使えるようにすることは違う。何を任せ、どこを人に残すかを、実機を触りながら考えています。  
P007：現場の仕事から、ロボットに任せる部分を探す

---

**[❌ NG] P005**

問題：別々の問題を、すべてのロボットがたどる一続きの失敗として書いています。特に「やがて人の手に戻ります」は、元記事で修正された見立てを再び一般化しています。

根拠：LOG306では、本人の「導入されても使われなくなって、人に戻ってしまうようなもの……？」に対し、応答が「全部がそうなっているわけではない」と修正し、すかいらーくの継続運用を挙げています。「2台目が続かない」はLOG286の、別の現場への移転に再び費用がかかる議論です。同じ導入事例の経過ではありません。

修正案：調べた事例には、例外対応が人に戻るものや、別の現場に広げるたびに調整が必要になるものがありました。一方で、動線や運用を組み替えて定着した例もあります。

---

**[❌ NG] P027**

問題：目指していることを、すでに一般に実現できることとして書いています。スマホでのデータ生成、実機での有効性、第三者による再現は、それぞれ別に確かめる必要があります。

根拠：LOG118の地の文は「このパイプラインが成立すれば」と条件を付け、「まだ答えは出ていない」としています。LOG318の本人の発言も「評価軸は『他人が同じ環境で再現できるか』」であり、達成報告ではありません。LOG323にはデータ生成・学習・評価の条件と限界が整理されています。この文全体を達成した第三者の再現記録は、今回の本文では**未確認**です。

修正案：スマホとシミュレーションを使って動きのデータを作り、他の人も同じ条件で組み、同じ基準で結果を確かめられる手順を公開したい。

---

**[❌ NG] P031**

問題：「ハードメーカーではない」が「ロボットを作って売る側ではない」に広がっています。また、LOG336の本人の発言だけから「動きと仕事の渡し方を設計する側」とまで役割を確定することはできません。

根拠：本人が述べたのは「ハードを作って売るとか貸すとかいうモデルより、ソフト側で出来ることをやり続ける方が向いていそう」と、デモ機で自分のシミュレーションやソフトによる変化を見せ、ハードの知識も更新する必要性です。「現場の要求を学習・評価の条件に翻訳する仕事が合う」という絞り込みは、AIの応答です。

修正案：ハードを作って売る・貸すモデルより、ソフト側でできることを続ける方が、自分には向いていそうです。デモ機でシミュレーションやソフトによる変化を見せながら、ハードの知識や技術も更新していきたい。

---

**[❌ NG] P029――出典にない引用**

問題：「言葉にできない仕事を、ロボットに渡したい」は、LOG314の本人の発言として一致する箇所がありません。引用の使用条件を満たしていません。

根拠：LOG314にあるのは、地の文の「要求を書けない現場が実在して、金を払う」という記述です。本人の発言による一致する引用は**未確認**です。

修正案：仕事の切り出しや判断の言語化に、現場が対価を払うのか。技術の可能性とは別に、確かめる必要があります。

---

**[❌ NG] P029――「まだ一件も」の時点**

問題：「まだ一件も確かめていない」を、2026年10月24日現在の本人の事実として書く根拠がありません。

根拠：LOG314の記述は「ただしこの時点では……一件も確認していなかった」です。記事内の過去の時点についての地の文であり、検証日現在の確認件数ではありません。現在の件数は**未確認**です。

修正案：LOG314では、要求を言葉にできない現場が実在し、その仕事に対価を払うかどうかは、確認できていない問題として扱いました。

---

**[❌ NG] P010**

問題：「言葉にして残す。そうすれば、その仕事を機械に渡せる」は、言語化を機械化の十分条件にしています。また、熟練者の仕事全体を渡すようにも読めます。

根拠：LOG314には、水・塩への対応、不定形物の把持、人に残す判断などが登場します。LOG319の応答も、判断の記録だけでなく、照明条件・判定基準・迷う品物の運用への置き換えを必要としています。本人の発言は「暗黙知があるうちに自動化、AI化、ロボット化しないと技術が消えるね」であり、言語化だけで実装できるとは言っていません。

修正案：熟練者がどこを見て、なぜそう判断するかを、本人に聞けるうちに記録したい。別の人が確かめられる言葉や基準にしたうえで、機械に任せられる部分を考えます。

---

**[❌ NG] P012**

問題：MicroFactoryへの評価・期待を、「現場で前に進んでいた」という実績に変えています。

根拠：LOG320の本人の表現は「広げているように思います」「着実に進むのかなという印象」です。さらに後のLOG329の調査結果には「出荷実績や顧客数の最新値は確認できていません」とあります。現場での定着や継続運用を示す根拠は**未確認**です。

修正案：MicroFactoryの構成や動画を調べたとき。今使える技術を組み合わせ、任せる作業を絞る進め方に注目しました。

---

**[❌ NG] P014**

問題：既存機械への後付けという方向性から、「中小企業でも手が届く」という費用・導入可能性の保証に飛んでいます。

根拠：LOG315の本人の発言は「中小にはハードルが低くていいかもな」です。LOG306・LOG324には現場ごとの設計・組み込み費用の問題が残っています。LOG329でも、顧客側の技術力や業務プロセスが導入上のリスクとして挙げられています。

修正案：人型ロボットを待つだけでなく、既存の機械に画像認識や判断を後から足す方法も考えています。中小企業が導入する負担を下げられるか、現場ごとの調整も含めて見たい。

---

**[❌ NG] P018**

問題：「動きと間を作れる」から「人がとなりにいられる」までを、確認済みの効果としてつないでいます。読みやすさと、人がそばで使えることの実証は別です。

根拠：LOG296では、予告・一貫性などの安い手段と、認識が外れた場合にも働く物理的な対策が分けられています。LOG262も、演出で実際の遅延は消せないと留保しています。本人による利用者評価や、この因果関係を確かめた結果は**未確認**です。

修正案：高価な機体だけに頼らず、次の動きが伝わる予備動作や、待つ間の振る舞いを試したい。それがそばにいる人にどう受け取られるかも、確かめたい。

---

**[❌ NG] P004**

問題：「毎月のように」という進歩の頻度を、本文から確認できません。

根拠：各記事には研究・製品・手法の変化が登場しますが、月ごとの進歩を同じ基準で追った根拠はありません。「毎月」は**未確認**です。

修正案：研究や製品を追うなかで、ロボットに使える技術や手段が増えていると感じています。

---

**[⚠️ 要注意] P003**

問題：「人の代わりではなく」は、本人が検討している仕事の代替まで排除します。「現場に届けたい」だけを最上段に置くと、研究と公開を中心にした活動より、導入提供の意図が強く見えます。

根拠：LOG314では本人が、わかめ・魚の仕事を人から代替したいという話を紹介しています。LOG318では研究・発信と省力化事業を区別し、本人は再現性を評価軸に選んでいます。

修正案：人手の足りない仕事を機械に任せることも、人が自分でできるように支えることも、試したい。その条件を実機で確かめ、他の人も試せる形にして公開していきたい。

---

**[⚠️ 要注意] P019・P021・P022**

問題：過去の発言であることは示されていますが、無人化を最適と考えた条件が引用から落ちています。「人を消さない」という見出しも、無人化全般への反対に読めます。

根拠：P021の直前には、本人の「生産性の向上、完全自動化、自律化なら」「人が入らない前提の場所で」という条件があります。P022は主体性についての問いであり、無人化や作業代替を全面否定する発言ではありません。LOG324では操縦・見守り・自律の複数の形を検討しています。

修正案：  
P019：人が自分でできる余地を残す  
P021の前：生産性と完全自動化だけを考えたときは、無人化が最適だと思っていました。そこから、人の主体性を支える役割も考えるようになりました。

---

**[⚠️ 要注意] P020**

問題：セルフレジの場面を、本人が直接見て考えを変えた体験として読ませる可能性があります。その出来事の確認と、記事の導入に例が使われていることは分ける必要があります。

根拠：セルフレジの光景はLOG292の地の文にあります。本人の独立した発言には主体性への疑問がありますが、本人がその場面を目撃し、それが転換の直接のきっかけだったという事実は**未確認**です。

修正案：LOG292では、セルフレジの例から、無人化だけでなく、人の主体性を支えるロボットの役割について考えました。

---

**[⚠️ 要注意] P015**

問題：「読めることが先」の「先」が、技術・安全・精度より優先するという順序にも読めます。

根拠：LOG212では本人が「Sim-to-Realのギャップがわからないと、Sim-to-Human ギャップもわからない」と指摘しています。LOG223も確実な実行の骨格と動きの質を分けています。人が読める動きを重視することは言えても、他の条件より先とは言えません。

修正案：次にどう動くかが、人に伝わることを大切にする

---

**[⚠️ 要注意] P024**

問題：「大きな会社と同じ問い」が、現在の目的を説明する中心としては粗すぎます。研究対象の共通性と、目指す成果・評価軸の違いが消えています。

根拠：LOG140には構造上の対応が書かれていますが、LOG318では本人が再現性を評価軸に選んでいます。なお、メモにあるLOG219の「安売りの罠」はAIの応答です。それだけで、本人が以前の考えを明示的に撤回したと判定することもできません。

修正案：個人で試せて、他の人も確かめられる環境を増やす

---

**[⚠️ 要注意] P023**

問題：「効率化とは別の場所」「役割ができる」だけでは、何を考えているのかが伝わりません。また、役割が成立したようにも読めます。

根拠：LOG292で本人は、指を差す、ボタンを押す、手を振るという案を述べる一方、「具体例を思いついていない」「多くの人がそこに市場があると思っていない」とも述べています。

修正案：指を差す、代わりにボタンを押すなど、人が自分で進めるための手助けも、ロボットの役割として考えています。

---

**[⚠️ 要注意] P028**

問題：元の問いが「話しかけるロボットは役立つか」に縮んでいます。本人が問うていたのは、その問いかけが人の考えや仕事に新しい価値を生むかどうかです。

根拠：LOG262の本人の発言は「自発性を持ち自ら質問してくる」存在が、「人の価値を押し上げたり、仕事に新しい価値を見つける手助けになったり」する有用性についての問いです。末尾の引用自体は正確です。

修正案：自分から問いかけるロボットは、人が考えたり、仕事に新しい価値を見つけたりする助けになるのか。その有用性は、まだ答えのない問いとして考えています。

---

**[⚠️ 要注意] P028〜P029――主体性を支える具体物の不在**

問題：④を考えの軸に置くなら、そのロボットの姿や市場をまだつかめていないという迷いも必要です。現状は、自発的な会話と支払いの二問に留保が偏っています。

根拠：LOG292の本人の発言に「そういったロボットや自動化の機械の具体例を思いついていない」とあります。その後にこの問題が解消したかは**未確認**です。

修正案：人が自分でできるように支えるという考えを、どんな機械にするのか。誰が、どの価値に対価を払うのかも、確かめる必要があります。

---

**[⚠️ 要注意] P028〜P029――技術と再現性の未確認事項**

問題：⑤でデータ生成と第三者の再現まで掲げる一方、それを左右する未確認事項が載っていません。

根拠：LOG318には、卓上での結果が現場にどこまで当てはまるかという未確認事項があります。LOG323には、スマホ操作とリーダーアームのデータ品質の差、必要な実演本数、VLM判定と人の採点の一致が分からないとあります。後者には、本人のPICKで成功判定は出たものの、一致率は測れていなかったという記述もあります。

修正案：作ったデータが実機や現場でどこまで使えるのか。AIによる成否判定も含め、同じ条件で比べて確かめる必要があります。

---

**[⚠️ 要注意] P010・P031――責任と受け渡しが落ちている**

問題：「仕事の渡し方」を掲げながら、失敗時に誰が引き受けるかという重要な考えが見えません。仕事の切り出しと動きの読みやすさだけでは、この論点を代表できません。

根拠：LOG229で本人は「人とロボットの受け渡し設計」への具体化を求め、認証と受領で「責任を明確にする」と述べています。LOG245でも、誰が責任を持つかを一目で分かる仕組みを重視しています。

修正案：物や仕事をロボットから人に渡すとき、誰が受け取り、誰が責任を持つかも分かるようにしたい。

---

**[⚠️ 要注意] P015・P031――動きを説明する言葉が落ちている**

問題：③が動きの見え方の話に閉じ、動きの意味や判断理由を言葉にし、関係者の認識を揃えるという反復する考えが落ちています。

根拠：LOG112の本人は「スワイプとピンチを日本で先にやりたい」と述べています。LOG214では、動きの必要性を他の関係者に説明し、ルールや認識をすり合わせる仕事も必要だと明言しています。これは、熟練者の判断を言葉にする①とは対象が異なります。

修正案：なぜその速度や間で動かすのかも言葉にし、ロボットに関わる人どうしで判断を共有できるようにしたい。

---

**[⚠️ 要注意] P024・P027・P030――公開する意図が弱い**

問題：「小さく回す」「同じ結果にたどり着く」だけでは、なぜ記録を公開しているのかが伝わりません。現在の研究・発信の目的として、もっと前面に必要です。

根拠：LOG318では、本人が再現性を評価軸に選び、記事は手順を公開する方向に結んでいます。LOG290・LOG306・LOG318には、誤った見立てや検証による修正も残されています。P030の社会実装への意欲だけでは、この活動方法と目的を代表しきれません。

修正案：できたことだけでなく、失敗した条件や判断の理由も公開し、他の人が同じ環境で確かめられる形を増やしたい。

---

**[⚠️ 要注意] P019・P023――最近の「人」の扱いが抜けている**

問題：人を残す意図が主体性だけで説明され、操縦・見守り・人材育成を段階的に設計するという、10月の考えが落ちています。

根拠：LOG324で本人は、自律だけでなく無線操縦・有線操縦・システム管理・群での動作を挙げています。また「段階的に人材を育成しながら」「社会導入や人材教育についても考えながら進めていく必要性は高い」と述べています。

修正案：最初からすべてを自律化するだけでなく、人が操縦し、見守り、扱う技術を身につけながら進める方法も考えています。

---

**[⚠️ 要注意] P007・P011――軸の区別**

問題：①も②も「タスクを切り出す」に着地しており、何が違う軸なのかが曖昧です。

根拠：LOG318は、人が集まらない仕事を先に探すという選定の順番です。LOG315・LOG320は、見つけた仕事を現在の機械・コード・AIでどう成立させるかという方法の話です。この区別なら重複を減らせます。

修正案：  
P007：人が足りない仕事から、任せる作業を探す  
P011：今の技術でできる範囲を見極める

---

**[⚠️ 要注意] P003・P031――日本への問題意識の脱落**

問題：日本で設計の言葉や導入を担う側に立ちたいという問題意識が、ページから落ちています。ただし、それが現在も同じ重みかは未確認であり、強い危機の宣言として復活させるのも不適切です。

根拠：LOG112の本人の「設計思想ごと持っていかれる可能性」「スワイプとピンチを日本で先にやりたい」、LOG145の「日本ではこの危機感の鈍さが問題ですかね」があります。一方、LOG145には「おれにそれを求められるかはまた別」という留保もあります。

修正案：日本でも、ロボットの動きや使い方を設計する言葉を育てたいと考えてきました。

---

補足として、次の箇所は誤り扱いにしません。

- **P008**は「話を聞いた」と書いており、LOG314の本人の「直接現場を見たわけではない」と整合しています。
- **P026**は他社の収集についての発言ですが、P025と続けて読ませる現状なら、その主語は保たれています。本人自身の収集方針の引用にはできません。
- **P016・P017**は、滑らかさと怖くなさを同一視しないという本人の発言に支えられています。LOG336で滑らかな動きを評価したことだけでは、撤回とは判定できません。
- **P030**は本人の意欲として正確です。「クリアした」ではないため、達成を盛ってはいません。
- 5つの見出しは、新しい専門用語・肩書きの追加とまでは判定しません。問題は主に、P007・P019・P024が条件を省いた標語になっていることです。
- **P032**は導線の編集判断です。`/message` の実在・動作は、この本文照合では**未確認**です。

最後の3点です。

1. **デザインに進んでよいか：直してから。** 冒頭の原因断定と、「可能になること」の効果保証は先に書き直す必要があります。

2. **必ず直すべき文番号：P001・P002・P003・P004・P005・P007・P010・P012・P014・P015・P018・P019・P020・P021・P024・P027・P029・P031。** 加えて、責任の受け渡しと、公開・再現・評価を目指す意図を補ってください。

3. **P001〜P002の評価：言えていない。** タスクの切り出しは重要な論点ですが、66本の芯を、技術は解決済み・原因は仕事を決める人の不在、という単一の説明に縮めています。本文から言える候補は次です。

   **ロボットに何を任せ、どう動けば人の役に立つのかを、実機とシミュレーションで確かめ、他の人も試せる形で公開したい。**
```

### codex の検証結果 2回目（codex_検証結果_2回目.md）

```markdown
判定は **「直してから」** です。1回目の原因断定や効果の保証は修正されています。残るのは、引用の条件、評価軸の対象、過去の未解決事項を現在の状態として扱う書き方です。

指定の引用10箇所（P004・P007・P012・P017・P022・P023・P027・P030・P031・P033）は、**すべて出典と一字一句一致し、本人の独立した発言として確認できました。** 以下は、文字の誤りではなく、使う文脈への指摘です。

---

**[⚠️ 要注意] P021・P022**

問題：無人化を最適と考えた条件のうち、「人が入らない前提の場所」がまだ抜けています。「考えが変わったこと」と組み合わせると、以前の無人化支持を撤回したようにも読めます。

根拠：LOG292の本人の発言は「生産性の向上、完全自動化、自律化なら、ある程度人が入らない前提の場所で」という条件付きです。その後に主体性を支える役割を考えていますが、この条件での無人化まで否定した発言は確認できません。LOG324でも、自律化を含む複数の動かし方を検討しています。

修正案：  
P021　考えが広がったこと：生産性と完全自動化を目的に、人が入らない前提の場所を考えると、無人化が答えだと思っていました。そこから、人が自分で進めるのを支える役割も考えるようになりました。

P022の引用は、そのまま使えます。

---

**[⚠️ 要注意] P031**

問題：7月19日時点の「具体例を思いついていない」「多くの人が市場を認めていない」という発言を、現在の状態として読ませています。また、P024ですでに具体的な案を挙げているため、何がまだ思いついていないのかが曖昧です。

根拠：LOG292には、本人による指差し・ボタン操作・呼び込みの案が、P031の引用より前にあります。したがって、身振りの案さえないという意味には使えません。同記事の末尾では機械の姿や市場がつかめていないと整理されていますが、**10月24日現在も同じ状態か、多くの人の市場認識がどうなっているかは未確認**です。後続記事に解決の記録が見つからないことだけでは、現在も未解決だと確定できません。

修正案：  
P031　指を差したり、ボタンを押したりする案を、実際に使われる機械としてどう形にするのか。7月19日のLOG292では、こう書きました。「そういったロボットや自動化の機械の具体例を思いついていないし、多くの人がそこに市場があると思っていないのが実情。」

現在の未解決事項として載せるなら、本人による現在の認識の確認が必要です。本文だけで確実に書けるのは、この日付を付けた形です。

---

**[⚠️ 要注意] P028**

問題：「何の評価の物差しか」が抜けています。⑤の文脈から研究の話とは推測できますが、現場で役立つロボット全般の評価基準まで、再現性一つにまとめたようにも読めます。

根拠：LOG318の本人の発言は「つまりVLAや学習でしか解けない部分が対象になります。評価軸は『他人が同じ環境で再現できるか』」。直前には、省力化の事業と研究・発信のテーマを区別する説明があります。選んでいるのは後者です。現場の導入効果を再現性だけで評価する、という発言ではありません。

修正案：  
P028　考え：自分の研究テーマを選ぶときは、他の人が同じ環境で再現できるかを重視します。

考えを弱める必要はなく、対象を明記すれば済みます。

---

**[⚠️ 要注意] P003**

問題：「調べた現場では」「ロボットもありました」が、現地調査で確認した出来事の報告にも読めます。特に2文目は、LOG286の導入構造についての分析を、具体的に確認した機体の事例へ変えています。

根拠：LOG306の導入は、ニュースを見て導入企業や公開情報を調べ始めたというものです。例外対応が人に戻る問題と、すかいらーくの継続運用には本文の根拠があります。LOG286にも、カメラ位置・机の高さ・対象物が変わると再調整が必要になるという説明がありますが、**本人が現場でその機体を確認した記録や、2文目に対応する特定の導入事例は未確認**です。

修正案：  
P003　公開情報で調べた配膳・清掃・警備ロボットの事例では、ふだんの動作ができても、例外対応が人に戻る問題が報告されていました。別の現場へ広げる際に、調整の費用や手間が再びかかる問題についても考えました。一方で、動線や運用を組み替えて、長く使われている例もあります。

1回目にあった「結局すべて人に戻る」という一般化は、今回の文では解消しています。

---

**[⚠️ 要注意] P030**

問題：引用中の「今」が7月1日を指すのか、ページ公開時点を指すのかが分かりません。「まだ分からないこと」という現在形の節に置くことで、古い発言が現在の回答として働いています。

根拠：LOG262の本人の問いは、現在のP030でほぼ正しく要約されています。同記事には、自発的に質問する存在の有用性を問う発言と「今は答えはなさそうだけど。」があります。ただし、**現在も本人が同じ認識かは未確認**です。問いが後の記事で解決・撤回されたとする根拠も確認できません。

修正案：  
P030　自分から問いかけるロボットは、人が考えたり、仕事に新しい価値を見つけたりする助けになるのか。7月1日のLOG262では、この問いに「今は答えはなさそうだけど。」と書きました。

問いの内容は直す必要がなく、引用の時点を明示する修正です。

---

**[⚠️ 要注意] P026**

問題：「大きな会社」が、引用に対応する本文からは確認できません。多数の人が並ぶ映像と、その運営企業の規模は別の情報です。

根拠：LOG118の本人の発言は「よく中国の工場とかでテレオペレーションで……作業している人たちが何十人もでてくるけど」です。この発言に対応する企業名や企業規模は**未確認**です。記事にはGoogleやFigureの説明もありますが、その企業が、この映像の運営者だとは書かれていません。

修正案：  
P026　気づいた場面：何十人もの人が、工場でロボットを遠隔操作している映像について考えたとき。

P027は、続けて置く現在の構成なら、他者のデータ収集についての発言だと分かります。本人自身の収集方針へのすり替えは起きていません。

---

**[⚠️ 要注意] P001・P002**

問題：仕事の選び方と、動作から現場利用までの隔たりは示せています。ただ、「その間を考える」では、何を可能にしたくて研究しているのかがまだ抽象的です。

根拠：LOG214の本人の発言は、実機を触って社会実装の課題を理解し、解決したいというものです。さらにLOG318では、本人が研究・発信の評価軸として第三者の再現性を選んでいます。現在の冒頭は前者を伝えていますが、後者は⑤まで読まないと分かりません。これは根拠不足ではなく、ページの目的を冒頭でどこまで伝えるかという問題です。

修正案：  
P001　ロボットに、何を任せればいいのか。  
P002　動かすことと、現場で使われることは違う。任せる作業と動き方を、実機とシミュレーションで確かめたい。その手順を、他の人も試せる形で公開したいと考えています。

---

指摘を増やす根拠がなかった箇所も明記します。

- **P006**：「話を聞いた」とする書き方は、LOG314の本人の「直接現場を見たわけではないですが、話は聞いています」と一致します。
- **P008・P013・P018**：それぞれLOG318の人手不足から探す順序、LOG315の人型である必要はないという発言、LOG296の人と同じ場所での意思疎通を必須とする発言に根拠があります。
- **P009・P011・P014・P016・P019・P024・P029**：本文にある問題意識や案の範囲に収まっています。期待を達成済みの効果に変える書き方は解消されています。
- **P032**：LOG323に、VLMによるPICKの判定は出たが人の採点との一致率は測れていなかった、とあります。「どこまで合うかを確かめる」は、この途中段階と矛盾しません。
- **P034**：LOG336の本人の発言の範囲です。ソフト側を続ける方向と、デモ機で変化を見せる意図があり、AIの応答による職務の絞り込みを本人の立ち位置に混ぜていません。
- **5つの軸と見出し**：代表性を否定する根拠や、新しい概念名・肩書きの追加は確認できません。①は仕事の選び方、②は成立させる方法として区別できています。③の意思疎通と④の主体性も、目的が異なります。
- **考えの変化**：LOG336で滑らかな動きを評価したことは、P017の撤回には当たりません。滑らかさを評価することと、それだけで安心を保証しないことは両立します。
- **P035**：`/message` の実在・動作は、今回の本文照合では**未確認**です。

最後の3点です。

1. **デザインに進んでよいか：直してから。1回目より改善しています。** 引用の捏造、仮説の実績化、効果の保証という重大な問題は、今回の下書きでは確認しませんでした。構成を大きく作り直す必要はありません。

2. **デザイン前に必ず直す文番号：P021・P028・P030・P031。** 引用の条件、評価対象、発言の時点を確定してください。P003・P026も、上記の小さな差し替えを勧めます。

3. **最初の画面の評価：条件つきで言えている。** 技術が解決済みとも、導入停滞の原因が一つとも書かなくなり、本文から支えられる入口になっています。ただし、現在のP002だけでは「隔たりを考える人」までしか伝わりません。実機で確かめ、他の人も試せる形を増やしたいという意図まで冒頭で伝えるなら、上の修正案が使えます。
```

### codex の検証結果 3回目（codex_検証結果_3回目.md）

```markdown
結論は **直してから** です。主な問題は、引用の捏造ではなく、**計画を実績に変えたこと、AI側の説明を本人の認識や経験に移したこと、一度の判断を現在の習慣に広げたこと**です。

[出典本文](</Users/shimazueiichi/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/記事/考えのページ/出典_考察記事66本.md>)と照合しました。確認済みの旧文は再判定していません。

**[❌ NG] N15 — 計画を実施済みにし、異なる数字を同じ単位にした**

問題：100万は学習データの操作エピソード数で、100万回の試行ではありません。また、本文には10エピソードを実施した記録がなく、始めましたとは書けません。

根拠：LOG140は、約100万件のリアル双腕ロボット操作エピソードで学習したモデルを説明しています。個人側は、10エピソードから始めるという話として語れるという構想で、末尾も評価部分だけ先に検証するという次のステップです。10回の実施は **未確認** です。

修正案：  
2026年4月のLOG140では、手元のアームを動かした結果をスマホで撮り、AIに成否を判定させる方法を検討しました。手元の機材で、試行と評価の流れを小さく確かめたい。

---

**[❌ NG] N25 — 数字の主体と、習慣が始まった時点を取り違えた**

問題：15ほど・4つという数字自体は本文にありますが、AI側の説明についての振り返りを、本人の確認不足として読ませています。それから別の目で確かめるようになったという変化も、この出来事を起点にはできません。

根拠：LOG286の該当箇所は、本人の指摘に続くAI側の説明です。対象は確認済みの事実15件ではなく、対話中の事実主張15前後です。さらに、それ以前のLOG195（2026年5月13日）に、生成をClaude、事実検証などをGemini、最終判断を本人が担当するフローと試運転が記録されています。LOG318にも別AIで検証した例はありますが、現在まで恒常的に続けていることは **未確認** です。

修正案：  
AIとの対話をまとめた記事を確かめ直すと、誤りが見つかりました。記事に書いたことでも、そのまま鵜呑みにはできません。説明の筋だけでなく、根拠まで確かめる必要があります。

---

**[❌ NG] N09 — 完全一致するのは末尾の再掲で、元発言と区別が必要**

問題：N09と完全一致する文章はあります。ただし、本人の元発言として確認できる箇所とは文字が違い、完全一致箇所は記事の締めに置かれた再掲です。その再掲自体を、無改変の本人発言と扱えるかは **未確認** です。

根拠：LOG212の節・中央が一番怖いでは、本人の発言は実際のところ、で始まり、各文の間に半角空白があります。N09そのままの形があるのは、節・締めです。厳密な引用ルールなら、発言として確認できる元の箇所から取るべきです。

修正案：  
「実際のところ、滑らかにアームやロボットが動く＝人が怖くないではないからね。 中途半端に滑らかに動くなら、カクカクしてた方が人は安心するかもだよね。」

---

**[❌ NG] N22 — 決定と、その後に聞いた説明の順序が逆**

問題：深度のノイズが邪魔になると知ったため、普通のカメラを先に試すと決めた、という因果になっています。本文では、その決定が先です。また、AIから受けた説明を、一般に確定した技術的事実として書いています。

根拠：LOG166では、節・65,600円という壁で、N17の2Dを先に試すという発言が出ます。その後の節・衝撃的な発見で、ノイズについて説明され、N23の反応が続きます。記事末尾の購入延期理由も、現在の作業の優先順位など複数あります。

修正案：  
2026年4月、まずは2Dの限界まで試してから深度カメラに進むと決めました。そのあと、深度のノイズが学習の妨げになるという説明を受け、意外に感じました。

---

**[❌ NG] N08 — 本人の予想を、確認された安全効果に変えた**

問題：人を傷つけることも大きく減らせますは、効果の断定です。本人がそう予想したことと、実際に大幅な低減を確かめたことは分ける必要があります。

根拠：LOG296の本人発言は、大幅に減らせるだろうという予想です。効果量の検証はありません。同じ節には、人の認識に失敗したときは予告や減速が働かないという限界も書かれています。

修正案：  
滑らかな動きが、安心につながるとは限りません。人と同じ場所で動くなら、次に何をするかが伝わる動きが必要です。間や予備動作を試し、人を傷つける危険を減らしたい。

---

**[❌ NG] N11 — AI側の説明を、人一般に起こる心理的事実にした**

問題：七をロボットが取ると主体感を失う、という説明は、本人の発言でも検証結果でもありません。十と七は説明用の例なのに、条件と結果が確定した法則のようになっています。

根拠：LOG292の節・作業を肩代わりするロボットは協働ではないで、この数字と心理的説明を述べているのはAI側です。本人の発言として確認できるのは、主体性を奪っていることが問題ではないか、というN13の問題提起です。

修正案：  
作業を肩代わりするだけでは、人が自分で進めるのを支えることにはならないと考えています。人が自分でできる余地を残すことも、ロボットの役割として考えたい。

---

**[❌ NG] N05 — 条件付きの問題を、ロボット全般の断定に広げた**

問題：1台で止まりがち・2台目にも同じ手間・現場で手を打てませんは、いずれも範囲が広すぎます。特に最後は、本人の対処できない可能性があるという懸念を、不可能の断定に変えています。

根拠：LOG286の1台で止まるという説明はAI側の見立てで、普及率などの裏付けは本文に示されていません。同じ記事の検証後には、再利用可能なビジョンライブラリやモジュラーなセル構造も出てきます。LOG329の本人発言は、問題時に対処できない可能性が多い開発への懸念です。

修正案：  
ロボットを選ぶときは、本体の安さに加えて、現場に合わせる調整と、問題が起きたときの直し方を見る必要があります。今使える技術で作業を切り出し、人が手を入れられる形を重視します。

---

**[❌ NG] N01 — 特定の暗黙知を、熟練者の判断すべてに広げた**

問題：熟練の人の判断は、その人の中にしかありませんは、対象を限定していません。外観検査の説明も、過去の運用についての記事を、現在の検査全般の説明に変えています。

根拠：LOG314が扱うのは、外に出ていない判断です。LOG319には検査基準書、実物の限度見本、班長や品質保証担当者への相談もあり、判断の根拠がすべて個人の内部だけにあるわけではありません。元の記述も、多くの場合、見本で決めていたという過去の説明です。

修正案：  
次に仕事を引き継ぐ人が見つからず、熟練の人がいなくなりそうだという話を聞きました。本人に聞けるうちに、どこを見て、何を根拠に判断しているのかを記録したい。

---

**[⚠️ 要注意] N18・N19 — 発案者と、変更の範囲が曖昧**

問題：本人が60案を発案したように読めます。また、ロボットから考えるのをやめたという見出しは、その場で発想の順番を変えたことを、全面的・恒久的な転換に広げています。

根拠：LOG264では、本人がアイデアを求め、AI側が最初に返した、三十個を出したと説明しています。60案という数と大半を捨てたことは本文にありますが、本人の単独発案ではありません。N20が示すのも、苦痛を分類した方が作るものが明確になるという判断です。

修正案：  
N18：どんなロボットかを考える前に、人の苦痛を整理する

N19：AIとの対話で60案を検討し、大半を採用しませんでした。既存の道具で済む案や、ロボットである必要がない案が多かったからです。何を作るかを決める前に、人が何を大変に感じているかを整理することが大事です。

---

**[⚠️ 要注意] N11末文 — 操縦することと、主体性を支えることが混ざる**

問題：人が操縦する方式を採れば、人が自分でできる余地が残る、という接続は記事からは導けません。操作を担当する人と、ロボットに支援される人も同じとは限りません。

根拠：LOG292は、支援される人の主体性を扱っています。LOG324は、操縦・見守り・自律化と人材育成の段階を扱っています。関連はありますが、同じ問題ではありません。混ぜると、軸1の作業を任せる方針との境界も見えにくくなります。

修正案：  
軸4では、効率化する作業と、人が自分で進めることを支える場面を分けて考えます。

操縦の話も残す場合は、軸2へ移し、次の文にする：  
自律だけでなく、操縦や見守りも含めて、人の関わり方を選ぶ必要があります。

---

**[⚠️ 要注意] N14 — 求めるアームの用途を切り落としている**

問題：文字は一致していますが、この抜粋だけでは、ロボットアーム全般に精巧さを求めないという宣言に見えます。元の話は、指差しなどで人を手伝うアームです。

根拠：LOG292の同じ発言は、続けて指差す、ボタンを押す、手を振るという用途を挙げています。記事も効率を目的とする場所と主体性を支える場所を分けています。

修正案：  
引用の直前に、次の文を置く。  
人が自分で進めるのを手伝うアームについては、こう考えました。

---

**[⚠️ 要注意] N04 — 自動化を急ぐ発言だけが強く残る**

問題：引用は正確ですが、これだけを強調すると、自動化すれば技術を残せるという読み方を招きます。記事は、その直後にこの理解を修正しています。

根拠：LOG319の続きは、判定結果だけをAIに移しても判断の根拠は残らず、自動化の前に言葉にする必要があるという説明です。既存の下書きには記録を先にする文があるので、それを引用の近くに置けば補えます。

修正案：  
既存の記録についての文を、N04の直後に置く。  
まず、熟練の人がどこを見て、なぜそう判断したかを、聞けるうちに記録したい。

---

**[⚠️ 要注意] N10 — 会話の間を、アームの次動作の話にそのまま移している**

問題：引用は正確ですが、元の対象は音声AIとの会話のテンポです。前後を落とすと、物理的な動作の予告についての発言だったように読めます。

根拠：LOG262の同じ発言の続きは、音声AIを使ったものは会話のテンポが遅くて間が悪い、です。記事は認識・推論・音声合成による待ち時間を扱っています。

修正案：  
引用を残すなら、その前に対象を示す。  
音声で応じる卓上ロボットでは、返事までの間の悪さも気になりました。

そこまで話を広げないなら、N10は削除できます。

---

**[⚠️ 要注意] N15・N17・N21〜N23 — 同じ判断を二か所で説明している**

問題：普通のカメラを先に試すという判断が、軸5の説明・引用と、新節の見出し・説明・引用で繰り返されます。また、4月の購入判断を、今も有効な方針として読ませやすくなっています。

根拠：いずれもLOG166の同じ対話です。深度カメラの購入判断は当時の作業段階に結び付いており、2026年10月24日時点でも未購入か、同じ優先順位かは **未確認** です。

修正案：  
N21〜N23を削除し、軸5で一度だけ扱う。残す場合は、時点を明示する。  
2026年4月には、深度カメラを買う前に、2Dでできる限界まで試すと決めました。

---

**[⚠️ 要注意] N24 — 鵜呑みにしない、を、信じない、に強めた**

問題：書いたことを信じずは、確認した説明も含めて信用しないという意味まで広がります。本文にあるのは、書かれていることを無検証で受け入れないという態度です。

根拠：N26の鵜呑みはまずいという発言と、LOG286の検証後に残る主張を整理した結末です。記事は、すべてを否定して終わってはいません。

修正案：  
書いた説明も、根拠まで確かめ直す

---

引用の照合結果も明記します。**N03・N04・N07・N10・N14・N17・N20・N23・N26は、本文と文字が一致し、提供本文の発言者区分と対話の流れから本人発言として確認できます。** このうち文脈上の注意があるものは上で指摘しました。

特にN20は、AI側が案を提示し、本人から返ってきた発言です。N26も、説明していたAI側に対して本人が指摘した発言です。返ってきた言葉・対話相手という表現だけを理由に、AIの応答とは判定しません。

最後の3点です。

1. **足した文のまま載せてよいか：直してから。**

2. **載せる前に必ず直すべき文番号：N01・N05・N08・N09・N11・N15・N22・N25。**  
   修正には削除も含みます。N18・N19は、AIとの共同検討だったことと、発想の順序を変えた話であることを明確にするのを勧めます。

3. **追加した3種類の評価：**
   - **なぜそう考えるか：** 内容を足しています。ただし、AIの説明を事実として言い切る箇所を直す必要があります。N08は引用の言い直し、N11は既存の主体性の話の言い直しも多めです。
   - **引用：** 数を増やすだけでは充実しません。特にN17は深度カメラの新節と重複し、N10は対象の説明を別に必要とします。
   - **考えが変わったこと：** N18〜N20は、捨てた案と変更理由があり、考えの動きを伝えています。N21〜N23は軸5との重複が大きく、削除候補です。N24〜N26は検証姿勢として残せますが、習慣がこの出来事から始まったという説明は外す必要があります。
```
