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
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
170
New_Sass_Module_System.pdf
toshifumiimanishi
2
910
mercurial_nyuumon.pdf
toshifumiimanishi
0
100
Web制作者のためのSassの参考書.pdf
toshifumiimanishi
3
2.9k
ゆく技術_くる技術.pdf
toshifumiimanishi
0
300
裏CSS.pdf
toshifumiimanishi
0
140
Other Decks in Technology
See All in Technology
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
170
Claude for Google Workspaces ポン出し/claude-for-google-workspace-slide-conversion
emiki
0
13k
Jev の中身は50行で再現できる。でも本物との差はどこにあるのか
hisuzuya
0
230
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
2
690
AIがGISを代替する日:〜すべてをAIが創る時代に、私たちがFOSS4Gに関わる意味〜
lehupa
0
140
Adversary Infrastructure Hunting101
disconinja
0
180
Patterns in AI Driven Software Development
akosma
PRO
0
380
Agent × Maestro で始める モバイル E2E 端末準備からテスト実行・結果確認まで
sansantech
PRO
0
240
Lint の層を組み直した話
bengo4com
1
260
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
200
LLMの知識とAIエージェント
happysamurai294
0
130
なぜAI時代に技術記事を書くのか?どう書くのか? 〜bunの場合〜
kworkdev
PRO
0
1.1k
Featured
See All Featured
Music & Morning Musume
bryan
48
7.5k
Done Done
chrislema
187
17k
Visualization
eitanlees
153
17k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Un-Boring Meetings
codingconduct
0
470
Agile that works and the tools we love
rasmusluckow
331
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
BBQ
matthewcrist
90
10k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
The Invisible Side of Design
smashingmag
301
52k
Faster Mobile Websites
deanohume
310
32k
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 ·ͱΊ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠