Communitygithub.com

pick-library

フロントエンドタスクに最適なライブラリを、厳選されたステータス確認済みリストから選びます。自作や放棄されたパッケージのインストールを回避します。「〜には何を使えばいい?」「〜のライブラリはある?」といった質問や、トースト、コマンドメニュー、ドロワー、日付ピッカー、テーブル、仮想リスト、ドラッグ&ドロップ、チャート、OTP入力、アニメーション数字、テーマ切り替え、フォームバリデーションなどを構築しようとしているときに使用します。

pick-library とは?

このスキルは、フロントエンド開発において、特定のUIタスクに対して適切なライブラリを選択するためのAIエージェント向けガイドです。開発者が「〜には何を使えばいい?」と質問したり、独自実装や非推奨パッケージのインストールを避けたい場合に使用します。スキルは段階的な意思決定プロセスを提供します:まず`package.json`を読み、既存の依存関係を確認。次に、プラットフォーム(ブラウザAPI)が問題を完全に解決できるかどうかを表でチェック。解決できない場合は、厳選されたカタログ(`references/catalogue.md`)を参照し、**Default**とマークされたエントリを推奨します。各推奨候補は`npm view`コマンドで最終更新日、ライセンス、メンテナンス状態を検証し、非推奨パッケージは絶対に推奨しません。このスキルはClaude Code、Cursor、Codexなどのプラットフォームで利用可能で、ライブラリの重複インストールや放棄されたコードの混入を防ぎ、メンテナンス性とバンドルサイズの健全性を保ちます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nkurunziza-saddy/hmm-interfaces/tree/HEAD/pick-library

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ライブラリを選ぶ

いかなる判断の前に、product-ui §1(テイストジャーナルと優先順位)と§5(どのスキルが何を担当するか)を適用すること。ライブラリ名を指定するジャーナルルールが最優先です。

タスクなしで呼び出された場合は、1行でタスクを尋ねて停止します。

判断順序

上から下に進みます。タスクを完全に解決した最初のステップで停止します。

  1. 既にインストールされているものは? package.json を読む。リストアップされたライブラリやその競合がすでに仕事を果たしている場合は、それを使用する。より良い選択肢がある場合は1行でフラグを立て、決して無断で依存関係を入れ替えない。理由: 同じ仕事に2つ目のライブラリを入れると、バンドルとコンベンションが2倍になる。
  2. プラットフォームが完全に解決できるか? 下の表を確認する。理由: プラットフォームはバンドルコストがなく、アップグレードパスも放棄リスクもない。
  3. リストにエントリがあるか? references/catalogue.md を開き、カテゴリを見つけ、Default とマークされたエントリを取得する。メニューではなく、1つのライブラリを推奨する。
  4. そのエントリはメンテナンスされているか? ステータス列を確認する。Unmaintained と書かれている場合は決して推奨せず、エントリに記載されている代替品を使用する。
  5. 何も当てはまらない? 「このタスクはリストにありません」と伝え、自身の知識から選び、以下の検証をそれに対して実行する。理由: チェックされていないパッケージは、通常、放棄されたコードが混入する経路である。

「完全に解決する」とは、キーボード、フォーカス、スクリーンリーダーの動作を含む、タスクのすべての要件が満たされていることを意味します。1つの要件が満たされない場合は、ステップ3に進みます。

プラットフォーム優先

タスクプラットフォームの回答ライブラリに移行するタイミング
モーダルshowModal() 付き <dialog>対応ブラウザ全体でアニメーション出口付きのスタックダイアログ、または非モーダルフォーカス管理が必要な場合
ポップオーバー、ドロップダウンパネル、ツールチップ風カードpopover 属性、加えてサポート環境でのCSSアンカー配置どこでも衝突反転、またはロービングフォーカスメニューが必要な場合
アコーディオン、ディスクロージャー<details name>制御された状態、または interpolate-size を超えるアニメーション高さが必要な場合
トグルなしのダークモードprefers-color-scheme, color-scheme, light-dark()ユーザーが手動でテーマを選択し、それが永続化する必要がある場合
日付、時刻、月の入力<input type="date"> とその仲間範囲、カスタムカレンダー、または一貫した外観が必要な場合
数値フォーマット、相対時間、複数形、リストIntl.NumberFormat, RelativeTimeFormat, PluralRules, ListFormat絶対にない。常に Intl を使用する
ワンタイムコード、単一フィールド<input autocomplete="one-time-code" inputmode="numeric">1桁ごとに1つのボックスが必要な場合
入退場とレイアウトモーションCSSトランジション、@starting-style、WAAPI、View Transitionsスプリング、ジェスチャー、または中断可能なレイアウトアニメーションが必要な場合
フォームバリデーション制約検証 (required, pattern, setCustomValidity)クロスフィールドまたは非同期ルール、または型付きスキーマが必要な場合
少数オプションのセレクト<select>検索、マルチセレクト、またはリッチ行が必要な場合
スティッキーヘッダー、スクロールスナップ、遅延リストCSS position: sticky, scroll-snap, content-visibility: autoリストが1,000行以上を保持する場合

ペア

壊れた状態修正された状態理由
手書きフォーカストラップ付きの <div> モーダル<dialog> と showModal()フォーカストラップ、Esc、不活性背景が無料で付属
npm i react-beautiful-dnd@dnd-kit/react前者は非推奨でメンテナンスされていない
ドロワーに npm i vaulBase UI Drawer、またはシートとしてスタイルされた <dialog>vaul自身のREADMEがメンテナンスされていないと述べている
モーダルライブラリから構築されたトーストBase UI Toastスタッキング、ホバー時の一時停止、スワイプがすでに解決されている
数字をカウントアップする setIntervalNumberFlow桁が正しいレイアウトと動きの縮減で回転する
5,000行の <tr> を一度にレンダリングTanStack Table 下の TanStack Virtual、またはリスト用 Virtuosoレンダリングコストは行数ではなくビューポートに比例する
new Intl.NumberFormat を通過パッケージに置き換えIntl.NumberFormatロケールルールはブラウザに組み込まれている

推奨前に検証する

リストに載っているか否かに関わらず、すべてのパッケージに対してこれを実行します。カタログのステータスはセッションより古い可能性があります。

npm view <pkg> time.modified license version
  • Maintained: 最終公開から12ヶ月以内、またはリリース公開済みで6ヶ月以内にリポジトリへのプッシュがある。
  • Slow: 機能完成済み、12〜24ヶ月間公開なし、リポジトリはまだイシューに対応している。使用可能。Slowと伝える。
  • Unmaintained: アーカイブ済み、それを示すREADME、または24ヶ月以上公開がなく、未解決の破損がある。決して推奨しない。
  • ライセンスを読む。MIT、ISC、BSD、Apache-2.0以外のもの(MPL-2.0とAGPLは注釈が必要)は報告する。
  • プロジェクトのReactバージョンに対するピア依存関係を確認する。

回答フォーマット

1つのブロックで、メニューはなし:

Base UI Toast トースト用。スタッキング、ホバー時の一時停止、スワイプアウェイ。アクションが必要なものには非対応。MITライセンス、メンテナンス済み。npm i @base-ui/react。

常に以下を提供する: 何のためのものか、使用すべきでない場合、ライセンス、確認した日付のステータス。

終了前に

  • package.json を読み、選択がインストール済みライブラリと重複していないこと。
  • プラットフォームの回答を確認し、スキップした場合はその理由が1つの節であること。
  • 選択に対して npm view を実行し、回答のステータスがカタログのものではなく今日のものであること。
  • Unmaintained とマークされたものは推奨されていないこと。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

nkurunziza-saddy/break

Stress-tests a piece of UI with worst-case data and every reachable state, then reports what broke with a numbered fix for each. Use it when the user types /break, or asks to "break this", "stress-test", "try the worst case", "what happens with long names", "check the empty and error states" or "find the edge cases" on a component or screen.

nkurunziza-saddy/layout

Structure and space in product UI on the web. It sets the spacing scale, grouping, alignment, density (compact or comfortable), hit areas, app shells (sidebar, toolbar, content, inspector), max widths, container-query responsiveness, dropdown and popover sizing, room for long and translated text, layout stability (no shift on load) and sticky elements that must not cover focus.

nkurunziza-saddy/motion

Builds motion for product UI on the web. It decides whether something should move at all, then why, which tool (CSS transition, WAAPI, Motion, spring), which properties, curve, duration, interruption, exit and reduced-motion path, and it writes the code. Also covers stagger and choreography, gestures (drag, flick, sheets), motion tokens and animation performance.

nkurunziza-saddy/surfaces

What product UI is made of on the web. It sets elevation levels with exact shadow recipes for light and dark mode, when to use a shadow and when a border, the transparent border for forced-colours mode, a small radius scale with concentric nesting, image outlines, every interactive state as a surface change (hover, pressed, selected, disabled, focus-visible), icons (one set, currentColor, outline and fill, stroke tha…

関連スキル