Writebook(37signals)
ONCEブランドの出版ツール — delegated_typeと編集履歴管理の教科書
GitHub: projectcues/writebook(ONCE公式コード)
Writebookは37signalsのONCEブランドでリリースされたWeb基盤の出版ツールです。本を書いたり、チャプターを管理したり、オンラインで出版できます。
詳細なディレクトリ構造とパターン分析については韓国語版を参照してください。多態コンテンツ管理のためのdelegated_type(Page/Section/Picture)、編集履歴追跡のためのEditレコード、権限管理のためのAccessレコード(reader/editor)、DB基盤のSessionモデル、Campfireと同じAuthentication concernパターン、Publication・Bookmark・MoveリソースのCRUDマッピングパターンが含まれます。
構造ダイアグラム
delegated_type構造 (ERD)
Leafが共通インターフェース役割 (title, position, status)
状態 = レコード (Edit / Access / Session)
previous / nextで履歴探索
Deviseなしでセッション管理
認証フロー (Campfireと同一パターン)
Campfire vs Writebook
キーポイント
GitHubでprojectcues/writebookリポジトリを開く
config/routes.rb → リソース構造とネスティングパターンを確認
app/models/leaf.rb → delegated_typeパターンを理解
app/models/leafable.rb → 多態インターフェースモジュールを分析
app/models/edit.rb → 編集履歴管理パターンを確認
app/models/access.rb → アクセス権限レコードパターンを確認
app/models/session.rb → DB基盤セッション管理を確認
app/controllers/concerns/authentication.rb → Campfireと同一パターンを比較
app/controllers/books/publications_controller.rb → CRUDマッピングを確認
メリット
- ✓ delegated_typeパターンの実戦使用事例を学習
- ✓ 編集履歴管理をレコードで実装するパターンを確認
- ✓ Campfireと比較して37signalsの一貫したパターンを把握
- ✓ アクセス制御をレコードで実装するパターン(Punditなし)
- ✓ DB基盤セッション管理の実戦実装
- ✓ slug基盤URLルーティングの優雅な実装
デメリット
- ✗ Resque+Redis使用 — Solid Queueではない旧バージョンスタック
- ✗ Action Cableなし — リアルタイム機能学習にはCampfireが適切
- ✗ Writebookは比較的シンプルなアプリ(CRUD中心)
- ✗ 非公開ONCEライセンス — フォーク/修正制限