diff --git a/.claude/skills/release-sparkle-design/SKILL.md b/.claude/skills/release-sparkle-design/SKILL.md new file mode 100644 index 0000000..184a454 --- /dev/null +++ b/.claude/skills/release-sparkle-design/SKILL.md @@ -0,0 +1,165 @@ +--- +name: release-sparkle-design +license: Apache-2.0 +description: > + sparkle-design(公開 npm パッケージ)の新バージョンをリリースするための手順スキル。 + package.json の version bump、CHANGELOG.md の更新、リリース PR 作成、PR マージ後の + git tag 作成・push、GitHub Release 作成、npm publish までを一連の手順で実行する。 + CHANGELOG 更新漏れと GitHub Release 作成漏れを防ぐためのチェックリストを含む。 + 「sparkle-design をリリース」「sparkle-design の新バージョンを切る」「v1.0.x をリリース」 + 「sparkle-design の CHANGELOG を更新」で発動。 + English: "release sparkle-design", "cut a new sparkle-design version", + "publish sparkle-design", "bump sparkle-design version". +user-invocable: true +--- + +# Skill: release-sparkle-design + +`sparkle-design`(公開 npm パッケージ)の新バージョンをリリースするための手順スキル。 + +**このスキルが解決する問題**: + +- 過去に v1.0.1 / v1.0.2 / v1.0.3 で CHANGELOG.md 更新が漏れた(v1.0.3 では GitHub Release と git tag も未作成) +- リリース手順がドキュメント化されておらず、各リリースで作業者が手探りになっていた +- このスキルはチェックリストとして機能し、リリース漏れをゼロにする + +--- + + + +## AI アシスタントへの指示 + +### 実行方針 + +1. **ユーザーにリリース種別を確認** + + - `patch`(バグ修正 / 依存更新 / 内部リファクタ)/ `minor`(後方互換のある機能追加)/ `major`(破壊的変更) + - タグ・Release 未作成の過去バージョンがある場合は同時に追補するか確認 + +2. **`sparkle-design` リポジトリのルートで作業する** + + - 編集・テスト・git 操作はすべて `sparkle-design` のチェックアウトディレクトリで実行 + - worktree を使う場合は `.claude/worktrees/` 配下で作業 + +3. **以下のチェックリストを順に実行する** + +--- + +## リリース手順チェックリスト + +### 事前確認 + +- [ ] `main` を最新に pull できているか +- [ ] CI が main で全部 green か(`gh run list --branch main --limit 5`) +- [ ] `git tag --list --sort=-v:refname | head` で最新タグを確認 +- [ ] `gh release list --limit 10` で最新 GitHub Release を確認 +- [ ] **タグ / Release / `package.json` の `version` が三つ揃っているか** ← 乖離していたら過去分の追補が必要 +- [ ] `git log <最新タグ>..origin/main --oneline` で、未リリース commit があるか確認 + +### 過去リリース追補(漏れがある場合) + +タグ未作成・Release 未作成のバージョンがある場合は **新バージョンを切る前に** 必ず追補する。 + +- [ ] 該当バージョンのリリースコミット(`🔖 chore: release vX.Y.Z` 等)の SHA を特定: `git log --all --oneline | grep release` +- [ ] そのコミットに対して `git tag vX.Y.Z ` でタグを作成 +- [ ] `git push origin vX.Y.Z` でタグを push +- [ ] `gh release create vX.Y.Z --title "vX.Y.Z" --notes "..."` で Release を作成 + - notes は CHANGELOG.md の該当セクションをコピペするのが確実 + +### 新バージョンの準備(リリース PR 作成) + +- [ ] `chore/release-X.Y.Z` ブランチを `origin/main` から切る(worktree 推奨) +- [ ] `package.json` の `version` を `X.Y.Z` に更新 +- [ ] `CHANGELOG.md` を更新(**ここが過去最も漏れていた箇所**) + - [ ] `## [Unreleased]` 直下に `## [X.Y.Z] - YYYY-MM-DD` セクションを追加 + - [ ] `git log <最新タグ>..HEAD --oneline` で前リリースからの commit を一覧化 + - [ ] PR 番号付きで Added / Changed / Fixed / Security / Dependencies に分類 + - PR タイトルの emoji prefix から大まかに分類できる: ✨ → Added, ♻️ → Changed, 🐛 → Fixed, 🔒 → Security + - `chore(deps)` / `dependabot` は `### Dependencies` セクションにまとめる + - [ ] **CHANGELOG にも未反映の過去バージョンがある場合は同時に追補する** +- [ ] `pnpm install` で lockfile が壊れていないか確認 +- [ ] テスト: `pnpm test` で全部 pass を確認 +- [ ] 型チェック: `pnpm type-check`(or `npx tsc --noEmit`) +- [ ] format: `pnpm format:check`(必要なら `pnpm format`) +- [ ] コミット作成(メッセージ規約: 日本語 + emoji prefix) + - 例: `🔖 chore: release vX.Y.Z` + - 本文に主要変更点を箇条書きで(CHANGELOG からの抜粋でよい) +- [ ] `gh pr create` で PR 作成 + +### リリース PR レビュー・マージ + +- [ ] レビュー受領(CodeRabbit / Codex / 人間レビュアー) +- [ ] 全 CI green を確認(`gh pr checks `) +- [ ] **通常マージ(`--merge`)でマージ**。スカッシュは禁止(コミットが消えるとリリース履歴が辿れない) +- [ ] base branch protection があるため、必要なら admin マージ: `gh pr merge --merge --admin` + +### マージ後: タグ・Release・publish + +- [ ] `git fetch origin main && git checkout main && git pull` で最新化 +- [ ] リリースコミットの SHA を確認: `git log --oneline -3` +- [ ] **タグ作成 + push**: + ```bash + git tag vX.Y.Z + git push origin vX.Y.Z + ``` +- [ ] **GitHub Release 作成**: + CHANGELOG.md のセクションを `--notes` で直接渡すのが確実: + ```bash + gh release create vX.Y.Z --title "vX.Y.Z" --notes "$(awk '/^## \[X\.Y\.Z\]/,/^## \[/' CHANGELOG.md | sed '$d')" + ``` + もしくは手動で `gh release create vX.Y.Z` を実行し、ブラウザで notes を貼る。 +- [ ] **npm publish** — GitHub Actions ワークフローを実行: + ```bash + gh workflow run "Publish to npm" --ref vX.Y.Z + ``` +- [ ] 公開確認: + - の versions に X.Y.Z が出ているか + - `npm view sparkle-design version` で確認 + +### 完了報告 + +- [ ] チームへリリース完了を共有(Slack / esa など) +- [ ] CHANGELOG.md / GitHub Release / npm の 3 つが揃っていることを最終確認 + +--- + +## バージョン番号の決め方(semver) + +- **patch (`x.y.Z`)**: バグ修正、ドキュメント修正、依存更新、内部リファクタ(public API 不変) +- **minor (`x.Y.0`)**: 後方互換のある新機能追加、新コンポーネント追加、新 props 追加 +- **major (`X.0.0`)**: 後方互換を破る変更(peer dep のメジャー縛り変更、props 削除、コンポーネント削除など) + +迷ったらユーザーに確認する。 + +--- + +## トラブルシューティング + +### リリースコミットだけ作って tag/release を忘れていた場合 + +そのコミットの SHA を `git log --oneline | grep release` で特定して、後付けで tag + release を作成可能。 +このスキルの「過去リリース追補」セクションを参照。 + +### CHANGELOG が古い場合 + +`git log <最古の未反映タグ>..HEAD --oneline` で範囲を取って、各バージョンの section を遡って書き戻す。 +GitHub Release の本文がある場合はそれを CHANGELOG にコピーすれば早い。 + +### npm publish ワークフローが失敗する場合 + +- `pnpm-lock.yaml` の整合性が崩れていないか確認(`pnpm install --frozen-lockfile` を試す) +- `pnpm.overrides` を package.json に書いていると pnpm 10+ では読まれない場合がある。`pnpm-workspace.yaml` 側の `overrides:` フィールドへの移行を検討 +- `NPM_TOKEN` の有効期限切れも疑う(リポジトリ Secrets を確認) + +### マージ後のローカル checkout が worktree と衝突する + +`gh pr merge --delete-branch` がローカル branch を消そうとして worktree 衝突を起こすことがある。 +worktree を `git worktree remove` で先に消すか、PR マージ自体は GitHub UI から行う。 + +--- + +## 参考リンク + +- [Keep a Changelog](https://keepachangelog.com/ja/1.1.0/) — CHANGELOG.md の書式 +- [Semantic Versioning](https://semver.org/lang/ja/) — semver +- `sparkle-design` の `CLAUDE.md` / `docs/ai-instructions/` の規約も参照 diff --git a/.gitignore b/.gitignore index 5448628..7d2fe27 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,5 @@ node-compile-cache/ !.claude/skills/accessibility-checker/ !.claude/skills/add-sparkle-component/ !.claude/skills/change-sparkle-config/ +!.claude/skills/release-sparkle-design/ !.claude/skills/setup-sparkle-design/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d5a2d2..bce475f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,62 @@ ## [Unreleased] +## [1.0.4] - 2026-05-19 + +### Added + +- **Button: `React.forwardRef` 対応** (#275, closes #270) + - Radix `Trigger asChild`(Popover 等)から Button に直接 `ref` を渡せるように + - `asChild` で `` 等の非 button 要素を slot するケースに対応するため、ref 型は `HTMLElement` で広く受ける + - ref forwarding テスト(通常 button / asChild + a)を新規追加 + +### Changed + +- 共有スキルの frontmatter に `user-invocable: true` を追加 (#271) +- Input フォロー修正: `useMergeRefs` の型整理と a11y lint エラー解消 (#272) + +### Dependencies + +- `next` 15.5.15 → 15.5.18 (#267) +- `brace-expansion` 5.0.5 → 5.0.6 (#269) +- `postcss` 8.4.31 → 8.5.14 (#273) + +## [1.0.3] - 2026-05-19 + +### Added + +- **Input まわりの再利用フックを named export** (#263) + - `useInputContainerFocus` / `useMergeRefs` を public API として公開 +- **`Input.triggerProps` による ARIA / HTML 属性フォワード** (#268) + - 内部のトリガーボタンに ARIA / HTML 属性を渡せるように + +### Notes + +- 後方互換は維持 + +## [1.0.2] - 2026-04-17 + +### Changed + +- README から `@goodpatch/sparkle-design-internal` の言及を削除 (#252) +- v1.0.1 直後のドキュメント修正を npm に反映するためのパッチリリース + +## [1.0.1] - 2026-04-16 + +### Security + +- `pnpm.overrides` に追加: `hono ^4.12.14` / `yaml ^2.8.3` / `@eslint/plugin-kit ^0.3.4` / `brace-expansion ^1.1.13`(`<1.1.13` の range) +- `pnpm audit` 残件クリア(prod / dev とも 0) + +### Changed + +- `@figma/code-connect` を `dependencies` → `devDependencies` に移動 + - consumer の `node_modules` から `lodash` を含む Figma Code Connect のツリーが消える +- `dist` から `*.figma.{js,d.ts}` を除外しパッケージサイズを縮小 +- TailwindCSS v4 + npm package 利用時の `@source` 自動検知に関する README 注記を CLI v2.0.6 ベースに更新 +- `globals.css` 前提表記を「Tailwind エントリ CSS(`globals.css` / `index.css`)」に整理 +- Material Symbols の woff2 を URL 軸縮小で 60〜75% 削減(CLI v2.0.1 の変更を反映) + ## [1.0.0] - 2026-04-13 ### Changed diff --git a/package.json b/package.json index 0b65df6..fbf3695 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sparkle-design", - "version": "1.0.3", + "version": "1.0.4", "publishConfig": { "registry": "https://registry.npmjs.org", "access": "public"