← スキル一覧に戻る

hotwire-patterns
by ag0os
Comprehensive Claude Code plugin for Rails development
⭐ 2🍴 0📅 2026年1月23日
SKILL.md
name: hotwire-patterns description: Stimulus and Turbo patterns for Rails frontend development. Automatically invoked when working with Hotwire, Stimulus controllers, Turbo frames/streams, progressive enhancement, or modern Rails JavaScript. Triggers on "Stimulus", "Turbo", "Hotwire", "turbo_frame", "turbo_stream", "Stimulus controller", "data-controller", "data-action", "progressive enhancement", "SPA-like". allowed-tools: Read, Grep, Glob
Hotwire Patterns for Rails
Patterns for building modern, interactive Rails applications with Stimulus and Turbo.
When This Skill Applies
- Creating Stimulus controllers for interactive behaviors
- Implementing Turbo frames for partial page updates
- Using Turbo streams for real-time updates
- Progressive enhancement patterns
- Form enhancements and validations
- Real-time features with ActionCable
Core Philosophy
HTML over the wire: Hotwire sends HTML from the server, not JSON. JavaScript enhances server-rendered HTML rather than replacing it.
- Progressive enhancement: Works without JavaScript, enhanced with it
- Server-first: Business logic stays on the server
- Minimal JavaScript: Just enough JS to make HTML interactive
Quick Reference
| Component | Purpose | Use When |
|---|---|---|
| Stimulus | JavaScript behaviors | Adding interactivity to HTML |
| Turbo Drive | SPA navigation | Default for all links/forms |
| Turbo Frames | Partial updates | Update part of page |
| Turbo Streams | Multi-target updates | Update multiple elements |
Detailed Documentation
- stimulus.md - Stimulus controller patterns
- turbo.md - Turbo frames and streams patterns
Common Patterns
Stimulus Controller Basics
// app/javascript/controllers/toggle_controller.js
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["content"]
static classes = ["hidden"]
static values = { open: { type: Boolean, default: false } }
toggle() {
this.openValue = !this.openValue
}
openValueChanged() {
this.contentTarget.classList.toggle(this.hiddenClass, !this.openValue)
}
}
<div data-controller="toggle" data-toggle-hidden-class="hidden">
<button data-action="toggle#toggle">Toggle</button>
<div data-toggle-target="content">Content here</div>
</div>
Turbo Frame Basics
<turbo-frame id="messages">
<%= render @messages %>
</turbo-frame>
<%= link_to "Load more", messages_path(page: 2), data: { turbo_frame: "messages" } %>
Turbo Stream Basics
<%# app/views/messages/create.turbo_stream.erb %>
<%= turbo_stream.prepend "messages", @message %>
<%= turbo_stream.update "message_count", Message.count %>
Integration Tips
Rails View Helpers
<%# Stimulus data attributes %>
<%= tag.div data: { controller: "dropdown", dropdown_open_value: false } do %>
...
<% end %>
<%# Turbo frame %>
<%= turbo_frame_tag "user_#{user.id}" do %>
<%= render user %>
<% end %>
Prevent Turbo on Specific Links
<%= link_to "Download", file_path, data: { turbo: false } %>
<%= link_to "External", "https://example.com", data: { turbo_frame: "_top" } %>
スコア
総合スコア
55/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
○言語
プログラミング言語が設定されている
0/5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です