Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Movable Type を Headless CMS として活用した Jamstack開発手法
Search
redamoon
November 13, 2021
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Movable Type を Headless CMS として活用した Jamstack開発手法
2021年11月13日(土)にオンライン開催されたMTDDC Meetup TOKYO 2021のセッション資料です。
redamoon
November 13, 2021
More Decks by redamoon
See All by redamoon
「速くなった」では足りない ─ Cursor Meetup Sapporo で話した、弥生の Cursor 組織導入1年
redamoon
0
550
もくテク_AI駆動開発の標準化を進める_-_プロセス整備とルール選定基準の整理.pdf
redamoon
0
2.2k
MTDDCMeetupTokyo_2023_LT.pdf
redamoon
0
190
Supabase + Nuxt3 の実装素振りで チャットアプリを作ってみた
redamoon
1
430
Data APIを活用したWEBサイト構築手法
redamoon
1
79
sacss110_pdf.pdf
redamoon
1
150
Vue meet up sapporo Vue + Storybook導入について
redamoon
0
72
Movable Type 7を触ってみた
redamoon
0
250
HTML・CMSから考えるコンポーネント化について
redamoon
1
460
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Designing for humans not robots
tammielis
254
26k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
ʢʣ .PWBCMF5ZQFΛ)FBEMFTT$.4 ͱͯ͠׆༻ͨ͠+BNTUBDL։ൃख๏ .5%%$.FFUVQ5PLZP
Pro fi le ؔޱ ༐थ גࣜձࣾHAMWORKS ϑϩϯτΤϯυΤϯδχΞ ͖ͳMTMLɿ<mt:SetVarTemplate> झຯɿԂܳɾDIY ϋογϡλάɿ#ԂδχΞ,
#ԂܳΤϯδχΞ ஶॻɿϓϩϑΣογϣφϧWebϓϩάϥϛϯά Vue.js MySiteɿhttps://www.redamoon.net/ Twitterɿ@redamoon
Movable Typeͱͷग़ձ͍ ʙ ઌฦΓΛΔ ʙ
"HFOEB • Headless CMS ͱ Jamstack ͱʁ • Movable Type
ͷ Data APIͱʁ • ੩తαΠτδΣωϨʔλͷར༻ • MTMLͷ՝ͱ • Data API Λ׆༻ͨ͠ Jamstack ͷ։ൃϫʔΫϑϩʔ • ࣄྫհ
)FBEMFTT$.4ͱ+BNTUBDLͱʁ
)FBEMFTT$.4 ࡢࠓɺHeadless CMSͱ͍͏σʔλͷཧΛAPIͷΈఏڙ͢ΔαʔϏε͕૿͖͑ͯͨɻ ैདྷͷCMSʹ͋ͬͨςϯϓϨʔτͱݺΕΔ෦͕ͳ͘ɺσʔλͷΈΛཧͰ͖ΔCMSɻ
ࠃΘͣ͞Ε͍ͯΔ ※GoogleτϨϯυ
)FBEMFTT$.4"1*ͱදࣔͷ CMSαʔό WEBαʔό Database API Template CMS Image/File CSS JavaScript
HTML ैདྷͷCMSߏ CMSཧ͍ͯ͠ΔςϯϓϨʔτ͍ɺWebαʔό৴/ಉҰᝑମͷυΩϡϝϯτϧʔτͰཧ
)FBEMFTT$.4"1*ͱදࣔͷ Headless CMS Ampliy / Vercel etc API CMS Image/File
CSS JavaScript HTML σʔλΛCMSͰཧ͠ߋ৽͝ͱʹCI্ͰϏϧυΛߦ͍ϗεςΟϯάઌͱͯ͠S3VercelΛར༻ Git/CI Template (static generator)
+BNTUBDLͱ APIใΛϏϧυ࣌ͷΈʹݶఆ͠ɺ ੩తͳHTMLΛ৴ɾΩϟογϡΛར༻ͨ͠ख๏ https://speakerdeck.com/biilmann/the-jam-stack
ఏএ͔Βঃʑʹೝࣝ͞Ε࢝Ί͍ͯΔ ※GoogleτϨϯυ
࠶ར༻ՄೳͳAPI ΫϥΠΞϯταΠυ JavaScript ࣄલʹϏϧυ͞Εͨ Markup APIͱදࣔΛͯ͠੩తʹॻ͖ग़͢ΞʔΩςΫνϟ
σΧοϓϦϯάɺγεςϜ·ͨαʔϏεؒͷ໌֬ͳΛ࡞͢ΔϓϩηεͰ͢ɻαΠτͷӡ ӦʹඞཁͳαʔϏεΛ͢Δ͜ͱͰɺ֤ίϯϙʔωϯτύʔπͷਪ͕༰қʹͳΓɺݸผʹަ ·ͨΞοϓάϨʔυͰ͖ɺ৫·ͨαʔυύʔςΟͱͯ͠ઐεϖγϟϦετͷݖݶΛࢦఆ Ͱ͖·͢ɻ Decoupling
ࡢࠓɺ+BNTUBDL͕ࠃͰ͞Ε͍ͯΔͷɺ ʑਐԽ͠ଓ͚Δ+BWB4DSJQUϑϨʔϜϫʔΫͷԸܙ͕େ͖͍
ࡢࠓͷϑϩϯτ։ൃࣄ
React/Vue.js/Svelte Λ༻ͨ͠ߏங TypeScript ʹؔ͢Δใ͕ଟ͍ɻ Headless CMS CI/ςετ/Git ͳͲ։ൃڥʑมԽ͍ͯ͠Δ
ͦͷഎܠʹʜ ɾECMAScriptͷػೳΞοϓσʔτ ɾJavaScriptϑϨʔϜϫʔΫͷػೳॆ࣮ ɾHeadless CMS ɾJamstackͱݺΕΔߏஙख๏ ɾCI / ςετ /
Git ɾTypeScriptͷར༻
ϑϩϯτΤϯυΔ͜ͱଟ͗͢͡Όͳ͍ʁ ※࡞ըɿฐࣾᖒ࡞ @nagasawaaaa
.PWBCMF5ZQFʹ%BUB"1*͋Δ͔Β )FBEMFTT$.4ߏͰ͍͚ͬͯΔΜ͡Όͳ͍ʁ
Movable TypeϋΠΤϯυσϕϩούʔʹ͍͓ۙ٬༷ʹར༻͍͖͍ͯͨͩͨ͠ͱࢥ͍ͬͯ·͢͠ɺ ֎෦APIͷմͷΑ͏ʹ͍ͨ͠Ͱ͢ɻ Ϣʔβʔͱͯ͠ɺMovable Typeͷ֦ுϓϥάΠϯπʔϧΛ࡞ΔͳͲɺػೳՃΛ͢Δ͜ͱΛָ ͠Ήਓ͕ଟ͍Ͱ͢ɻ γοΫεɾΞύʔτ CTO ฏా େ࣏
ࢀߟϦϯΫɿhttps://enterprise.watch.impress.co.jp/cda/web2/2006/01/06/6940.html هࣄɿ2006
.PWBCMF5ZQFͷ%BUB"1*ͱʁ
%BUB"1*ͱʁ
• Movable Type 6͔Βࡌ͞Εͨػೳ • REST/JSONํࣜͰσʔλߋ৽ɾআɾऔಘ͕Մೳ • WebαΠτҎ֎Ͱͷσʔλ׆༻͕Մೳ %BUB"1*ͱʁ https://www.movabletype.jp/developers/data-api/v4-reference.html
%BUB"1*ͱʁ https://my.XXX.com/[mt_directory]/mt-data-api.cgi/v4/sites/[site_id]/entries ※Movable Typeཧը໘ͰData APIΛ༗ޮ 1. ϒϥβΫϥΠΞϯτιϑτͰΤϯυϙΠϯτΛୟ͘ 2. Movable TypeͰొͨ͠σʔλͷϨεϙϯεΛऔಘ
※GETͷ߹
https://my.XXX.com/[mt_directory]/mt-data-api.cgi/v4/sites/[siteid]/ contentTypes/[content_type_id]/data ▪ΤϯυϙΠϯτɿίϯςϯπλΠϓͷσʔλҰཡऔಘ ίϯςϯπλΠϓͷσʔλҰཡΛநग़ https://my.XXX.com/[mt_directory]/mt-data-api.cgi/v4/sites/[siteid]/entries [mt_directory]ɿMovable Typeຊମ͕Πϯετʔϧ͞Ε͍ͯΔύε [siteid]ɿཧը໘ͷαΠτʹΞΫηεͨ͠ࡍɺURLʹ༩͞Ε͍ͯΔύϥϝʔλͷblog_idΛࢀর ▪ΤϯυϙΠϯτɿهࣄҰཡͷऔಘྫ
੩తαΠτδΣωϨʔλͷར༻
੩తαΠτδΣωϨʔλͱʁ HTMLΛੜ͢ΔͨΊͷπʔϧ Jamstack ߏͰߦ͏߹ɺHTMLΛϏϧυ࣌ʹ༻͍ΒΕΔ
React Vue.js ͳͲͷ JavaScriptͷϑϨʔϜϫʔΫΛ͏ར https://ja.reactjs.org/ https://jp.vuejs.org/
React
Vue.js
3FBDU7VFKTͳͲͷϑϨʔϜϫʔΫΛ͏ར • ίϛϡχςΟ͕׆ൃɾࠃΘͣίϯτϦϏϡʔλʔ͕ଟ • Weeklyμϯϩʔυ͕ଟ͍ • ϑϩϯτΤϯυͷݟ issue ͷΓऔΓ͕ଟ͍ •
ಠࣗϑϨʔϜϫʔΫΑΓ։ൃίετ͑ΒΕΔʢυΩϡϝϯτ͕͋ΔͨΊʣ • ίʔυϑΥʔϚοτͷॆ࣮ • LintʹΑΔૣظΤϥʔݕ͍͢͠ • ςετίʔυΛॻ͖͍͢ڥ • StoryBookͳͲͷπʔϧΛར༻͢Δ͜ͱͰσβΠϯγεςϜͱ࿈ܞ͕औΓ͍͢
/FYUKT
React ͕ಉࠝ͞Ε͍ͯΔϑϨʔϜϫʔΫ ։ൃݩ Vercelࣾ https://nextjs.org/
/FYUKTΛར༻͢Δཧ༝ • ϑϨʔϜϫʔΫͱͯ͠ͷػೳ͕ॆ࣮͍ͯ͠Δ • ࠃΘͣ෯͍ใྔ • ͙͢ʹ࢝ΊΒΕΔ։ൃڥߏஙʢSSG / SSR /
SPA etcʣ • Preview Mode ͕ ࡌ͞ΕͯΔ • TypeScript ͷੑ͕ߴ͍ • ࠃใ૿͖͑ͯͨ
.5.-ͷ՝ͱ
MTMLͰͷཧɾ࣮ํ๏ • MTMLςϯϓϨʔτΛGitͰཧ • DockerڥΛ༻ҙͯ͠ɺϩʔΧϧڥͰςϯϓϨʔτͷ࣮ • ຊ൪ɾεςʔδϯά͝ͱʹMovable TypeΛ༻ҙ • σϓϩΠखݩͷMTMLΛཧը໘ίϐϖͯ͠࠶ߏங
• ϩʔΧϧڥͷڞ༗ɺSQLμϯϓͱग़ྗͨ͠ΞηοτΛGitܦ༝ͰόοΫΞοϓ
ςϯϓϨσϓϩΠ͢Δ·Ͱϑϩʔ͕खಈɻ (JUΛ׆༻Ͱ͖ͯͳ͍ӡ༻ɾɾɾ
Primary
ݟ௨͕͠Αͯ͘ɺ͍ճͤΔ͔Β͍͍ΑͶʁ ͱࢥ͚ͬͯͨͲ͋Δɾɾɾ
։ൃϑϩʔɾӡ༻ͷ • DBʹڍ͕ͬͯΔςϯϓϨʔτ͕ຊͷ࠷৽ɾɾɾ • ཧը໘͔ΒςϯϓϨฤूՄೳͳͷͰɺඇΤϯδχΞ͕मਖ਼Մೳɾɾɾ • ςϯϓϨʔτ͕յΕ͔ͯΒ࿈བྷ͕དྷΔͨΊϦϏδϣϯΛ͏ͷ͕େม • खݩͷίʔυͱຊ൪ίʔυͱͷࠩ •
Τϥʔݕʹऑ͍ ※λΠϙͯ͠Τϥʔݕ͞Εͳ͍ • ϞσΟϑΝΠΞʹఆٛͰ͖ΔܕఆٛͰ͖ͳ͍ͨΊɺҙਤ͠ͳ͍ڍಈ͕ى͖Δ • ίʔυิ͕ͳ͍ͨΊɺͲͷϞδϡʔϧ͕ݺͼग़͔͢ςϯϓϨϞδϡʔϧ͔Βࢀর • ෳࡶʹ࡞Γ͗ͯ͢ɺҾ͖ܧ͗ઌ͔Βຖճ࿈བྷ͕དྷΔʢୈࡾऀ͕ಡΊͳ͍ʣ 😵 😵 😴
※࡞ըɿฐࣾᖒ࡞ @nagasawaaaa ݟ௨͠Α͘ߏஙͨ͠ͷʹӡ༻͠ΜͲ͍ɻ ͡ΌʔͲ͏͢Εɾɾɾ
σʔλͱςϯϓϨʔτͷ ։ൃɾӡ༻ͷݟ͢͠Δ ※ݸਓతͳҙݟ • ςϯϓϨʔτMovable Typeʹґଘͤͨ͘͞ͳ͍ • Git -> CIΛ௨ͯࣗ͠ಈԽ͍ͨ͠
• खݩͷίʔυ࠷৽ԽͷίϐʔΞϯυϖʔετෆཁʹ͍ͨ͠ • ϏϧυલʹΤϥʔΛݕ͍ͨ͠ • ࣮தͷૣظΤϥʔΛݕ͍ͨ͠ • ΤσΟλ্Ͱͷิ͕΄͍͠ • MTMLͰ࡞ΒΕͨΦϨΦϨυΩϡϝϯτ٫͍ͨ͠
%BUB"1*Λ׆༻ͨ͠+BNTUBDLͷ։ൃϫʔΫϑϩʔ
%BUB"1*Λ׆༻ͨ͠+BNTUBDLͷ։ൃϫʔΫϑϩʔ Asset Contents ※Webhook༻ϓϥάΠϯඞཁ ίϯςϯπཧऀ ςϯϓϨʔτཧʢΤϯδχΞʣ API Gateway هࣄɾίϯςϯπσʔλɾΧςΰϦɾมߋɾআ Webhook
URL (API GatewayΤϯυϙΠϯτϦΫΤετ) Lambda WebࢹʢSentryͰϑϩϯτΛࢹʣ issueԽ CIىಈ Asset -> S3 CloudFront S3 HTML CSS JavaScript Image/File ίʔυσϓϩΠ ※ςετΛ௨Βͳ͍ͱσϓϩΠ͠ͳ͍ Git push Drone etc ʢςετ/Ϗϧυʣ PRͷϚʔδࣦഊ ैདྷͷMTMLɺMT -> ϗεςΟϯάઌ ↓ JamstackɺMT -> Ϗϧυ / CI / ςετͳͲ͕ؒʹڬ·Δ
%BUB"1*Λ׆༻ͨ͠+BNTUBDLͷ։ൃϫʔΫϑϩʔ JamstackͷߏஙϙΠϯτ • MTΫϥυΛ࠾༻ • αʔόϨεӡ༻ʹ͢ΔͨΊϗεςΟϯάઌAWSVercelͳͲΛ࠾༻ • ςϯϓϨʔτNext.jsΛ࠾༻ ※ଞͷπʔϧͰՄ •
Ξηοτؔ࿈S3ʹ৴͘͠ຊମͷMTCloudFrontΛט·ͤͯυϝΠϯͷӅṭ • هࣄͷϓϨϏϡʔΛՄೳʹ͢Δ
%BUB"1*Λ׆༻ͨ͠+BNTUBDLͷ։ൃϫʔΫϑϩʔ ϝϦοτ • αʔόϨεߏʹ͢Εαʔόӡ༻ෆཁ • ैདྷͷ࠶ߏஙಉ༷ʹ੩తͰ͋Δ • CDNΛར༻͢Δ͜ͱͰϖʔδεϐʔυͷվળՄೳ • ϒϥϯν͝ͱͷ։ൃͱϏϧυͷࣗಈԽ͕Մೳ
• ςϯϓϨʔτͷ֦ுੑ͕ߴ͍ • CMSʹϩοΫΠϯ͞Εͳ͍ͨΊΞαΠϯઌ͕૿͑Δ • ΦϨΦϨυΩϡϝϯτෆཁ • ʹΑΔґଘ͕ղফ͞ΕɺΛՄࢹԽͰ͖Δ
%BUB"1*Λ׆༻ͨ͠+BNTUBDLͷ։ൃϫʔΫϑϩʔ σϝϦοτ • αʔόϨεߏͷΞʔΩςΫνϟઃܭ͕ඞཁ • αʔϏεࢄʹΑΔো • Gitૢ࡞ͷཧղ͕ඞཁʢඇΤϯδχΞ͚ʣ • JavaScript/TypeScript/React/VueͳͲͷ͕ࣝඞཁ
• αʔϏεΫϥυͷ͕ࣝඞཁ • WebhookϓϥάΠϯ͕ඞཁʢMovable Type ͷ֦ுʣ
%BUB"1*Λ׆༻ͨ͠+BNTUBDLͷ։ൃϫʔΫϑϩʔ Data APIΤϯυϙΠϯτͷ ɾBlog_idϕʔεͷऔಘʹͳΔͨΊΤϯυϙΠϯτͷΞΫηεํ๏ID͕ඞཁ ɾIDʢαΠτίϯςϯπσʔλ͝ͱʣΛௐΔखஈɺཧը໘ͷURL͔Β͔͠Θ͔Βͳ͍ ɾϏϧυ࣌ʹIDΛؚΊͨύεੜ࣌จࣈྻʹม͢Δඞཁ͕͋Δ ɾίϯςϯπσʔλʹؔ࿈͞ΕΔΧςΰϦηοτը૾ϑΟʔϧυͷใ͕ID͔͠ͳ͍ ɾίϯςϯπσʔλͰΧςΰϦʹଐͨ͠σʔλσʔλͷҰཡ͕औಘͰ͖ͳ͍ ɾίϯςϯπσʔλͷΤϯυϙΠϯτʹϑΟϧλʔ͕ͳ͍ͨΊɺશ෦औಘͯ͠ϑϩϯτͰՃ͕ඞཁ
ࣄྫհ
Movable Type Knowledge https://www.movabletype-knowledge.tech/
Asset Contents ίϯςϯπཧऀ ςϯϓϨʔτཧʢΤϯδχΞʣ هࣄͷߋ৽ͰσϓϩΠ ϓϨϏϡʔͰNext.jsͷPreview Mode ىಈ main ϒϥϯνʹ
push͢Δ͜ͱͰσϓϩΠ
Vercel Delpoy Hooks
Vercel Delpoy Hooks ݱࡏɺهࣄͷσϓϩΠɾϓϨϏϡʔ·Ͱ࣮த https://github.com/redamoon/mt-plugin-VercelDeployHooks
هࣄͷσϓϩΠ
Dynamic Routes https://nextjs.org/docs/routing/dynamic-routes
[id].tsx ͕ಈతରϑΝΠϧ
getStaticPaths
getStaticProps
هࣄͷϓϨϏϡʔ
)FBEMFTT$.4ͷ՝ɺϓϨϏϡʔΛͲ͏࣮ݱ͢Δ͔ɻ
Preview Mode https://nextjs.org/docs/advanced-features/preview-mode
هࣄͷϓϨϏϡʔະެ։هࣄͰࢀরͰ͖Δඞཁ͕͋Δ
https://www.movabletype.jp/developers/data-api/quick-start/ ະެ։هࣄΛऔಘ͢ΔͨΊʹ τʔΫϯΛൃߦ͢Δ
None
setPreviewData ະެ։هࣄΛऔಘ https://domain.com/api/preview?path=[هࣄͷύε][هࣄID]&user=[MTͷϢʔβ໊]&pass=[Webύεϫʔυ]
setPreviewData ະެ։هࣄΛऔಘ https://domain.com/api/preview?path=[هࣄͷύε][هࣄID]&user=[MTͷϢʔβ໊]&pass=[Webύεϫʔυ]
·ͱΊ
·ͱΊ • JavaScriptΛར༻͢Δ͜ͱͰϞμϯͳ։ൃՄೳ • ཧը໘ςϯϓϨʔτͷίϐϖෆཁ • ैདྷͷςϯϓϨʔτࠩղফ͞ΕΔ • MTMLΒͳ͍ΤϯδχΞͰ࣮Մೳ
·ͱΊ +BNTUBDLϋʔυϧʢ։ൃڥʣ͕ߴ͍ɻ ͍··Ͱͷ.5.-ख๏Ͱେৎʂ ͰϞμϯͳ։ൃʹνϟϨϯδͯ͠ΈΔͷྑ͍͔͠Ε·ͤΜ