spartan について
spartan/ui で Angular の UI を構築するためのスキルです。アクセシブルでスタイルのない Brain プリミティブと、プロジェクトにコピーするスタイル付き Helm コンポーネントを組み合わせ、検索や生成、構成、テーマ設定を案内します。
主な機能
- 01Brain と Helm の二層構造
- 02CLI によるコンポーネント生成
- 03MCP ツールでのコンポーネント検索
- 04コンポーネント構成とスタイル規則
- 05テーマとコピーしたコンポーネントのカスタマイズ
活用シーン
- 01Angular ワークスペースでの spartan/ui 設定
- 02適切な UI コンポーネントの検索と追加
- 03フォーム、ダイアログ、ダッシュボードの構成
MCP 対応
@spartan-ng/mcp のツール、リソース、プロンプトを使ったコンポーネントとドキュメントの検索方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ spartan-ng/ spartan --skill spartanインストール後、Claude Code で/spartanを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
cli.mdcustomization.mdmcp.mdregistry.mdrules/brain-vs-helm.mdcomposition.mdforms.mdicons.mdstyling.md詳細
spartan/ui
spartan/ui は Angular UI ライブラリです。2 層アーキテクチャを採用しています。
- Brain (
@spartan-ng/brain) - アクセシビリティに配慮した、スタイルを持たないプリミティブ(Angular ディレクティブ/コンポーネント)で、npm からインストールします。動作とアクセシビリティを担うレイヤーです。 - Helm (
@spartan-ng/helm) - スタイルを担うレイヤー(Tailwind + class-variance-authority)です。Helm のコードは CLI によってユーザーのプロジェクトにコピーされるため、ユーザー自身が所有し、カスタマイズできます。
Helm のディレクティブ/コンポーネントをホスト要素に組み合わせます。Helm は内部で対応する Brain プリミティブを接続します。手書きのマークアップより、既存のコンポーネントを常に優先してください。
すべての CLI コマンドは、ワークスペースのランナーを通じて実行します。プロジェクトからランナーを判別してください。
- Nx ワークスペース(
nx.jsonがある場合):npx nx g @spartan-ng/cli:<generator>(またはpnpm nx g ...)。 - Angular CLI ワークスペース(
angular.jsonがあり、nx.jsonがない場合):ng g @spartan-ng/cli:<generator>。
現在のプロジェクトのコンテキスト
コードを生成する前に、プロジェクトのコンテキストを収集してください。
npx nx g @spartan-ng/cli:info --json # Nx
ng g @spartan-ng/cli:info --json # Angular CLI
これは読み取り専用で、次の内容を含む JSON を出力します。
workspaceType-nx|angular-cli(上記のどのランナーを使用するかを決定します)。config.componentsPath- Helm コンポーネントのコピー先(例:libs/ui)。config.importAlias- Helm のインポートプレフィックス。デフォルトは@spartan-ng/helmです。config.generateAs-library|entrypoint(Nx のレイアウトの選択肢)。versions- Angular、Angular CDK、Tailwind、@spartan-ng/brain、@spartan-ng/cliのバージョン。iconLibrary- 存在する場合は@ng-icons。tailwindCssFile- プリセットをインポートするグローバルスタイルシート。installedComponents- すでに存在するコンポーネント(再追加しないでください)。availableComponents- CLI で生成可能なすべてのコンポーネント。
components.json が存在しない場合、プロジェクトはまだセットアップされていません。まず @spartan-ng/cli:init を実行してください(依存関係とテーマがインストールされます)。components.json は、ui を使って最初のコンポーネントを追加したときに作成されます(cli.md を参照)。
原則
- まず既存のコンポーネントを使用してください。
installedComponents、次にavailableComponentsを確認します。ドキュメントは MCP サーバー(spartan_components_list/spartan_components_get)またはライブドキュメント(https://www.spartan.ng/components/<name>)で確認してください。mcp.mdを参照してください。 - 再発明せず、組み合わせてください。 カスタムマークアップではなく、既存の Helm と Brain のパーツからダッシュボード、フォーム、ダイアログを構築してください。
- カスタムスタイルより、組み込みのバリアントを使用してください。 ボタン、バッジ、アラートなどには
variantとsizeの入力が用意されています。クラスを上書きする代わりに使用してください。 - 生の値ではなく、セマンティックカラーを使用してください。
bg-blue-500ではなくbg-primary text-primary-foregroundを使用してください。rules/styling.mdを参照してください。
重要なルール
関連する作業を始める前に、ルールファイルを読んでください。
rules/styling.md-hlm()ユーティリティ、セマンティックカラーのトークン、レイアウト専用クラス、space-*よりもgap-*を使うこと、size-*、ダークモード、オーバーレイに z-index を手動で指定しないこと。rules/forms.md-hlmField(ラベル、コントロール、エラー、説明)を使ってフォームを構成し、ネイティブの<fieldset>/<legend>ではhlmFieldSet/hlmFieldLegendを使います。選択肢のセット(2~7 個)にはhlm-toggle-groupを使います。rules/composition.md- アイテムは必ずグループ内に配置します。ダイアログ/シートにはタイトルが必要です。Card はすべての要素を組み合わせて構成します。タブのトリガーはhlm-tabs-list内に配置します。アバターには必ずフォールバックを用意します。カスタムのマークアップではなく、Alert/Empty/Skeleton/Badge/Separator/Spinnerを使います。rules/icons.md- アイコンは<ng-icon name="lucide...">を使います。provideIconsで登録します。コンポーネント内ではサイズ指定クラスを手動で追加せず、size入力を使います。rules/brain-vs-helm.md- 2 層モデル(ヘッドレスライブラリの Brain と、スタイル付きの Helm 層)、Brain を直接使う場合と Helm を使う場合、ディレクティブによる構成方法。cli.md- Nx と Angular CLI での実行方法を含む、すべてのジェネレーター(init、ui、ui-theme、healthcheck、info、migrate-*)。registry.md- Brain-npm と Helm のコピー配置による配布モデル、components.json、固定のコンポーネントカタログ(同梱 CLI ではリモートまたはカスタムのレジストリを使いません)。customization.md-hlm-tailwind-preset.css、CSS 変数、ui-themeジェネレーター、およびコピーした Helm コンポーネントの拡張によるテーマ設定。mcp.md- 検出に使用する@spartan-ng/mcpのツール、リソース、プロンプト。
主なパターン
<button hlmBtn variant="destructive" size="lg">Delete</button>
<button hlmBtn size="icon" variant="ghost">
<ng-icon name="lucideTrash" />
</button>
<button hlmBtn [disabled]="loading()">
@if (loading()) {
<hlm-spinner />
} Save
</button>
<div class="flex items-center gap-2">
<span hlmBadge variant="secondary">beta</span>
</div>
コンポーネントの選択
| 必要な機能 | コンポーネント |
|---|---|
| アクション/ボタン | button(hlmBtn)、button-group |
| テキスト/数値入力 | input、textarea、input-otp、input-group、native-select |
| 選択式入力 | select、combobox、autocomplete、radio-group、checkbox、switch、slider |
| 2~7 個の選択肢の切り替え | toggle-group |
| フォームのレイアウト/検証 | field、label |
| データ表示 | chart、table、card、badge、avatar、kbd、item |
| ナビゲーション | sidebar、navigation-menu、breadcrumb、tabs、pagination |
| オーバーレイ | dialog、sheet、alert-dialog、popover、hover-card、tooltip |
| メニュー | dropdown-menu、context-menu、menubar、command |
| フィードバック | sonner(トースト)、alert、progress、skeleton、spinner |
| レイアウト/コンテナー | card、separator、resizable、scroll-area、accordion、collapsible、aspect-ratio |
| 空の状態 | empty |
| 日付 | calendar、date-picker |
| アイコン | icon(@ng-icons) |
| タイポグラフィ | typography |
ワークフロー
- コンテキストを取得します。
@spartan-ng/cli:info --jsonを実行します。プロジェクトがセットアップされていない場合は、:initを実行してから、:uiでコンポーネントを追加します(最初の:uiの実行時にcomponents.jsonが作成されます)。 - インストール済みの項目を確認します。
installedComponentsに含まれているものは再追加しないでください。 - コンポーネントを探します。 MCP ツール、または
https://www.spartan.ng/components/<name>で API と例(mcp.md)を確認します。セレクターを推測せず、必ず確認してください。 - 追加します。
npx nx g @spartan-ng/cli:ui --name=<component>(Nx)またはng g @spartan-ng/cli:ui --name=<component>(Angular CLI)を実行します。これにより Brain の依存関係がインストールされ、Helm のコードがコピーされます。対話型の複数選択を使用するには、--nameを省略します。 - 正しく組み合わせます。
*Imports定数(例:HlmDialogImports)またはインポートエイリアスから個々のクラスをインポートし、スタンドアロンコンポーネントのimportsに追加して、組み合わせのルールに従います。 - アイコンを登録します。 使用する
<ng-icon>はすべてprovideIcons(...)に渡す必要があります(rules/icons.mdを参照)。 - 確認します。 大きな変更やアップグレードの後は、
@spartan-ng/cli:healthcheckを実行して非推奨のパターンを検出し、インポートを修正します。 - テーマを設定/カスタマイズします。 コピーした Helm ファイルと CSS 変数を編集します。Brain はフォークしないでください。
クイックリファレンス
# Initialize (creates components.json, wires Tailwind + preset)
npx nx g @spartan-ng/cli:init
ng g @spartan-ng/cli:init
# Project context as JSON
npx nx g @spartan-ng/cli:info --json
# Add components (interactive, or pass --name)
npx nx g @spartan-ng/cli:ui
npx nx g @spartan-ng/cli:ui --name=dialog
# Generate theme variables
npx nx g @spartan-ng/cli:ui-theme
# Scan + auto-fix deprecated APIs/imports after an upgrade
npx nx g @spartan-ng/cli:healthcheck --autoFix