OSS探訪

Rails modelをdecorator/view-modelでwrapし、presentation logicをmodelやglobal helperから分離するRuby library

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
5,277
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/05/29
ページ内ナビ

概要

DraperはRails applicationへobject-orientedなpresentation layerを追加するdecorator/view-model libraryです。modelをwrapして表示用formattingやsemantic HTML、view固有のrepresentationをdecoratorへ移し、domain modelやglobal helperの肥大化を抑えます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

modelをDecoratorでwrapしてpresentation methodを追加する

Draper::Decoratorを継承し、modelへ直接置きたくない表示用methodをdecoratorに実装できます。delegate_allでwrapped objectのmethodを透過的に利用できます。

出典:[1]

Rails helperへdecoratorからaccessする

decorator内ではh/helpers経由でRails helperを利用でき、linkやmarkup生成等のview concernをpresentation layerへまとめられます。

出典:[1]

collectionやassociationもdecorateする

decorate_collection、CollectionDecorator、decorates_association等を使い、単一modelだけでなく一覧や関連objectにも同じpresentation patternを適用できます。

出典:[1]

向いている用途

Rails view helperとmodelの間に明確なpresentation layerを置きたい場合に向く

formattingやdisplay-specific representationが増え、modelへ置くとdomain責務を汚し、helperへ置くとnamespaceが散らばるapplicationに適します。

出典:[1]

導入前の確認

decorateはrender直前に行いdomain操作へ持ち込まない

READMEはdecoratorをview consumption向けとし、controller actionの早い段階でdecorateしてmodel操作に使うことを避けるよう案内しています。

出典:[1]

README・gemspec・CI matrixの互換性情報を合わせて確認する

READMEは4.0.0以降Rails 5.2/Ruby 2.4+をofficial supportと説明する一方、gemspecのminimumはRuby 2.2.2・Rails dependency 5.0+です。4.0.6 CIはmodern Rails 8.1/8.0/7.2とRuby 3.4〜3.1も検証しています。

出典:[1][2][3]

Ruby 3.2 + Rails 8.1は4.0.6 CIで一時除外されている

4.0.6 releaseとCI設定ではRuby 3.2 + Rails 8.1 combinationがunstableとしてtemporarily excludedです。該当構成ではupgrade前にproject固有testを実施します。

出典:[4][3]

参考にした公式資料

  1. [1]Draper 4.0.6 README(2026-10-04)
  2. [2]Draper 4.0.6 gemspec(2026-10-04)
  3. [3]Draper 4.0.6 CI matrix(2026-10-04)
  4. [4]Draper 4.0.6 release(2026-10-04)
  5. [5]Draper MIT license(2026-10-04)
編集部からの補足

Draperはpresentation concernをdecoratorへ寄せるlibraryです。READMEは「render直前にdecorateする」運用を推奨しており、controller/domain logicまでdecoratorへ持ち込むと責務が再び曖昧になります。4.0.6のCIはRails 8.1/8.0/7.2とRuby 3.4〜3.1を中心に検証していますが、Ruby 3.2 + Rails 8.1は一時的に除外されています。

3ステップで試す

  1. 1

    既存Rails applicationへDraper 4.0.6を追加する

    Rails projectのGemfileへstable 4.0.6をversion固定で追加し、dependencyをresolveします。

    bundle add draper --version 4.0.6
  2. 2

    ApplicationDecoratorを生成する

    共通decorator baseとして使えるApplicationDecoratorを生成します。

    bin/rails generate draper:install
  3. 3

    model用Decoratorを生成する

    ArticleDecoratorを生成し、表示formatting等のpresentation logicをmodelやhelperから移す起点にします。

    bin/rails generate decorator Article
公式READMEで確認

成長

成長の推移 · 直近30日

5,277 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
0
Open PR
8

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • decorators
  • ruby
Stars
5,277
Forks
522
Watchers
65
Open Issues
20
Contributors
162
所有者種別
Organization
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/05/29

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?