rails-design-system について
rails-design-systemは、Ruby on Railsアプリ向けのUIアーキテクチャ指針をまとめたスキルです。Turbo、Stimulus、ERB、デザイントークン、フォーム、コンポーネント、ヘルパーを扱い、設計判断の統一やビューのリファクタリングに役立ちます。
主な機能
- 01デザインシステムの判断指針
- 02Tailwindデザイントークンのパターン
- 03Turbo FramesとStreamsの実践
- 04ERBパーシャルとコンポーネントのパターン
- 05フォームとビューヘルパーの統一
- 06StimulusとImport Mapsの指針
活用シーン
- 01パーシャル、ヘルパー、コンポーネントの選択
- 02ページのTurbo Framesへの分割
- 03フォームのマークアップとエラー表示の標準化
- 04重複したビューパターンの監査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill rails-design-systemインストール後、Claude Code で/rails-design-systemを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdcomp-explicit-args.mdcomp-slots-for-markup.mdcomp-test-rendered-output.mdcomp-when-to-use.mddecide-avoid-wrapper-components.mddecide-design-system-scope.mddecide-helper-vs-partial.mddecide-partial-vs-component.mddecide-prove-then-extract.mddecide-three-uses-rule.mdform-accessible-labels.mdform-button-consistency.mdform-custom-builder.mdform-error-display.mdform-group-wrapper.mdform-set-default-builder.mdhelper-badge-pattern.mdhelper-conditional-classes.mdhelper-icon-helper.mdhelper-scope-to-domain.mdhelper-tag-helpers.mdorg-deduplication-audit.mdorg-document-design-decisions.mdorg-file-structure.mdorg-import-maps.mdorg-naming-conventions.mdorg-preview-with-lookbook.md詳細
コミュニティ Ruby on Rails デザインシステムのベストプラクティス
Ruby on Rails アプリケーション向けの包括的なデザインシステムガイドです。Community が管理しています。9 つのカテゴリにわたる 51 のルールが含まれており、自動リファクタリングとコード生成を支援するため、影響度の高い順に優先順位が付けられています。Turbo(Drive、Frames、Streams)、Stimulus、ERB パーシャル、デザイントークン、フォームビルダー、ビューヘルパーなど、Rails フロントエンドの全スタックを網羅しています。rails-dev(コントローラー、モデル、クエリ)と tailwind(CSS パターン)を補完し、体系的な UI コンポーネントアーキテクチャのレイヤーを扱います。
適用するタイミング
次のような場合に、これらのガイドラインを参照してください。
- パーシャル、コンポーネント、ヘルパーのどれを切り出すか決めるとき
- Tailwind CSS の
@themeを使ってデザイントークンを定義するとき - 明示的なローカル変数を使った ERB パーシャルを作成またはリファクタリングするとき
- ページを Turbo Frames に分割して、対象を絞った更新を行うとき
- 複数要素の CRUD 更新に Turbo Streams を使うとき
- Turbo によるナビゲーションと Stimulus コントローラーを連携させるとき
- 複雑な UI 向けに ViewComponent または Phlex コンポーネントを構築するとき
- 一貫性のあるフォームを実現するカスタム FormBuilder を実装するとき
- バッジ、アイコン、条件付きクラス用のビューヘルパーを作成するとき
- インタラクティブな動作のために Stimulus コントローラーを追加するとき
- Import Maps で JavaScript の依存関係を管理するとき
- UI の重複や命名の不統一がないか、コードベースを監査するとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | デザイン上の判断 | CRITICAL | decide- |
| 2 | デザイントークン | CRITICAL | token- |
| 3 | Turbo 連携 | HIGH | turbo- |
| 4 | パーシャルのパターン | HIGH | partial- |
| 5 | コンポーネントアーキテクチャ | HIGH | comp- |
| 6 | フォームシステム | MEDIUM-HIGH | form- |
| 7 | ヘルパーのパターン | MEDIUM | helper- |
| 8 | Stimulus の動作 | MEDIUM | stim- |
| 9 | 一貫性と整理 | LOW-MEDIUM | org- |
クイックリファレンス
1. デザイン上の判断(CRITICAL)
decide-three-uses-rule- パターンが 3 か所以上で使われるようになってから切り出すdecide-partial-vs-component- 単純な再利用にはパーシャル、複雑なロジックにはコンポーネントを選ぶdecide-helper-vs-partial- 小さな HTML 断片にはヘルパー、レイアウトブロックにはパーシャルを使うdecide-prove-then-extract- 抽象化する前に、本番環境でパターンの有効性を確認するdecide-avoid-wrapper-components- 価値を加えず、間接性だけを増やす薄いラッパーを避けるdecide-design-system-scope- アプリが実際に必要とする範囲にデザインシステムを限定する
2. デザイントークン(CRITICAL)
token-tailwind-theme- Tailwind CSS の @theme ディレクティブでトークンを定義するtoken-semantic-color-names- 見た目ではなく用途に基づいて色に名前を付けるtoken-spacing-scale- 一貫したレイアウトのため、制約のある間隔スケールを使うtoken-typography-scale- 見出し、本文、UI テキスト向けのタイポグラフィスケールを定義するtoken-component-tokens- 繰り返し使うパターンのために、コンポーネントレベルのトークンを作成するtoken-share-tokens-with-ruby- 必要に応じて CSS と Ruby の間でトークン値を共有する
3. Turbo の統合(高)
turbo-drive-defaults- デフォルトでは Turbo Drive にナビゲーションを処理させますturbo-frame-decompose- ページを Turbo Frames に分割して、対象を絞った更新を行いますturbo-frame-naming- dom_id の規則に従って Turbo Frames に名前を付けますturbo-frame-vs-stream- 変更範囲に応じて Turbo Frames と Turbo Streams を選択しますturbo-stream-crud- 複数のページ要素を更新するには Turbo Streams を使用しますturbo-stimulus-coordination- Turbo と Stimulus が競合しないように連携させます
4. パーシャルのパターン(高)
partial-explicit-locals- パーシャルには常にローカル変数を明示的に渡しますpartial-presenter-objects- プレゼンターオブジェクトを使用してビューのロジックをカプセル化しますpartial-naming-conventions- パーシャルには描画内容を表す名前を付け、先頭にアンダースコアを付けますpartial-yield-blocks- 柔軟なパーシャルレイアウトには yield ブロックを使用しますpartial-collection-with-spacer- スペーサーテンプレートを使ってコレクションを描画しますpartial-shared-directory- 複数のコントローラーで共有するパーシャルは app/views/shared に配置します
5. コンポーネントのアーキテクチャ(高)
comp-when-to-use- パーシャルが単純な描画では対応できなくなったら、コンポーネントを使用しますcomp-explicit-args- すべてのコンポーネントに、型を指定した引数を明示的に定義しますcomp-slots-for-markup- 呼び出し元から渡されるマークアップブロックにはスロットを使用しますcomp-test-rendered-output- 描画された HTML を検証してコンポーネントをテストします
6. フォームシステム(中〜高)
form-custom-builder- フォームの描画を統一するカスタム FormBuilder を作成しますform-set-default-builder- カスタムビルダーをアプリケーションのデフォルトに設定しますform-error-display- 一貫したマークアップで、フィールドのエラーをその場に表示しますform-accessible-labels- アクセシブルなラベルと ARIA 属性を自動的に生成しますform-group-wrapper- ラベル+入力欄+エラーを一貫したグループ要素で囲みますform-button-consistency- フォームビルダーを通じて送信ボタンを統一します
7. ヘルパーのパターン(中)
helper-tag-helpers- 生成する HTML の小さな断片にはタグヘルパーを使用しますhelper-conditional-classes- 条件付き CSS クラスには class_names を使用しますhelper-icon-helper- アイコンの描画を統一するアイコンヘルパーを作成しますhelper-badge-pattern- ステータス表示用のバッジヘルパーを作成しますhelper-scope-to-domain- ヘルパーは汎用ユーティリティではなく、特定のドメインに限定します
8. Stimulus の動作(中)
stim-general-purpose- 使い捨てのスクリプトではなく、汎用コントローラーを作成しますstim-data-attribute-config- JavaScript ではなく、データ属性で動作を設定しますstim-small-controllers- コントローラーを小さく保ち、単一の責務を持たせますstim-composable-controllers- 1 つの要素に複数のコントローラーを組み合わせますstim-use-outlets- コントローラー間の通信にはアウトレットを使用しますstim-leverage-library- カスタムコントローラーを作成する前に stimulus-components を使用します
9. 一貫性と構成(低〜中)
org-naming-conventions- パーシャル、コンポーネント、ヘルパーで一貫した命名規則に従いますorg-file-structure- デザインシステムのファイルを予測しやすい場所に整理しますorg-deduplication-audit- ビューを定期的に確認し、重複するパターンを探しますorg-import-maps- ビルド不要の JavaScript 配信には Import Maps を使用しますorg-preview-with-lookbook- 開発中に Lookbook でコンポーネントをプレビューしますorg-document-design-decisions- ADR にデザインシステムの決定事項を記録します
使用方法
詳しい説明とコード例については、個別のリファレンスファイルを参照してください。
- セクションの定義 - カテゴリー構成と影響度
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応