Campfire(37signals)
DHHスタイルの教科書 — Rails基本機能だけで作ったリアルタイムチャットアプリ
GitHub: basecamp/once-campfire
Campfireは37signalsのONCEブランドでリリースされたインストール型チャットアプリです。Rails基本機能のみでリアルタイムチャットを実装しており、DHHコーディングスタイルの最も完成された実戦例です。
詳細なディレクトリ構造とパターン分析については韓国語版を参照してください。カスタムアクションゼロのCRUDコントローラ、ブーリアンの代わりにレコードで状態管理、has_secure_passwordによるDeviseなしの認証、Concern分離によるモデル肥大化防止、Currentパターン、6つの専用Action Cableチャンネルが含まれます。
ONCE哲学がコードに直接反映されています:SQLiteデフォルト、Solid Queue/Cache/Cable、OAuthなしのメール/パスワード、Kamal単一サーバーデプロイ。
構造ダイアグラム
CRUDマッピングパターン
状態 = レコード (ERD)
誰が、いつ変更したか自然に記録される
Concern分離構造
Action Cableチャンネル構造
キーポイント
GitHubでbasecamp/once-campfireリポジトリを開く
config/routes.rb → リソースネスティングとCRUDマッピングパターンを確認
app/controllers/rooms/ → closeds、opens、directsコントローラを分析
app/models/user.rb → has_secure_password認証を確認(Deviseなし)
app/models/user/*.rb → Concern分離パターンを学習
app/models/ban.rb、boost.rb → 状態をレコードで管理するパターンを確認
app/channels/ → Action Cable 6チャンネル構造を分析
app/javascript/controllers/ → Stimulusコントローラパターンを確認
自分のプロジェクトにパターンを一つずつ適用してみる
メリット
- ✓ DHHスタイルの最も完成された実践例
- ✓ CRUDマッピングパターンを実際のコードで確認可能
- ✓ Concern分離の適切な規模感を把握
- ✓ Action Cable実戦実装6チャンネルを参考
- ✓ ONCE哲学のシンプルなアーキテクチャを体感
- ✓ Stimulusコントローラ~30個の実戦パターン
デメリット
- ✗ シングルテナントのためマルチテナントアプリに直接適用が困難
- ✗ 小規模チャットアプリのため大規模サービスとは異なる
- ✗ Minitest + Fixtures — RSpecユーザーには馴染みがない場合がある
- ✗ ネイティブCSS使用 — Tailwindトレンドとは異なる
- ✗ ONCEライセンスでフォーク/修正制限