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
JAMstack_kotohajime.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
IMANISHI TOSHIFUMI
December 07, 2019
Technology
130
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
20260912_スクフェス三河
kgnkhkr
0
380
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
330
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
190
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.7k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
350
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.3k
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
2.7k
CLIライブラリ開発を支える技術
htnabe
0
120
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
160
beyond jj: config & tools ecosystem
indirect
0
480
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
610
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Navigating Team Friction
lara
192
16k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
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 ·ͱΊ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠