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
JAMstack_kotohajime.pdf
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
IMANISHI TOSHIFUMI
December 07, 2019
Technology
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JAMstack_kotohajime.pdf
IMANISHI TOSHIFUMI
December 07, 2019
More Decks by IMANISHI TOSHIFUMI
See All by IMANISHI TOSHIFUMI
Vue 3 超入門 ー ゆく Vue くる Vue
toshifumiimanishi
0
200
Form_design_from_Netflix.pdf
toshifumiimanishi
0
160
New_Sass_Module_System.pdf
toshifumiimanishi
2
900
mercurial_nyuumon.pdf
toshifumiimanishi
0
97
Web制作者のためのSassの参考書.pdf
toshifumiimanishi
3
2.9k
ゆく技術_くる技術.pdf
toshifumiimanishi
0
300
裏CSS.pdf
toshifumiimanishi
0
140
Other Decks in Technology
See All in Technology
なぜMIXIはゼロトラスト基盤として クラウドフレアを選んだのか - Cloudflare Peer Point SASE User Voices
mixi_engineers
PRO
2
120
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
230
現場との対話から始める “作る前に問い直す”業務改善
mochico50
2
330
数値で見る Microsoft MVP 〜Spec Kit と GitHub Copilot Agent で作るデータ可視化ダッシュボード〜
yutakaosada
0
160
データ活用研修 データマネジメント【MIXI 26新卒技術研修】
mixi_engineers
PRO
4
720
文字起こし基盤の信頼性
abnoumaru
0
150
実践が先生だった— 新卒サーバーエンジニア1年目のリアル
mixi_engineers
PRO
0
180
41歳でAWSが好きすぎてITエンジニアになったおっさんの話
yama3133
1
790
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
2
160
インシデント事例と パッケージの全量解析に学ぶ ソフトウェアサプライチェーンの守り方 / supply-chain-attack-defense
flatt_security
0
1.2k
AIエージェントがあれば技術書なんてすぐ書けるでしょ→無理でした
watany
6
1.1k
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/aidevday2026
thara0402
0
120
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The SEO Collaboration Effect
kristinabergwall1
1
510
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
WCS-LA-2024
lcolladotor
0
760
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
420
A designer walks into a library…
pauljervisheath
211
24k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Utilizing Notion as your number one productivity tool
mfonobong
4
470
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
400
Evolving SEO for Evolving Search Engines
ryanjones
0
250
Fireside Chat
paigeccino
42
4k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Transcript
+".TUBDL͜ͱ͡Ί ΤϯδχΞަྲྀձʙ7VFͱ͔3FBDU৮͓͔ͬͯͳ͍ͱͶʙʛ%FD ࠓढ़จ גࣜձࣾΞϯςΟʔɾϑΝΫτϦʔ
ࠓढ़จ ͍·ʹ͠ ϑϩϯτΤϯυΤϯδχΞ !UPTIJNBSOJF UPTIJGVNJJNBOJTIJ ͱ͠;Έ
+BWB4DSJQU "1*T .BSLVQ +".TUBDLͱ ˠΫϥΠΞϯταΠυͷ+BWB4DSJQU ˠ࠶ར༻Մೳͳ"1* ˠ͋Β͔͡Ίߏங͞Εͨ.BSLVQ
IFBEMFTT$.4ͱ "1*
813&45"1* QVTI OVYUHFOFSBUF
813&45"1*Λऔಘ͢Δʹɺ ύʔϚϦϯΫΛઃఆ͠·͢ ߘ*%
const apiUrl = 'http://localhost:8000/wp-json/wp/v2'; export default { … axios: {
baseURL: apiUrl }, … } OVYUDPOpHKT
None
JOEFYWVF export default { data () { return { posts:
[] } }, … async asyncData({ $axios }) { const { data } = await $axios.get('/posts?_embed') return { posts: data } }, } BTZOD%BUB/VYUKTͰఏڙ͢Δಠࣗʹ֦ுͨ͠7VFKTͷίϯϙʔωϯτΦϓγϣϯ ඇಉظʹσʔλΛऔಘ͢ΔͨΊͷϝιουͰɺ7VFKTͷEBUBʹϚʔδ͞Ε·͢ OVYUDPOpHKTͰఆٛͨ͠CBTF63-͕ࢀর͞Ε·͢ @FNCFEύϥϝʔλɺΞΠΩϟονը૾ίϝϯτͳͲͷใΛऔಘͰ͖·͢
JOEFYWVF <template> … <article v-for="post in posts" :key=“post.id"> <n-link :to="{
path: '/posts/' + post.id }"> <h2>{{ post.title.rendered }}</h2> <div v-html="post.excerpt.rendered"></div> </n-link> </article> … </template> ݻఆϖʔδͷϦϯΫऔಘ ݻఆϖʔδͷλΠτϧऔಘ ݻఆϖʔδͷ༰ൈਮ
None
export default { … generate: { routes: async () =>
{ const { data } = await axios.get(`${apiUrl}/posts?_embed`) return data.map(post => { return { route: `/posts/${post.id}`, payload: post } }) } } … } OVYUDPOpHKT HFOFSBUFίϚϯυͰɺಈతͳϧʔςΟϯάແࢹ͞Ε·͢ɻ ಈతͳύϥϝʔλʔΛ༻͍ͨϧʔτΛੜ͍ͤͨ͞߹ɺಈతͳϧʔςΟϯάͷྻΛηοτ͢Δඞཁ͕͋Γ·͢ɻ QBZMPBEɺಈతϧʔςΟϯάੜͷߴԽͷͨΊͰ͢ɻ
@JEWVF <template> <div> <h2>{{ post.title.rendered }}</h2> <div v-html="post.content.rendered"></div> </div> </template>
… export default { data () { return { post: {} } }, async asyncData({ $axios, params, error, payload }) { if (payload) { return { post: payload } } else { const { data } = await $axios.get(`/posts/${params.id}?_embed`) return { post: data } } } }
None
QVTI HBUTCZCVJME
$ npm install --save gatsby-source-contentful $ npm install --save gatsby-transformer-remark
HBUTCZDPOpHKT require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` }) module.exports = { … plugins:
[ … { resolve: `gatsby-source-contentful`, options: { spaceId: `${process.env.CONTENTFUL_SPACE_ID}`, accessToken: `${process.env.CONTENTFUL_ACCESS_TOKEN}`, } }, `gatsby-transformer-remark` … ], } (BUTCZ+4ͭͷڥΛαϙʔτ͠·͢ɻ w HBUTCZEFWFMPQΛ࣮ߦ͢Δͱʮ։ൃʯڥʹͳΓ·͢ɻ w HBUTCZCVJMEɺ·ͨɺHBUTCZTFSWFΛ࣮ߦ͢Δͱʮຊ൪ʯڥʹͳΓ·͢ɻ HBUTCZUSBOTGPSNFSSFNBSL(BUTCZ+4Ͱ.BSLEPXOϑΝΠϧΛѻ͏ͨΊͷ5SBOTGPSNFSϓϥάΠϯͰ͢ɻ
FOWEFWFMPQNFOU CONTENTFUL_SPACE_ID=xxxxxxxx CONTENTFUL_ACCESS_TOKEN=xxxxxxxx FOWQSPEVDUJPO CONTENTFUL_SPACE_ID=xxxxxxxx CONTENTFUL_ACCESS_TOKEN=xxxxxxxx
None
None
w pMUFSɿϩέʔϧӳޠ w TPSUɿهࣄ࡞࣌ͷ߱ॱ
TSDQBHFTJOEFYKT import React from "react" import { Link, graphql }
from "gatsby" const IndexPage = ({ data }) => ( <div> <ul> { data.allContentfulCourse.edges.map(edge => { return ( <li key={edge.node.slug}> <Link to={ edge.node.slug }><h3>{ edge.node.title }</h3></Link> <div>{ edge.node.description.childMarkdownRemark.excerpt }</div> </li> ) }) } </ul> </div> ) export default IndexPage export const pageQuery = graphql` …
None
HBUTCZOPEFKT const path = require(`path`) exports.createPages = async ({ graphql,
actions: { createPage } }) => { const sources = await graphql(` … `) if (sources.errors) return const posts = sources.data.allContentfulCourse.edges posts.forEach(({ node }) => { createPage({ path: `${node.slug}`, component: path.resolve(`src/templates/blog-post.js`), context: { slug: node.slug } }) }) } औಘ͍ͨ͠$POUFOU5ZQFΛࢦఆ͠·͢ɻ w QBUIϖʔδΛग़ྗ͢Δύεͷࢦఆ w DPNQPOFOUϖʔδΛੜ͢Δࡍʹ͏ςϯ ϓϨʔτͷύεΛࢦఆ w DPOUFYUQBHF2VFSZͷҾͱςϯϓϨʔτ ͷQSPQTʹ͢Λࢦఆ σʔλΛऔಘ͢ΔͨΊͷ(SBQI2-ΫΤϦ ϖʔδੜͷॲཧ
None
UFNQMBUFTCMPHQPTUKT import React from 'react' import { graphql } from
'gatsby' export const pageQuery = graphql` … ` export default (props) => { const { title, description } = props.data.contentfulCourse return ( <div> <h1>{ title }</h1> <div dangerouslySetInnerHTML={{ __html: description.childMarkdownRemark.html }} /> </div> ) } QBHF2VFSZϖʔδʹඞཁͳσʔλΛ(SBQI2-ͷRVFSZʹΑͬͯऔಘ͢ΔͨΊͷͷͰɺ औಘͨ͠σʔλΛίϯϙʔωϯτʹQSPQTͰͯ͠ϖʔδΛੜ͠·͢ɻ औಘ͍ͨ͠$POUFOU5ZQFΛࢦఆ͠·͢ɻ
None
None
None
w +".TUBDL8FC։ൃͷΞʔΩςΫνϟ w Έ߹Θͤࣗ༝ w ϑϩϯτΤϯυͷ৽ٕज़ʹ৮ΕΔ w -FU`T+".TUBDL ·ͱΊ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠