Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ActiveDecorator導入の話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
120
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.4k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
Claude Team Plan導入・ガイド
tk3fftk
0
250
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
160
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
580
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
290
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
130
Android CLI
fornewid
0
200
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
120
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
390
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
41k
Building Applications with DynamoDB
mza
96
7.2k
My Coaching Mixtape
mlcsv
0
190
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
Are puppies a ranking factor?
jonoalderson
1
3.7k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Scaling GitHub
holman
464
140k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
310
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
680
Product Roadmaps are Hard
iamctodd
55
12k
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を使うのは低コスト ◦ とりあえず使い始めて、徐々に移行していくのがよさげ
おしまい