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
Decoupled System with Turbo Frame
Search
wtnabe
January 20, 2024
Programming
1
73
Decoupled System with Turbo Frame
Kanazawa.rb meetup 137で話したTurbo Frameを使ってHeadless CMSとは異なる形で実現するDecoupledな仕組みについて
wtnabe
January 20, 2024
Tweet
Share
More Decks by wtnabe
See All by wtnabe
Ruby de Wasm
wtnabe
0
21
Cloud Native Buildpacksって結局どうなの?
wtnabe
0
17
join-kanazawarb-or-7years-passed-since-it-was-borned
wtnabe
0
730
let-me-edit-with-editor
wtnabe
0
290
google-photos-and-storage-and-rclone
wtnabe
0
390
one case of how to begin vuejs
wtnabe
2
430
Kanazawa.rb meetup #56 Coderetreat Intro
wtnabe
0
410
lightweight authenticity of microservices
wtnabe
0
430
Automate WordPress deployment with WordMove
wtnabe
1
460
Other Decks in Programming
See All in Programming
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
220
Security_for_introducing_eBPF
kentatada
0
110
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
190
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
540
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
920
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
300
ドメインイベント増えすぎ問題
h0r15h0
1
210
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
700
42 best practices for Symfony, a decade later
tucksaun
1
180
talk-with-local-llm-with-web-streams-api
kbaba1001
0
180
Featured
See All Featured
KATA
mclloyd
29
14k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
RailsConf 2023
tenderlove
29
940
The Language of Interfaces
destraynor
154
24k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Side Projects
sachag
452
42k
Become a Pro
speakerdeck
PRO
26
5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Docker and Python
trallard
42
3.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Rails Girls Zürich Keynote
gr2m
94
13k
Music & Morning Musume
bryan
46
6.2k
Transcript
Decoupled System with Turbo Frame wtnabe Kanazawa.rb meetup #137 2024-01-20
(Sat)
目次 Headless CMS とは Headless CMS の導入はちょっとむずい 発想を逆にしてみる 〜 Headless
Rails ? 〜 構成例
まとめ Rails (いわゆるWeb MVC )とCMS で得意領域が違う decoupled という考え方は採用しつつ、実現方法はHeadless CMS だ
けとは限らない より自由度の高い仕組み(汎用Web MVC )をglue に、それぞれの 得意を活かす rb な文脈なのでRails で進めるけどいわゆるWeb MVC なら通用する
Headless CMS とは
その昔 10 年ほど前にJamstack やHeadless CMS という言葉が流行った 2013 年 Contentful 創業
2014 年 Netlify 創業
伝統的な CMS コンテンツもデザインも全部一つの仕組みで実現する メリット WordPress など超メジャーな存在のおかげで制作依頼しやすい 管理画面もなんとなく触ったことがある デメリット 例えばWordPress は安全性や互換性の維持がそこそこ大変
力のあるホスティング業者に協力してほしくなる WordPress を魔改造してアップデートできなくなるとかあるある
Headless CMS の考え方 コンテンツ管理とフロントの画面はユーザーも利用目的も違う → decoupled が重要なのでは? ↓ コンテンツ管理だけを担う仕組みがHeadless CMS
フロントエンドの進化をCMS から独立して進めることができる 静的に出力すればパフォーマンス改善の選択肢も増える CMS がユーザーアクセスから分離されることで安全性も向上
Headless CMS の例 サービスもOSS もある Contentful / CloudCannon / Prismic
JekyllAdmin / NetlifyCMS microCMS / Kuroco collections
構成としてはこう Headless CMS サイト コンテンツ ユーザー ここに作り込みを⾏う 静的サイトで事前ビルド 動的サイトで動的に取得 概ねJSON
関係者を置くとこう Headless CMS サイト コンテンツ ユーザー コンテンツ担当 デザイナー エンジニア 概ねJSON
? デザインと コーディング JSON ⾊付け CMS の理解
あれ、システムの境界と担当領域の境界 合ってなくない?
Headless CMS の導入はちょっとむずい
必要な準備 Headless CMS そのものの理解 コンテンツの定義 サイト上でJSON を取得してビルドする仕組み
困りごと 作り込んでみないと使い勝手のいいCMS に仕上がるか分かりにくい 書きながらデザイン込みのプレビューはやりにくい 伝統的なCMS ならコンテンツ定義はコンテンツ担当とデザイナーで 完結できるのにHeadless CMS はエンジニアがいないと困りがち
Headless CMS が向いているケース コンテンツはコンテンツのみに集中、デザインは度外視 数千ページとか明らかに伝統的CMS の性能的に厳しいボリューム エンジニア兼デザイナ兼ライターが伝統的CMS を持ちたくない 逆に向いているケースにマッチしない場合はコスパが悪いのでは?
とは言え 機能的にCMS で十分なものをフルRails 開発もコスパが悪い Web 制作の領域なので制作の人の活躍の最大化を目指すべき
そこで 逆に Headless CMS の位置に Rails を置いてみる
表に⾒える サイト 検索など システム HTML HTML 断⽚ Rails ユーザー Turbo
Frame 必要なパーツのみ Turbo Frame で必要なコンテンツを取得(JSON→DOM 変換不要) セキュリティや保守はホスティングの力量に期待
表に⾒える サイト 検索など システム HTML HTML 断⽚ Rails ユーザー デザイナー
エンジニア コンテンツ担当 Turbo Frame 必要なパーツのみ
担当領域が素直
フロントエンドで気にすること 全体の構成、デザイン Turbo Frame 記法 所定の位置に正しく所定のコードを貼ること デザイン(CSS ) <turbo-frame id="xxx"
src="https://xxx.xxx/xxxx"> </turbo-frame>
バックエンドで気にすること 提供するHTML 断片に必要なデータ 提供するHTML 断片 Turbo Frame に対するケア
構成例
サイト Netlify (Jekyll など) Heroku (Rails) ユーザー 基本はこっち Netlify +
Heroku インフラ管理ほぼ不要 ユーザーは(Heroku 一本よ り)低レイテンシで快適 monorepo で開発でき、内製 なら柔軟な対応が可能 Jekyll のページの増減、改修 はRails よりカジュアル wtnabe/example-rails-and- jekyll-monorepo
サイト CMS Rails ユーザー 基本はこっち CMS + Rails 更新は更新担当だけで可能 CMS
は制作会社で、仕組み は内製のパターンも可 Rails 側は前ページと一緒
サイト CMS Rails SaaS ユーザー コンテンツ担当 エンジニア 何らかの 業務担当 基本はこっち
CMS + Rails + SaaS glue としての Rails & Turbo Frame
まとめ Rails (いわゆるWeb MVC )とCMS で得意領域が違う decoupled という考え方を踏襲しつつ、実現方法はHeadless CMS だ
けとは限らない より自由度の高い仕組み(汎用Web MVC )をglue に、それぞれの 得意を活かす