design: Qiita CLI Preview のスライド画面のデザインを作成 - #413
Conversation
DeguchiHiroki
left a comment
There was a problem hiding this comment.
まずは、既存ページを pagesに作って欲しいな
|
決めてほしいことが4つあります(本文の「相談したいこと」1・2・4・5)。とくに 課題 A / B の扱い(既定の見た目は改善案と同じなので、改善案は A / B に対して実質何もしていないことになります)と、 セルフレビューは7ラウンド( |
|
「まずは、既存ページを pages に作って欲しいな」に続けて、いただいた2つの回答を反映しました。本文は全面的に書き直しています。 回答の反映「共有ライブラリを新設する」 →
「viewport は 1199px / 1920px に変える」 → 1280px を捨てて 1920px / 1199px / 375px にしました。
課題 A は案2 を frame として描きました文章だけで案1 / 案2 を選ばせるのをやめ、 as-is の間違いが6件見つかりましたセルフレビューを16ラウンド回すなかで、実装の写しになっていなかったところが後半で6件出ました。どれも実装のコードと実画面の両方で裏を取って直しています。
最後の1件は、以前「実装より 5% 濃い」と申告していた意図的な差分がこれで解消したものです。 検査の側も直しました同じ間違いが3ラウンド見逃されていたので、「プロパティを1つずつ検査に足す」形をやめました。 ノードに現れる全プロパティ名を集めて、トークン束縛(9種)/ 値の集合(3種)/ 構造(25種)のどれにも入っていなければ落とすようにしてあります(37種すべて分類済み)。 新しい検査を足したら、わざと壊したコピーで落ちることを確かめるようにもしました。これで 確かめられていないこと本文の最後に4件まとめてあります。とくに次の2つは材料が無いので確かめられていません。
|
|
指摘の反映と、ページの追加をしました。 1. ページを
|
| 指摘 | 直したこと |
|---|---|
新着順の位置・UI(q3NIS / z8vSP / EeUF9 / k1vn0J) |
justifyContent: space_between を外してタイトルの直後へ。並び替えは共有ライブラリの Select を ref していましたが、実装は透明背景の素の <select> で枠もシェブロンも出ないので、sort アイコン + テキストに置き換えました |
| 色・フォントサイズ(Count Badge 計10) | fill を $surface-variant → $gray-20 に。実装は Colors.gray20 直指定で、surface-variant は Dark で $gray-80 に振れるためです。フォントサイズ(body3 = 12 / 行送り 1.5 = 18px の帯)は実装と一致していました |
色(YawIQ / h25hj / sPOYD / i1t2JD / jI3e9 / pYVtc / H2nFm / ZgIHD) |
下記のとおり $high-emphasis-text に寄せました |
S4sMCH に border が無い・色が違う |
toggleButtonStyle の border: solid 2px Colors.gray30 を落としていました。stroke を足し、サイズも実測に合わせて 40×40 → 36×36 に(24px アイコン + padding 4×2 + border 2×2) |
色の指摘は原因が1つでした。 --color-text-medium-emphasis / --color-text-disabled は qiita-cli のどこにも定義がなく(src/ 全体で参照は lib/variables.ts の1箇所だけ)、実装では継承色 #212121 に落ちます。スクリーンショットを走査したところ、サイドバーの文字とアイコンが全部 (33,33,33) でした(Readme / ガイドライン / 利用規約 / Articles / 新着順 / 未投稿 / バッジの数字 / footer の book・lightbulb・help・open_in_new / nav の panorama・add)。$high-emphasis-text(#000000DE)は白背景で合成すると 255×(1−0.871)=33 = #212121 ちょうどなので、.pen 側をそこに寄せています。
pages/ は as-is なので実装の見た目に合わせましたが、デザインシステム本来の階調に戻すなら、実装側で CSS 変数を定義するのが先です。その場合は .pen を元に戻します。
あわせて、レールのボタンの高さも実装どおり 40×32 に直しました(closeSidebarLinkStyle は padding 4/8 + 24px アイコン、closeSidebarFooterLinkStyle は padding 8/12 + 16px アイコン。アイコン中心のピッチを実測して 32px と確認)。
3. .pen の JSON が不正だったのも直しました
サイドバーの記事行の Leading Icon(book / lightbulb / help)6ノードに id が無く、CLI が読み込み時に Document is not valid: missing required property を6件出していました(pages と sandbox の両方)。check は JSON の妥当性と imports の参照先しか見ないので、セルフレビュー16ラウンドを素通りしていました。
4. 検算
- 機械的な検査を5ファイルすべてに回して must 0件
Sidebarをライブラリへ移した時点で、既存11フレームを書き出して md5 がベースラインと全件一致- セルフレビューはラウンド18まで(ラウンド17で目視の指摘2件 —— フロントマター不正の赤ボックスの中央寄せ、1199px / 375px でカードが 820px のままはみ出していた —— を見つけて直しています)
まだ決まっていないこと
- 課題 A の案1 / 案2(
sandboxの- slide info open state(案2 パネル圧縮, 1199px)と見比べてください) sandbox/itemsの中身。いただいたツリーにありましたが、file.mdは sandbox をYYYYMMDD-{テーマ}/と定めているので、そこだけ作らずに聞いています- マークダウンの見出しの行送り。サイズ 24px は実測で確定しましたが(本文 16px 確定 → 字面比から割り戻し)、行送り 1.4 はライブラリが 24px の見出しに対して持っている対の値で、
article.cssとは突き合わせられていません
|
「index が実装と違う」の指摘、そのとおりでした。前回のセルフレビューは実装との突き合わせをしていません。 回したのは 工程を入れ直したら must 3件出ました。
あわせて2件直しました。
突き合わせの結果
最後の1行は書き出し側の字面の取り方の差です(デザインは本文 16px でも字面 16px = em ボックスちょうど、実装は 16px で字面 18px)。フォントサイズ 24 の根拠は実装側の比 罫線の色は実測 まだ検算できていないこと
|
|
「コンテンツが足りない」の指摘、そのとおりでした。本文が見出し1つと段落1行しかなく、Markdown プレビューのツールなのに何が見えるのか分からない状態でした。 原因は、
|
| 要素 | 値 |
|---|---|
.it-MdContent |
font-size 17px / line-height 1.7(実測の行ピッチ 29px = 17×1.7 と一致) |
h1 / h2 |
1.65em / 1.53em(=26px)、lh 1.4、margin 64(56)-0-16、padding-bottom 4、border-bottom 1px --color-divider |
h3 |
1.29em(=22px)、lh 1.6、margin 40-0-16(罫線なし) |
p |
margin 16-0 |
ul / ol |
padding-left 1.5em、margin 16-0 |
blockquote |
padding 8-16、margin 24-0、左に 4px の bar(gray30 / radius 4)、文字 mediumEmphasis |
.code-frame |
radius 8、margin-block 24、padding 8-16、bg gray110 / 文字 gray0、pre code は .82em / lh 1.5 |
table |
margin 16-0、th は bold + bg surface、td は padding 4-12、罫線 1px divider |
a |
--color-greenText + underline |
直したこと
- 記事本文と README を、見出し・箇条書き・コードブロック・引用・表・リンク・インラインコードが一通り入った構成にしました
- 見出しの罫線を
$lib:dividerに直しました。--color-divider=rgb(0 0 0 / 12%)で、白に合成すると実測どおりの#e0e0e0になります(前回gray-30=#dfe0e0で近似していたのは誤りでした) - コードを等幅にしました(
Noto Sans Mono)。article.cssは Consolas / Menlo / monospace を指定しています - pen には折り返しの指定が無い(
Layoutに flex-wrap 相当が無く、折り返せるのはtextGrowth: fixed-widthの単一テキストだけ)ため、リンクやインラインコードが混ざる段落は幅を見積もって行に割りました。375px の書き出しを走査して、カードの内容右端 335px を越える行が 0件であることを確認しています
ついでに裏が取れたこと
サイドバーの色の件(前回の #212121)も、これで診断が確定しました。article.css は --color-mediumEmphasis / --color-highEmphasis / --color-disabled を定義していますが、--color-text-medium-emphasis / --color-text-disabled は定義していません(0件)。qiita-cli の src/client/lib/variables.ts は後者を参照しているので解決せず、継承色に落ちています。変数名の食い違いです。
まだ検算できていないこと
/items/[id] の実装スクリーンショットがありません。 .it-MdContent は article.css で裏が取れましたが、記事情報パネルと記事ヘッダの寸法はコードからの再現のままです。いただければ突き合わせます。
|
「作らないで、 やったこと
課題 A(1199×720 でページ番号が 23px 切れる)は「現状のまま」で確定にしました案2(スライド情報を2列×2行に畳んで 165px → 107px)は改善案の中にだけ描いてあったので、ファイルごと消えています。事実としては 削除のついでに見つかった must が1件
16ラウンド見逃していた原因は、検査の記録( あわせて、共有ライブラリの セルフレビューはラウンド21まで。4ファイルすべて機械的な検査で must 0件・未確認0件です。 |
|
実装のスクリーンショット( 縮尺は 0.6494(1920px 幅 → 1246px)でした。サイドバー 234÷360 とカード 532÷820 の2経路で一致したので、これで割り戻して比べています。 直したところ
直したあとの実測は ツールバー 50 / ボタン 33×154 / カード上端 66 / パネル7行( ついでに確定したこと
命名が2系統あるのが原因で、 直せなかったもの
残っている未突き合わせ
セルフレビューはラウンド22。4ファイルすべて機械的な検査で must 0件、11枚を2回書き出して md5 一致、375px のはみ出し0件も再確認しました。PR 本文とスクリーンショットも差し替えてあります。 |
|
Frame の高さが、クリップされているのが気になるな.. |
|
frame の高さを直しました。ご指摘のとおりクリップされていて、21 frame 中 9 frame で下端が切れていました。 原因frame の高さを viewport(1080 / 720 / 812)で固定していたこと自体が規約違反でした。 直したこと1. 高さを
中身が viewport に収まる frame(404・フロントマター不正など)は viewport のままです。 2. スライドの枚数を3枚に揃えました 枚数も frame の高さに合わせて削られていました。 実装はページ数を固定せず 3. プレゼンモードのスライドを幅いっぱい・左上基準にしました セルフレビューで別の must として挙がりました。実装の
検算
PR 本文のスクリーンショット12枚も差し替えました。 1点だけ判断をお願いします
枠は 1920×1080 に直しましたが、中身のフォントと余白は 480×270 基準のままです。実装は Marp の SVG ごと等比スケールするので 1920px では 4.0 倍( 直せない理由が2つあります。
補足frame をページ全体の高さにしたので、viewport の折り返し位置は画面に出なくなりました。 課題 A(1199×720 でページ番号が 23px 切れる)と課題 H(375px でツールバーが 2行 66px になる)は折り返しが見えて初めて伝わるので、実装 issue を切るときは補助線入りの図を別に用意するか、issue に as-is のスクリーンショットを貼ることになります。 |
slides.pen |
PR #413 の指摘に沿って /slides/[id] のプレビューをスライドエディタの見た目に寄せる。 - スライドのドロップシャドウを外し、各ページの ref に 1px の枠(divider)を付ける (?present=1 は全画面なので枠なし) - ページ番号(N / 3)の行を削除する - 各ページに surface-variant 背景のスピーカーノートを足す - ツールバーのボタンを「スライドショーを開始」(gray)と 「スライドを投稿する」(green)の2つにし、375px ではアイコンだけにする 高さは書き出した実寸で振り直した。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
指摘の5件を反映しました( 直したもの
これで 相談
スピーカーノートの本文は代表値です。 課題 A(1199×720 でページ番号が 23px 切れる)は、ページ番号を消したので消滅しました。 実装がページ番号を残す場合は復活します。 まだ
|
da39925 to
ae2bc14
Compare
tomoasleep さんの PR #413 コメントを受けて、プレゼンモード(?present=1)の フッター(罫線+タイトル+ページカウンター)を削除し、Qiita.com の既存機能に 倣った「スライドショーを開始する」モーダルを新設した。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
@tomoasleep さん ご指摘ありがとうございます。次のように解釈して直しました。
コミット: |
`/`(README のプレビュー)と `/items/[id]`(記事詳細)を、実装の現状 (as-is)のまま Pen.dev で起こした。共有ライブラリも新設している。 - design/shared-library.lib.pen — increments/Qiita からコピーした変数 177件に qiita-cli 用の8件を足し、Button / LinkButton / Select / Divider / Sidebar を置く - design/pages/index/index.pen — `/`(5 frame) - design/pages/items/items.pen — `/items/[id]`(6 frame) viewport は 1920px / 1199px / 375px。frame の高さは書き出した実寸で、 本文は article.css の実値に合わせてある。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`/slides/[id]` と `?present=1` を Pen.dev で起こした(10 frame)。 実装の現状(as-is)を写したうえで、プレビューの部分だけ スライドエディタの見た目に寄せる提案にしてある。 - スライドの縁はドロップシャドウではなく 1px の枠(divider) (?present=1 は全画面なので枠なし) - ページ番号(N / 3)は出さない - 各ページの下に surface-variant 背景のスピーカーノートを置く - ツールバーは「スライドショーを開始」(gray)と「スライドを投稿する」(green) の2ボタン。375px ではアイコンだけにする frame の高さは書き出した実寸で、viewport は 1920px / 1199px / 375px。 MarpSlideFrame はこの画面専用なので共有ライブラリに入れていない。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> design: プレゼンモードのフッターを削除しスライドショー開始モーダルを追加する tomoasleep さんの PR #413 コメントを受けて、プレゼンモード(?present=1)の フッター(罫線+タイトル+ページカウンター)を削除し、Qiita.com の既存機能に 倣った「スライドショーを開始する」モーダルを新設した。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> design: スライドショー開始モーダルのチェックボックス/ラジオボタンを共有コンポーネントに差し替える セルフレビューで「入力コントロールを手描きで作っていないか」の観点に引っかかったため、 increments/Qiita の共有ライブラリから Checkbox / RadioButton の実体を移し、 モーダルの4項目すべてを手描き primitives から ref に差し替えた。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
535745e to
273adb6
Compare

Qiita CLI の Preview の UI・体験デザインを Pen.dev で作成しました。3ページと共有ライブラリの4ファイルです。基本は実装の現状(as-is)を写していますが、
/slides/[id]のプレビューだけ 2026-09-14 の指摘で提案(to-be)に変えています(下の/slides/[id]の節)。実装(#409)は 2026-09-04 に main へマージ済みなので、当初は「as-is + 改善案」の2本立てで出していましたが、改善案(
design/sandbox/20260909-slide-preview/)は削除し、design/は製品の現状の正だけを持つ形にしました。読み取れた課題は下の表に残してあるので、直すと決めたものは実装 issue として起票します。Refs: https://github.com/increments/ai-lead-group/issues/411
置き場所
Router.tsxのルート3件とdesign/pages/を1対1にしています。design/shared-library.lib.pencomponents/Layout.tsxincrements/Qiitaからコピーしたvariables177件 + qiita-cli 用に足した8件とthemes、共通コンポーネント(Button/LinkButton/Select/Divider/Sidebar)design/pages/index/index.penpages/items/index.tsx(/)design/pages/items/items.penpages/items/show.tsx(/items/[id])design/pages/slides/slides.penpages/slides/show.tsx(/slides/[id])ページの3ファイルは
imports: {"lib": "../../shared-library.lib.pen"}で、トークンは$lib:参照です。Sidebarの実体はライブラリの1つだけで、3ページはlib:Z36Vk8をrefしています(Layout.tsxが全ルートを包むシェルなので)。MarpSlideFrameは/slides/[id]専用なのでライブラリに入れていません。frame の幅は viewport(1920px / 1199px / 375px)、高さは書き出した実寸です。
canvas.mdが「frame の高さは書き出した実寸を使う」と定めているので、中身が viewport を超える frame はページ全体の高さにしてあります(max(viewport, 中身)。?present=1だけは実装がheight: 100vh固定なので 1080px)。ブラウザでスクロールして初めて見える範囲まで1枚に入っているぶん、viewport の折り返し位置は画面に出ません。viewport は 1920px / 1199px / 375px。
src/client/lib/mixins.tsのbreakpoint(L:1199/XL:1919)から引ける幅に揃えました。1199px は、実装のcontentsContainerStyle(maxWidth: 820+margin: 0 auto)にカードが収まらなくなる唯一の分岐で、カードが 807px に縮みます。画面
/(design/pages/index/index.pen)/のツールバー(HeaderIndex)はcurrentWidth <= 769のときだけ出るので、1920px と 1199px には出していません。/items/[id](design/pages/items/items.pen)本文は
.it-MdContent(Qiita のarticle.css)を実値で写しています。src/server/api/assets.tsは CDN へリダイレクトしているだけなので、公開記事の HTML から実 URL を引いて取得しました。本文 17px/1.7、h2 26px/1.4 + 罫線、h3 22px/1.6、pの margin 16、ulの padding-left 1.5em、code-frameは gray110 / gray0、blockquoteは左 4px の bar、tableのtdは padding 4-12 です。/slides/[id](design/pages/slides/slides.pen)スライドは6つの frame すべて3枚です。 実装はページ数を固定せず
pages.mapで全部描くので、3枚は代表的な枚数です。2026-09-14 の指摘で、ここだけ as-is ではなく提案(to-be)になりました。 スライドの影を 1px の枠に変え、ページ番号(
N / 3)を消し、スピーカーノートを足し、ツールバーのボタンを「スライドショーを開始」「スライドを投稿する」の2つにしています(375px はアイコンのみ)。いまの実装にはどれもありません。?present=1共有ライブラリ(
design/shared-library.lib.pen)2026-09-14 の指摘で実装から変えたところ(
/slides/[id]のプレビュー)ここだけ as-is ではなく提案です。 いまの実装にはありません。
boxShadow: 0 1px 4px rgba(0,0,0,.2)(MarpSlideViewer/index.tsxのpageStyle)--color-divider)。影は18件とも外した。?present=1は全画面なので枠なし{index+1} / {totalPage}を右下に出す(pageNumberStyle)?present=1のフッターのカウンタ(MarpSlidePresenter.tsx:84-86)は別物なので残したspeaker_note: string[]が API から渡っている(view-models/slides.ts:3)が描画していない--color-surfaceVariantの角丸ブロックに見出し「スピーカーノート」+本文プレゼンテーションモードで開くの1つだけ(緑枠。HeaderSlide)スライドショーを開始(gray 枠)+スライドを投稿する(green 枠)。375px はアイコンだけ(slideshow/publish、48×48)スライドとスピーカーノートの間隔は 16px にしました。実装の
pageWrapperStyleは 4px ですが、それはページ番号との間隔です。投稿する(短縮ラベル)は使っていません。 同じコメントの最後の「viewport に合わせてアイコンボタンに変える」を最終案と読んだためです。実装の分岐はcurrentWidth <= 769の1段なので、この読み方だと投稿するが出る幅がありません。ラベルを2段階にするなら 768px の frame を足します。スピーカーノートの本文は代表値です。 実装が描画していないので、改行の扱い・複数ノートの並べ方・空のときの出し方が読めません。
現状の UI から読み取れる課題
改善案は削除したので、ここは「課題として書き残す」だけです。 根拠は実装のコードとスクリーンショットの画素です。
Aスライド情報を開くと1枚目のページ番号が画面に出ない。 1199×720 でスライドは y=287〜714 に収まるが、ページ番号(→ ページ番号そのものを消す提案にしたので消滅。 実装がページ番号を残すなら復活する1 / 3)が y=718〜743 で 23px 切れ、2枚目の頭も見えないMarpSlideViewer/index.tsx:50-55/SlideInfo.tsx:28-30SlideInfo.tsx:137-155SidebarContents.tsx:311-524/SidebarSlides.tsx:56-73SidebarContents.tsx:525-634にhandleNewSlideの呼び出しが無いshow.tsx:123-139Header.tsx:131-146,208-214取り下げた課題が2つあります。C(ページ番号が無い)は実装にありました。B(スライド情報が常時展開)は誤りで、
SlideInfo.tsx:28-30のとおり既定は畳んだ状態です。エラーは2経路あるので state を分けています。
SlideInfo.tsx:137-155のバリデーション警告(yellow60・スライドは表示できる)と、show.tsx:126のフロントマター不正(red10 / red60・setSlide(null)で表示できない)です。実装と意図的に変えたところ
実装から外したのは5つだけです。
.penexpand_less/expand_morekeyboard_arrow_up/keyboard_arrow_downexpand_*の字形が無い(「?」になる)。字形自体は同じ<MaterialSymbol fill={true}>error</MaterialSymbol>(塗り)libraryに塗りのバリアントが無い。色($lib:red-60)とサイズ(16px)は一致nowrap+ellipsistext-decoration: underline+text-underline-offset: .5rem$lib:green-text)だけで下線は無しtextDecorationが無い(Invalid properties: /textDecoration unexpected property)。線を自前で引くとテキスト幅の見積り誤差がそのまま出るfixed-widthは1つのテキストノードの中でしか効かない)。375px で右にはみ出す行が0件であることを書き出しで確認済み寸法をトークンで書けないので即値にしたところ(見た目は実装と一致)。
.penpadding: 4px 16px+border: 2px(外側)padding: [6, 18]+strokeWidth: 2#3c4040と#3D4040が混在$lib:brand-qiita-black(#3c4040)に統一.it-MdContentのフォントサイズborderRadius/border/ em ベースの値article.cssの em ベースの値にも受け口が無い。代わりに機械的な検査で値の集合を見ている375px の「ファイルパスをコピー」は、ラベルとコピーアイコンを左に寄せています。 実装の
mobileHeaderCopyButtonStyleはgrid-template-columns: 1fr 16pxなのでラベルが 1fr で伸びてアイコンが右端に離れますが、そこだけ手で詰めました。相談したいこと
.penは実装の見た目に合わせました。lib/variables.tsが参照する名前をarticle.cssの定義と1つずつ照合したところ、--color-text-medium-emphasis/--color-text-disabled/--color-text-high-emphasis/--color-surface-variantの4つに定義がありません。命名が2系統あるのが原因で、article.css側は--color-mediumEmphasis/--color-highEmphasis(ハイフンなし)で定義されています。前の3つは文字色なので継承色#212121に落ち、--color-surface-variantは背景色なので透明になります(記事のタグの chip に背景が付きません)。結果として.it-MdContentの中(本文・引用)は階調が効き、アプリのシェル(サイドバー・ツールバー)だけが継承色#212121に落ちています(実測でサイドバーの文字とアイコンが全部 (33,33,33))。デザインシステム本来の階調に戻すなら、実装側で CSS 変数名を揃えるのが先ですfontWeight-semibold(600)— 実装のWeight.boldは 600 なのに、コピー元のfontWeight-boldはbold(= 700)brand-qiita-black(#3c4040)— ロゴの濃灰Elevation/slide-card/{offset-x,offset-y,blur,color}(0 / 1 / 4 /#00000033)— 実装の影(0 1px 4px rgba(0,0,0,.2))が上流のElevation/level1〜5のどれとも一致しない(level1 は blur 1 / 色#1E212140)getSpace(5/4)(10)/getSpace(5/2)(20)— 実装がSidebarContents.tsx:720,732でgetSpace(5/2)を使っているのに、上流のgetSpace(n)が 1/4・1/2・3/4・1・3/2・2・3〜10 しか持っていなかったButton/LinkButton/Dividerはライブラリに入れていますが、どこからもrefしていません。 qiita-cli の実装に共通の Button コンポーネントが無く(<button css={...}>の個別実装)、区切り線も Divider 要素ではなく CSS のborderだからです。理由は各カードのcontextに書いてあります。使い先が無いなら外す判断もありますQiitaPreviewLogo/QiitaLogo)。increments/QiitaのライブラリはLogoカードを持っているのでライブラリに移すのが筋ですが、Sidebarの中にネストしているので今回は触っていませんMarpSlideFrameは 480×270 で作り、各ページはそれをrefで 772×434 / 759×427 / 1920×1080 に伸ばしていますが、伸びるのは箱だけで中の文字は 480 基準のままです(タイトルのインク幅が4種類の箱すべてで 302px)。実装は Marp の SVG ごと等比スケールするので本来は比率が一定ですが、等比にするには共有ライブラリにスライド用のトークンが要るため(いまは fontSize が最大 32、余白が最大 80)、このPRでは代表値と割り切っていますheaderButtonStyleがこの色(green60#67cb1b)でborder: 2pxを引いているので as-is に合わせています。ラベルの文字(green805.34:1)は足りていますCopy Button16×16 / メニュー 40×40)とは揃っていません/が描くのは利用者のプロジェクトのREADME.mdで、中身はプロジェクトごとに変わります。見出し・箇条書き・コードブロック・引用・表・リンク・インラインコードが一通り入る構成にして、Markdown プレビューとして何が見えるかが分かるようにしましたButtonにアイコン付きのバリアントが欲しいです(実装にはアイコン付きボタンがあるのに、descendantsでは足せません)確かめられていないこと
MarpSlidePresenter.tsxがwidth: 100%/aspect-ratio: 16/9なので 1920×1080 と読み、フッター(footerStyle42px 固定)の上端が罫線として写ることだけを実測しました。スライドの下端 42px はフッターの外に隠れます$lib:red-10/$lib:red-60の実色は実装と突き合わせられていません。 赤が出る状態の実装スクリーンショットが無いためです。同じパレットの4トークン(yellow-60#e0af00/green-60#67cb1b/green-80#357a00/gray-10#f5f6f6)は実装のスクリーンショットの画素と完全一致することを確認しました/と/items/[id]の2枚、1280×720 は/slides/[id]の分を突き合わせ済みです。1199px の 807px は同じ式(maxWidth: 820+margin: 0 auto)にコンテナ幅を入れ直しただけなので、計算では確定しています$lib:red-10/$lib:red-60の実色だけ突き合わせられていませんqiita-cli-rule.md(pen-cli スキルのリポジトリ別ルール)はまだありません。 viewport とimportsのキーは決まりましたが、規約として書き残すのは別タスクですセルフレビュー
/pr-review designを 24ラウンド回しています。残っていたmust1件(スライドの中身を等比拡大するか)は、2026-09-14 の LGTM をもって「現状のまま(中身は代表値)」で決着としました。等比にするなら共有ライブラリにスライド用のトークンを足す話になるので、そのときは別 PR にします。それ以外は0件です。後半で見つかった主なものは、実装との突き合わせを工程として入れ直したときの3件(見出しの罫線の欠落・README のバナー画像・タグの区切り)と、本文が見出し1つと段落1行しかなかったこと(article.cssを取得して作り直し)、Sidebarをライブラリへ移した後にずれていたコンポーネント→ページのクリアランス(1414 → 1028)です。機械的な検査(
assets/mech_checks.py)は4ファイルすべて must 0件です。検査は「プロパティを1つずつ足す」形をやめ、ノードに現れる全プロパティ名を集めてトークン束縛 / 値の集合 / 構造のどれにも入らなければ落とす形にしてあります。descendantsの中身も同じ検査に流します。🤖 Generated with Claude Code