rails-expert について
rails-expert は、Ruby on Rails 7+ アプリを開発・保守する開発者向けのスキルです。Hotwire、現代的な Rails パターン、API 開発、移行、パフォーマンス最適化を扱います。
主な機能
- 01Rails 7+ と Hotwire のガイダンス
- 02Turbo と Stimulus のパターン
- 03Service、Query、Form Object
- 04JSON:API または GraphQL による API 開発
- 05パフォーマンスとクエリの最適化
- 06テストとコード構成
活用シーン
- 01サーバー描画 UI を使う Rails アプリの構築
- 02Turbo Streams によるリアルタイム更新の追加
- 03レガシーアプリの現代的な Rails パターンへの移行
- 04N+1 クエリやキャッシュ問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill rails-expertインストール後、Claude Code で/rails-expertを入力して読み込まれたか確認します。
同梱ファイルEXAMPLES.mdREFERENCE.md
詳細
Rails エキスパート
目的
Rails 7 以降のモダンな機能、Hotwire スタック(Turbo、Stimulus)、最新の Rails パターンを専門とする、Ruby on Rails 開発のエキスパートです。サーバーでレンダリングした HTML、リアルタイム更新、重厚な JavaScript フレームワークを使わない構造化されたクライアントサイドの動作を備えた、フルスタック Web アプリケーションの構築を得意とします。
使用する場面
- Hotwire(Turbo、Stimulus)を使用したモダンな Rails 7 以降のアプリケーションの構築
- Turbo Streams と Action Cable を使用したリアルタイム機能の実装
- レガシーな Rails アプリをモダンな Rails のパターンや規約に移行
- JSON:API または GraphQL を使用した API ファーストの Rails アプリケーションの構築
- Rails アプリケーションのパフォーマンス最適化(データベースクエリ、N+1、キャッシュ)
- 複雑な Rails パターン(Service Objects、Form Objects、Query Objects)の実装
- Rails とモダンなフロントエンドツール(Import Maps、esbuild、Vite)の統合
クイックスタート
次の場合にこのスキルを呼び出してください:
- Hotwire/Turbo/Stimulus を使用した Rails 7 以降のアプリの構築
- リアルタイム機能(Turbo Streams、Action Cable)の実装
- レガシーな Rails のモダンなパターンへの移行
- API ファーストの Rails(JSON:API、GraphQL)の構築
- パフォーマンスの最適化(N+1、キャッシュ、先読み)
- Rails パターン(Service Objects、Form Objects、Query Objects)の使用
次の場合は呼び出さないでください:
- フロントエンド開発のみが必要 → frontend-developer または react-specialist を使用
- データベース固有の最適化 → database-optimizer または postgres-pro を使用
- Rails を使わない純粋な API 設計 → api-designer を使用
- DevOps/デプロイのみ → devops-engineer を使用
主な機能
Rails 7 以降のモダンな機能
- Hotwire:JavaScript フレームワークを使わずに、Turbo、Stimulus、動的な HTML 更新を利用できます
- Import Maps:ビルドツールを使わずに JavaScript の依存関係を管理できます
- Rails 7 Action Text:モダンな UI を備えたリッチテキスト編集機能
- 暗号化された認証情報:機密データのセキュリティを強化します
- 非同期クエリ読み込み:データベースクエリのパフォーマンスを向上させます
- マルチ DB サポート:プライマリ/レプリカのデータベース構成
- 並列テスト:プロセス間でテストを実行し、実行時間を短縮します
- 非同期 Action Mailer:ブロッキングを伴わないメール配信
Hotwire スタック
- Turbo Drive:ページキャッシュを自動で行い、ページ遷移を高速化します
- Turbo Frames:ページ全体を再読み込みせずに、一部を更新します
- Turbo Streams:WebSocket または SSE を介してリアルタイムに更新します
- Stimulus コントローラー:構造化されたクライアントサイドの JavaScript の動作
- Turbo Morph:DOM の差分を賢く検出し、再レンダリングを最小限に抑えます
モダンな Rails パターン
- Service Objects:ビジネスロジックをコントローラーから切り離します
- Query Objects:複雑なデータベースクエリを再利用可能なオブジェクトとして扱います
- Form Objects:複雑なフォームのロジックとバリデーションを処理します
- Decorators:表示ロジックを分離します
- View Components:再利用可能な UI コンポーネントのアーキテクチャ
- API Resources:一貫性のある API レスポンス形式
選択の指針
Rails 機能の選択
Rails Development Decision
├─ Need real-time updates
│ ├─ User-specific updates → Turbo Streams + Action Cable
│ ├─ Broadcast to multiple users → Action Cable channels
│ └─ Simple form responses → Turbo Streams over HTTP
│
├─ Frontend architecture
│ ├─ Minimal JS, server-rendered → Hotwire (Turbo + Stimulus)
│ ├─ Complex client-side logic → Rails API + React/Vue
│ └─ Hybrid approach → Turbo Frames for islands of interactivity
│
├─ Database strategy
│ ├─ Read-heavy workload → Multi-DB with read replicas
│ ├─ Complex queries → Query Objects + proper indexing
│ └─ Caching needed → Russian doll caching + fragment caching
│
└─ Code organization
├─ Fat models → Extract Service Objects
├─ Complex validations → Form Objects
└─ Business logic in controllers → Move to services
パフォーマンス最適化の一覧
| 問題 | 解決策 | 実装 |
|---|---|---|
| N+1 クエリ | 先読み | includes(:association) / preload |
| カウントの遅さ | カウンターキャッシュ | アソシエーションに counter_cache: true を設定 |
| クエリの繰り返し | フラグメントキャッシュ | cache @object do ブロック |
| 大規模なデータセット | ページネーション | Kaminari / Pagy gem |
| API レスポンスの遅さ | JSON キャッシュ | stale? / fresh_when |
ベストプラクティス
Rails 7 以降の機能
- まずは Hotwire:JS フレームワークに頼る前に、Turbo/Stimulus を使用します
- Import Maps:複雑なバンドラーを使わずに JS の依存関係を管理します
- 非同期クエリ読み込み:並列クエリ実行を活用します
- マルチ DB:読み取り負荷の高いワークロードにはリードレプリカを使用します
コードの整理
- Service Objects:ビジネスロジックをコントローラーから切り離します
- Query Objects:複雑なデータベースクエリをカプセル化します
- Form Objects:複雑なフォームのバリデーションロジックを処理します
- View Components:再利用可能でテスト可能な UI コンポーネントを作成します
パフォーマンス
- 先読み:関連付けには常に includes/preload を使用します
- カウンターキャッシュ:関連付けの件数を事前に計算します
- キャッシュ戦略:多層キャッシュを実装します
- データベースインデックス:クエリパターンに基づいてインデックスを追加します
テスト
- システムテスト:重要なユーザージャーニーに使用します
- コンポーネントテスト:View Components を分離してテストします
- リクエストテスト:API エンドポイントを包括的にテストします
- モデルテスト:ビジネスロジックを単体レベルでテストします
アンチパターン
アーキテクチャのアンチパターン
- 肥大化したコントローラー:コントローラーにビジネスロジックを記述します。Service Objects と PORO を使用します
- 巨大なモデル:モデルが責務を抱えすぎています。関心事を切り出します
- コールバックのスパゲッティ化:複雑なコールバックチェーンです。サービスオブジェクトを使用します
- スキニーコントローラー、ファットモデル:すべてのロジックをモデルに集約します。適切に分散させます
データベースのアンチパターン
- N+1 クエリ:先読みを使用していません。includes/joins/preload を使用します
- インデックスの不足:適切なインデックスがないためクエリが遅くなります。分析して追加します
- カウンターキャッシュの見落とし:件数クエリが繰り返されます。カウンターキャッシュを使用します
- Down のないマイグレーション:元に戻せないマイグレーションです。可逆性を確保します
パフォーマンスのアンチパターン
- 過剰な先読み:先読みしすぎるとメモリの問題が発生します
- キャッシュの不足:キャッシュ戦略がありません。適切なレベルのキャッシュを実装します
- レンダリングの肥大化:ビューのレンダリングが重くなります。フラグメントとキャッシュを使用します
- ジョブキューの滞留:バックグラウンドジョブを処理していません。Active Job を使用します
追加リソース
- 詳細な技術リファレンス:REFERENCE.mdを参照してください
- コード例とパターン:EXAMPLES.mdを参照してください
コメント
Markdown 対応