Ruby版 JSXのRuxが気になる
by
SansanTech
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
pvcresin Ruby版 JSXのRuxが気になる Omotesando.rb #118
Slide 2
Slide 2 text
pvcresin 仕事 Sansan で Eight の Webエンジニア 興味 フロントエンド / デザイン / 型 趣味 アニメ / お笑い / 謎解き ⾃⼰紹介
Slide 3
Slide 3 text
RailsでHTMLを返す場合
Slide 4
Slide 4 text
= APIモード / Inertia.js は除外
Slide 5
Slide 5 text
Viewのロジックをどこに置くか
Slide 6
Slide 6 text
“コンポーネント設計”
Slide 7
Slide 7 text
Partial
Slide 8
Slide 8 text
- コンポーネントごとにファイルを切り出せて便利 - ロジックも閉じ込めることが可能 Partial _name.html.erb index.html.erb
Slide 9
Slide 9 text
Partialに関する問題 - 変数がどこから渡されているのか追いづらい - テンプレートの中に if / each などのロジックが増えていく - Helperなどに逃がしても、スコープやテンプレートとの距離に課題 - コンポーネント固有のロジックはどうするか
Slide 10
Slide 10 text
ViewComponent
Slide 11
Slide 11 text
ViewComponent テンプレートに対応するRubyクラスにロジックを閉じ込める name_component.rb index.html.erb name_component.html.erb
Slide 12
Slide 12 text
ViewComponent - 変数の受け渡しが明⽰的 - テストが容易 - Partialより描画パフォーマンスが良い - Previewが容易(Lookbook / Storybook)
Slide 13
Slide 13 text
Ruby + ERB の 2ファイル必要...?
Slide 14
Slide 14 text
1ファイルでもできる name_component.rb name_component.rb name_component.html.erb
Slide 15
Slide 15 text
Ruby → ERB → Ruby
Slide 16
Slide 16 text
若⼲のまわりくどさ
Slide 17
Slide 17 text
Rux
Slide 18
Slide 18 text
- Rubyコードの中にHTMLでUIを書ける - ViewComponentベース Rux page_component.rux name_component.rux
Slide 19
Slide 19 text
Ruxの制約
Slide 20
Slide 20 text
.rux → .rb へのトランスパイルが必要 name_component.rb name_component.rux ※ リクエストが来たら⾃動変換する機能もある(dev / testで有⽤)
Slide 21
Slide 21 text
微妙な点
Slide 22
Slide 22 text
- 完成度がやや怪しい - エラーの情報が少ない - Rux::Parser::UnexpectedTokenError - トランスパイルを挟むので、sourcemapが必要そう 微妙な点 次のバージョンで直るよ by 作者 ⭕ OK ❌ NG
Slide 23
Slide 23 text
まとめ
Slide 24
Slide 24 text
まとめ - RuxはViewComponentをベースとした、Ruby版 JSXのようなライブラリ - プロダクション利⽤には、まだまだ課題が残る - フロントエンドの考えを持ち込むことでRailsの世界もさらに広がりそう
Slide 25
Slide 25 text
No content