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
120
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
Effective Jekyll
wtnabe
0
49
5 min Jekyll/Liquid Plugin cooking
wtnabe
0
23
Ruby de Wasm
wtnabe
0
48
Cloud Native Buildpacksって結局どうなの?
wtnabe
0
39
join-kanazawarb-or-7years-passed-since-it-was-borned
wtnabe
0
780
let-me-edit-with-editor
wtnabe
0
330
google-photos-and-storage-and-rclone
wtnabe
0
450
one case of how to begin vuejs
wtnabe
2
460
Kanazawa.rb meetup #56 Coderetreat Intro
wtnabe
0
440
Other Decks in Programming
See All in Programming
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
2
850
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
13
4.7k
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
250
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
830
生成AI時代のコンポーネントライブラリの作り方
touyou
1
230
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
400
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
260
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.6k
AIともっと楽するE2Eテスト
myohei
7
2.7k
Is Xcode slowly dying out in 2025?
uetyo
1
280
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
520
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
170
Featured
See All Featured
Facilitating Awesome Meetings
lara
54
6.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
KATA
mclloyd
30
14k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Writing Fast Ruby
sferik
628
62k
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 に、それぞれの 得意を活かす