chore(spindle-ui,spindle-mcp-server): テンプレート形式の Code Connect に移行 - #2192
chore(spindle-ui,spindle-mcp-server): テンプレート形式の Code Connect に移行#2192herablog wants to merge 6 commits into
Conversation
🦋 Changeset detectedLatest commit: b49188d The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Visit the preview URL for this PR (updated for commit b49188d): https://ameba-spindle--pr2192-claude-code-connect-d6bp3qzi.web.app (expires Wed, 23 Sep 2026 01:18:35 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: e7521619a2dd5c653490c8246e81ec2a5c8f1435 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 36a38f0e46
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Figma が framework-specific parser を 2026-08-17 で廃止し、CLI v2.0.0 は
figma.config.json に parser が設定されていると publish を即エラー終了する。
CI は `npm i -g @figma/code-connect` で latest を入れていたため、このままでは
次の publish が失敗する。
手書きコンポーネント12ファイルを `figma connect migrate` でテンプレート
ファイル(.figma.ts)に移行した。icons.figma.tsx は差分が大きいため別対応とし、
本コミットでは parser 併用のまま v1.5.3 に固定して中間状態を publish 可能にする。
- 12ファイル -> 10テンプレート。SnackBar と NavigationTab は Figma 上で
同一ノードを variant で共有しているため、v2 の仕様上1ファイルに統合される
- NavigationTab は3タブ共通ファイルとして親ディレクトリに配置し、
各タブの実装ファイルから参照コメントで辿れるようにした
- 自動生成されるフォールバック分岐が SnackBar は Error、NavigationTab は
Capsule になるため、SnackBar は Information を else に置き直した
- figma.config.json に label/language を明示。テンプレートファイルの既定
ラベルは "Code" のため、明示しないと Dev Mode 上で別セクション扱いになり
既存の React ドキュメントが残留する
- tsconfig の exclude に .figma.ts / .figma.batch.ts を追加。追加しないと
include: ["src"] に一致して tsc がテンプレートをコンパイルしビルドが壊れる
- biome は formatter を有効のまま linter のみ無効化
- CI から `npm i -g` を廃止し devDependency + `pnpm exec` に統一。
バージョンが lockfile で固定され、CLI の勝手な major 更新を防げる
検証: 移行前後で figma connect parse を比較し、対象 Figma ノードの欠落・
追加ともにゼロ、全390 doc が label=React / language=jsx であることを確認。
biome 整形の前後で figma.code テンプレートリテラルの内容が
バイト一致することも確認済み。
icons.figma.tsx (380件の figma.connect) を .figma.batch.json + 共有テンプレート
に移行し、figma.config.json から parser を削除して parser 非依存の構成にした。
- 380件は「named import のシンボル名だけが異なる」均一な形なので、CLI が
${figma.batch.componentName} に畳み込み、2499行 -> テンプレート9行 + JSON に縮約
- CLI が生成する import 文は `from "..."` (ダブルクォート・セミコロンなし)
になり Dev Mode の表示が変わってしまうため、移行前と同じ
`from '...';` に直した。380件すべてが移行前の import 文字列と一致することを確認
- scripts/figma-connect-icons.ts は .figma.batch.json の components のみを
生成するよう変更。共有テンプレートは手書きの固定ファイルとして扱う。
biome は .json を整形しないため、CLI と同じ2スペース+末尾改行で出力する
- include から src/**/*.tsx を削除。テンプレート以外がマッチしていると
CLI v2 が parser 構成とみなして publish を拒否する
- CI に --exit-on-unreadable-files を追加
CLI は 1.5.3 のまま据え置いた。pnpm-workspace.yaml の minimumReleaseAge
(3日) により 2.0.0 (2026-08-18公開) はまだインストールできず、また parser を
削除した本構成は 1.5.3 でも 2.0.0 でも同じ結果になるため急ぐ必要がない。
2.0.0 への更新は quarantine 経過後に Renovate 側で拾える。
検証: 移行前の parse 結果と比較し、Figma ノードの欠落・追加ともにゼロ、
390 doc すべて label=React / language=jsx。
`figma connect parse --exit-on-unreadable-files` が exit 0 で完走することも確認。
@figma/code-connect を 1.5.3 に上げていたが、1.4.9 のままに戻した。 1.4.9 の時点で既にテンプレートファイル (raw templates) と .figma.batch.json の 両方をサポートしており、移行後の構成でも結果は完全に同一だった: parse の結果は 390 doc / Figma ノードの欠落・追加ゼロ / 全件 label=React・ language=jsx で 1.5.3 と一致。CI で使う --exit-on-unreadable-files も 1.4.9 に存在する (1.5.3 との差分は preview のサブオプションと migrate --delete のみで、publish には影響しない)。 バージョンを据え置くことで pnpm-lock.yaml の変更が不要になり、 lockfile は移行前と完全に同一のまま維持される。今後のバージョン更新は Renovate に任せる。
`.figma.tsx` から `.figma.ts` へのリネームに MCP サーバー側が追従できておらず、
components.test.ts が figma フィールドの欠落で失敗していた。
- components.ts: 関連ファイル探索の拡張子を `.figma.ts` に変更
- copy-assets.js: assets のコピー対象は `*.{tsx,css,mdx,md}` のみで
`.figma.ts` が含まれていなかったため、専用タスクを追加
- 単一の Figma コンポーネントセットの variant として定義されている
CapsuleTab / InlineTab / UnderlineTab は自ディレクトリにテンプレートを
持たないため、親ディレクトリの共有テンプレート
(NavigationTab.figma.ts) にフォールバックする
- 実在しなくなった `.figma.tsx` を除外するガードを削除
検証: components.test.ts が通ることを確認。あわせて3タブが共有テンプレートを
解決し、テンプレートを持たないコンポーネントでは figma が undefined のままに
なることも確認した。
36a38f0 to
f72a104
Compare
|
reg-suit detected visual differences. Check this report, and review them.
How can I change the check status?If reviewers approve this PR, the reg context status will be green automatically. |
親ディレクトリの共有テンプレートへのフォールバックにテストが無く、 壊れても既存スイートが通ってしまう状態だったため追加した。 - Button のアサーションを expect.any(Object) からファイル名の固定に変更。 拡張子が .figma.tsx に戻っても検知できるようにする - CapsuleTab / InlineTab / UnderlineTab が NavigationTab.figma.ts を 参照することを検証。ファイル名だけでなく内容も確認し、空ファイルや 別内容での空振りを防ぐ - 親ディレクトリにも共有テンプレートが無い場合に figma が付かないことを Form/DropDown で検証。implementation の存在も見て、コンポーネント自体が 見つかっていないことによる空振りと区別する 検証: 以下の3通りに実装を一時的に壊し、それぞれ想定どおり失敗することを 確認した。 - ext を .figma.tsx に戻す -> Button が失敗 - フォールバックの分岐を削除 -> 3タブが失敗 - copy-assets.js のテンプレートコピーを削除 -> Button と3タブが失敗
テンプレートファイルへの移行で `.figma.tsx` は1つも残らなくなったため、 `src/**/*.figma.tsx` の exclude は効かない設定になっていた。 `tsc -p tsconfig.cjs.json --listFiles` に figma 関連ファイルが1件も 含まれないことを確認済み。
概要
Figma が framework-specific parser を廃止したため、Code Connect を parser 方式(
.figma.tsx)からテンプレートファイル方式(.figma.ts)に移行しました。これは将来対応ではなく、既に発生している破損の修復を兼ねています。
@figma/code-connect@2.0.0公開 = 2026-08-18publishは config にparserがあると即エラー終了parserMode === 'forbid'ガードnpm i -g @figma/code-connect(= latest = 2.0.0)を使用figma-code-connect.ymlつまり
.figma.tsxを触る次の main への push で、Publish Figma Code Connect ワークフローが失敗する状態でした。v2.0.0 は以下のエラーを出します。変更内容
figma connect migrateで機械移行したうえで、後述の要修正点を手で直しています。コンポーネント(12ファイル → 10テンプレート)
同一の Figma ノードを variant で共有しているものは、v2 の仕様上1ファイルに統合されます(1ノード + 1ラベル = 1 doc で、variant の出し分けはテンプレート内の分岐でしか表現できないため)。
NavigationTab.figma.tsを配置し、各タブの実装ファイル冒頭から参照コメントで辿れるようにしましたelseに置き直しました(NavigationTab 側のフォールバックは CapsuleTab のまま)アイコン(380件 → バッチ形式)
icons.figma.tsx2499行を、共有テンプレート9行 +icons.figma.batch.jsonに縮約しました。CLI が差分を${figma.batch.componentName}に畳み込んでいます。scripts/figma-connect-icons.tsは.figma.batch.jsonのcomponentsのみを生成するよう変更したので、今後アイコンを追加しても差分は JSON の数行だけになります。設定・CI
figma.config.jsonからparserを削除し、label/languageを明示。テンプレートファイルの既定ラベルは"Code"なので、明示しないと Dev Mode 上で別セクション扱いになり既存の React ドキュメントが残留しますtsconfig.jsonのexcludeに.figma.ts/.figma.batch.tsを追加。追加しないとinclude: ["src"]に一致してtscがテンプレートをコンパイルしビルドが壊れますnpm i -gを廃止し、devDependency +pnpm execに統一。floating な global install が勝手に v2 に上がったことが今回の破損の直接原因なので、バージョンを lockfile で固定します--exit-on-unreadable-filesを追加。テンプレート方式ではパース失敗が「ログを出して次のファイルへ」となり、CI が緑のままそのコンポーネントだけ Dev Mode から消えるため。特にバッチファイルは1ファイルで380件を抱えていますspindle-mcp-server
.figma.tsx→.figma.tsのリネームに追従しました。copy-assets.jsのコピー対象が*.{tsx,css,mdx,md}だけでテンプレートが assets に入っていなかったため、専用タスクも追加しています。3タブは自ディレクトリにテンプレートを持たないので、親ディレクトリの共有テンプレートにフォールバックします。補足: CLI のバージョンは 1.4.9 のまま
一度 1.5.3 に上げましたが、1.4.9 の時点で既にテンプレートファイルと
.figma.batch.jsonの両方をサポートしており、移行後の構成では結果が完全に同一だったため据え置きました。CI で使う--exit-on-unreadable-filesも 1.4.9 に存在します。結果として
package.json/pnpm-lock.yamlはこの PR で一切変更していません。2.0.0 への更新は quarantine(minimumReleaseAge: 4320、解禁は 2026-08-21 23:05 JST)経過後に Renovate に任せられます。検証
移行前後で
figma connect parseの結果を突き合わせています。label=React/language=jsxfrom "..."になり Dev Mode の表示が変わってしまうため、from '...';に直しています)figma.codeテンプレートリテラルの内容がバイト一致(整形がスニペットを壊していないことの確認)figma connect parse --exit-on-unreadable-filesが exit 0 で完走tsc -p tsconfig.cjs.json --listFilesに.figma.*が0件未確認の点
figma connect preview/publish --dry-runは未実行です(FIGMA_ACCESS_TOKENが必要なため)。マージ前に SnackBar と NavigationTab の分岐をfigma connect preview --uniqueで目視確認いただけると安心ですfigma connect unpublish --node <url> --label Reactで個別に削除できます🤖 Generated with Claude Code
https://claude.ai/code/session_01JMEHqqeA4E13MMxhFQEceC
Generated by Claude Code