Slide 1

Slide 1 text

Decoupled System with Turbo Frame wtnabe Kanazawa.rb meetup #137 2024-01-20 (Sat)

Slide 2

Slide 2 text

目次 Headless CMS とは Headless CMS の導入はちょっとむずい 発想を逆にしてみる 〜 Headless Rails ? 〜 構成例

Slide 3

Slide 3 text

まとめ Rails (いわゆるWeb MVC )とCMS で得意領域が違う decoupled という考え方は採用しつつ、実現方法はHeadless CMS だ けとは限らない より自由度の高い仕組み(汎用Web MVC )をglue に、それぞれの 得意を活かす rb な文脈なのでRails で進めるけどいわゆるWeb MVC なら通用する

Slide 4

Slide 4 text

Headless CMS とは

Slide 5

Slide 5 text

その昔 10 年ほど前にJamstack やHeadless CMS という言葉が流行った 2013 年 Contentful 創業 2014 年 Netlify 創業

Slide 6

Slide 6 text

伝統的な CMS コンテンツもデザインも全部一つの仕組みで実現する メリット WordPress など超メジャーな存在のおかげで制作依頼しやすい 管理画面もなんとなく触ったことがある デメリット 例えばWordPress は安全性や互換性の維持がそこそこ大変 力のあるホスティング業者に協力してほしくなる WordPress を魔改造してアップデートできなくなるとかあるある

Slide 7

Slide 7 text

Headless CMS の考え方 コンテンツ管理とフロントの画面はユーザーも利用目的も違う → decoupled が重要なのでは? ↓ コンテンツ管理だけを担う仕組みがHeadless CMS フロントエンドの進化をCMS から独立して進めることができる 静的に出力すればパフォーマンス改善の選択肢も増える CMS がユーザーアクセスから分離されることで安全性も向上

Slide 8

Slide 8 text

Headless CMS の例 サービスもOSS もある Contentful / CloudCannon / Prismic JekyllAdmin / NetlifyCMS microCMS / Kuroco collections

Slide 9

Slide 9 text

構成としてはこう Headless CMS サイト コンテンツ ユーザー ここに作り込みを⾏う 静的サイトで事前ビルド 動的サイトで動的に取得 概ねJSON

Slide 10

Slide 10 text

関係者を置くとこう Headless CMS サイト コンテンツ ユーザー コンテンツ担当 デザイナー エンジニア 概ねJSON ? デザインと コーディング JSON ⾊付け CMS の理解

Slide 11

Slide 11 text

あれ、システムの境界と担当領域の境界 合ってなくない?

Slide 12

Slide 12 text

Headless CMS の導入はちょっとむずい

Slide 13

Slide 13 text

必要な準備 Headless CMS そのものの理解 コンテンツの定義 サイト上でJSON を取得してビルドする仕組み

Slide 14

Slide 14 text

困りごと 作り込んでみないと使い勝手のいいCMS に仕上がるか分かりにくい 書きながらデザイン込みのプレビューはやりにくい 伝統的なCMS ならコンテンツ定義はコンテンツ担当とデザイナーで 完結できるのにHeadless CMS はエンジニアがいないと困りがち

Slide 15

Slide 15 text

Headless CMS が向いているケース コンテンツはコンテンツのみに集中、デザインは度外視 数千ページとか明らかに伝統的CMS の性能的に厳しいボリューム エンジニア兼デザイナ兼ライターが伝統的CMS を持ちたくない 逆に向いているケースにマッチしない場合はコスパが悪いのでは?

Slide 16

Slide 16 text

とは言え 機能的にCMS で十分なものをフルRails 開発もコスパが悪い Web 制作の領域なので制作の人の活躍の最大化を目指すべき

Slide 17

Slide 17 text

そこで 逆に Headless CMS の位置に Rails を置いてみる

Slide 18

Slide 18 text

表に⾒える サイト 検索など システム HTML HTML 断⽚ Rails ユーザー Turbo Frame 必要なパーツのみ Turbo Frame で必要なコンテンツを取得(JSON→DOM 変換不要) セキュリティや保守はホスティングの力量に期待

Slide 19

Slide 19 text

表に⾒える サイト 検索など システム HTML HTML 断⽚ Rails ユーザー デザイナー エンジニア コンテンツ担当 Turbo Frame 必要なパーツのみ

Slide 20

Slide 20 text

担当領域が素直

Slide 21

Slide 21 text

フロントエンドで気にすること 全体の構成、デザイン Turbo Frame 記法 所定の位置に正しく所定のコードを貼ること デザイン(CSS )

Slide 22

Slide 22 text

バックエンドで気にすること 提供するHTML 断片に必要なデータ 提供するHTML 断片 Turbo Frame に対するケア

Slide 23

Slide 23 text

構成例

Slide 24

Slide 24 text

サイト Netlify (Jekyll など) Heroku (Rails) ユーザー 基本はこっち Netlify + Heroku インフラ管理ほぼ不要 ユーザーは(Heroku 一本よ り)低レイテンシで快適 monorepo で開発でき、内製 なら柔軟な対応が可能 Jekyll のページの増減、改修 はRails よりカジュアル wtnabe/example-rails-and- jekyll-monorepo

Slide 25

Slide 25 text

サイト CMS Rails ユーザー 基本はこっち CMS + Rails 更新は更新担当だけで可能 CMS は制作会社で、仕組み は内製のパターンも可 Rails 側は前ページと一緒

Slide 26

Slide 26 text

サイト CMS Rails SaaS ユーザー コンテンツ担当 エンジニア 何らかの 業務担当 基本はこっち CMS + Rails + SaaS glue としての Rails & Turbo Frame

Slide 27

Slide 27 text

まとめ Rails (いわゆるWeb MVC )とCMS で得意領域が違う decoupled という考え方を踏襲しつつ、実現方法はHeadless CMS だ けとは限らない より自由度の高い仕組み(汎用Web MVC )をglue に、それぞれの 得意を活かす