Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ActiveDecorator導入の話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
KUROKI Shinsuke
September 26, 2012
Programming
260k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ActiveDecorator導入の話
札幌Ruby会議に行った勢いで、自分のチームのコードにActiveDecoratorを導入しようとしてみてわかったこと
KUROKI Shinsuke
September 26, 2012
More Decks by KUROKI Shinsuke
See All by KUROKI Shinsuke
冴えてるRailsエンジニアの育て方
skuroki
7
11k
伝わるコードレビューのために
skuroki
5
7.4k
ActiveAdmin Better Practices@関西Ruby会議06
skuroki
0
410
進行中の開発プロジェクトで増えていくテストを自動で回し続けるために行ったいくつかのこと
skuroki
11
45k
Refactoring Ruby Edition in-house reading
skuroki
0
230
Other Decks in Programming
See All in Programming
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
4
670
高専キャリア LT 発表内容
crysta1221
6
5.6k
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
不幸な GC
chencmd
0
890
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
自分的「カンファレンスの楽しみ方」
syumai
0
200
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
130
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
140
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
Become a Pro
speakerdeck
PRO
31
6.2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
A better future with KSS
kneath
240
18k
The SEO identity crisis: Don't let AI make you average
varn
0
550
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.8k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
770
Transcript
札幌Ruby会議に行った勢いで ActiveDecoratorを 導入しようとしてみた
[email protected]
誰? • 黒木慎介といいます • AimingでRailsとJS(Backbone.js/CoffeeScript) でブラウザゲームを作る仕事をしています
提供 We're hiring rubyists!
札幌Ruby会議に 行って来た
None
閑話休題
実践的な2つのセッション • 松田明さんと豪華ゲスト陣による 「Rails3レシピブック外伝」 • 浦嶌啓太さんによる 「Ruby on Rails: The
Bad Parts」
両方の発表に登場した "ActiveDecorator"
何? (このスペースはそれを説明するには狭すぎるので ホワイトボードに書きます)
少し前のこと "これは、やっていることとしては完全にビューヘル パー(最後に文字列をhtml_safeしているし)なの で、引数を調整してヘルパーに引っ越せません か?"
ActiveDecoratorは まさにこの問題を解決するのではないか?
しかし、事は慎重に • 自分がいるチームのサービスは既に稼働してい る • 内部で何をしているかわからないものをいきな り導入するのはリスクが高すぎる • 中のコードをちゃんと確認して動作を把握してか ら導入したい
というわけで コードを読んでみた (間違いや不備があったら教えて下さい)
コード読んでみた(1) ActiveDecorator::Decorator#decorate • 引数に取ったオブジェクトに対応したdecorator をextendさせる • "#{クラス名}Decorator"という名前のクラスを自 動的にdecoratorとして扱う • decoratorはActiveDecorator::Helpersをinclude
し、viewの文脈で呼び出せる各種メソッドを利用 可能にする • オブジェクトがActiveRecord::RelationやArrayの インスタンスだった場合、その中の各要素を decorateする • decorateされるオブジェクトに特に制限はない
コード読んでみた(2) decorateはいつ何に対して行われるのか? 1. controllerのrenderの中で a. assignされた各オブジェクトに対して 2. viewのrender partialの中で a.
localに渡した各オブジェクトに対して
動作の把握ができたところで 実際に組み込んでみた
実際に組み込んでみた(1) 直面した問題 • @user.team.link_with_name → MethodMissing • @userはdecorateされるが @user.teamはされない
実際に組み込んでみた(2) 解決策 • 答えは松田さんのスライドの中に • 「関連先をdecorateしたい時は」→関連先を参 照する部分をpartialに切り出す • やってみると、各templateのファイルがすっきり する
• 最初は正直「必要な実装が漏れてるんじゃない の?」と思ったけど、実際やってみて設計意図を 理解した
実際に組み込んでみた(3) やってみての印象 • 現在helperに存在するメソッドをdecoratorに移 行するのは割と大変 ◦ 先述の問題のため ◦ 切り出す必要があるtemplateが1つであるとは限らない •
helperお役御免、ではない ◦ 移行が難しかったり、helperにあるのが妥当であるメソッ ドはある • 新規実装でdecoratorを使うのは低コスト ◦ とりあえず使い始めて、徐々に移行していくのがよさげ
おしまい