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ではじめるShopify / shopify-uc-kansai-202011
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hidetaka Okamoto
November 19, 2020
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JamstackではじめるShopify / shopify-uc-kansai-202011
Hidetaka Okamoto
November 19, 2020
More Decks by Hidetaka Okamoto
See All by Hidetaka Okamoto
OpenAI APIで API Changelogを要約してみた話 / chatgpt-osaka-1
hideokamoto
0
710
コミュニティ運営から 中の人に変わって感じたこと
hideokamoto
0
140
Developerが Developer Advocateになった話 / dev-rel-meetup-tokyo-71
hideokamoto
0
380
Jamstack開発者のための App Runner入門
hideokamoto
1
550
WordPressでの webサイト制作2022 / ngk2022s
hideokamoto
0
490
JavaScript(TypeScript)で メディアサイトを インフラから構築する方法 / jsconf-jp-2021
hideokamoto
2
4.4k
AWS上でStripeを利用したアプリをより安全にデプロイする方法 /jaws-pankration-2021
hideokamoto
1
250
Shifter Headlessと Headless WordPressの紹介
hideokamoto
0
2.2k
Stripe & Next.js + AWS Amplify で会員 + 定期課金機能 / JP_Stripes20210903
hideokamoto
7
3.3k
Other Decks in Programming
See All in Programming
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
750
テーブルをDELETEした
yuzneri
0
130
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
710
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
2.8k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
500
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
280
メールのエイリアス機能を履き違えない
isshinfunada
0
160
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
340
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
120
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
200
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
110
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
170
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.6k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
480
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
A Soul's Torment
seathinner
6
3.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
240
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
230
How STYLIGHT went responsive
nonsquared
100
6.2k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
JamstackͰ ͡ΊΔShopify Shopify UC Kansai vol.1 Hidetaka Okamoto #ShopifyUC
Target Developer Agency #ShopifyUC
TL;DR • ShopifyͰͷαΠτߏஙLiquidه๏͔APIར༻͕ϝΠϯ • APIར༻ͷ߹ɺJamstackʹ͢ΔͱJavaScript͚ͩͰ࡞ΕΔ • Liquidه๏Λ֮͑ͯ༗ྉThemeൢചΛΊ͟͢ํ๏ • Shopifyύʔτφʔʹͳͬͯ·ͣಈ͔ͯ͠ΈΑ͏ #ShopifyUC
Agenda • ShopifyͰͷϑϩϯτΤϯυͷ࡞Γํ • ։ൃ༻αΠτ / Storefront APIར༻ͷ४උ • Gatsby(React)ͰShopifyͱ࿈ܞͨ͠αΠτΛ࡞Δ
• What’s your favorite style to make the store? #ShopifyUC
Agenda • ShopifyͰͷϑϩϯτΤϯυͷ࡞Γํ • ։ൃ༻αΠτ / Storefront APIར༻ͷ४උ • Gatsby(React)ͰShopifyͱ࿈ܞͨ͠αΠτΛ࡞Δ
• What’s your favorite style to make the store? #ShopifyUC
ߏஙํ๏1 ςʔϚΛߪೖ͢Δ • ετΞ͔ΒΠϯετʔϧ • ແྉ൛Ͱͦͦ͜͜ߴػೳ • ΧελϚΠβʔతͳػೳ • ΧελϚΠζͷࣗ༝ʹ੍ݶ
• αϙʔτ͕ӳޠߴΊ(༗ྉTheme) • Shopify LiteͰͦͦ͑ͳ͍ #ShopifyUC
ߏஙํ๏2 ςʔϚΛࣗ࡞͢Δ • Liquidه๏ + JavaScriptͰ࡞ΕΔ • Tutorialίʔυྫ͕ଟ͍ • ༗ྉςʔϚൢചࢦͤΔ
• Liquidه๏ʹೃછΊΔ͔൱͔͕ਫྮ • Sampleଟ͍͕ɺݱঢ়ӳޠߴΊ • Shopify LiteͰͦͦ͑ͳ͍ #ShopifyUC
ߏஙํ๏3 APIΛͬͯ֎෦ߏங • Shopify API(REST / GraphQL)Λར༻ • LiteͰϑϩϯτΤϯυ͕࡞ΕΔ •
JavaScriptͷจ຺ͰߏஙՄೳ • JamstackͰαΠτ͕࡞ΕΔ͔͕ਫྮ • Shopifyͷ֎ʹͳΔͷͰࢿྉΑΓগͳ͍ • ظతʹอकӡ༻͢ΔલఏʹͳΓ͕ͪ
ShopifyͰͷϑϩϯτΤϯυͷ࡞Γํ • σβΠϯʹ߆Βͳ͍ɾ·ͣΔ͜ͱ͕తͳΒແྉςʔϚ • ࣾͰ։ൃ͕͍͠ͳΒɺ༗ྉςʔϚΛ୳ͯ͠ߪೖ • Liquidه๏ͰͷςʔϚ੍࡞Λ֮͑ͯ༗ྉςʔϚൢചΛࢦ͢ • Jamstackܥ͕ಘҙͳΒShopify LiteʹΓସ͑ͯίετμϯ
#ShopifyUC
Agenda • ShopifyͰͷϑϩϯτΤϯυͷ࡞Γํ • ։ൃ༻αΠτ / Storefront APIར༻ͷ४උ • Gatsby(React)ͰShopifyͱ࿈ܞͨ͠αΠτΛ࡞Δ
• What’s your favorite style to make the store? #ShopifyUC
Shopify Perners • ShopifyΞΧϯτͱผʹొ • ແྉͰ։࢝Մೳ • ΞϑΟϦΤΠτͳͲ • Dev༻ͷγϣοϓ͕ແྉͰ࡞ΕΔ
https://www.shopify.jp/partners #ShopifyUC
#ShopifyUC
https://YOUR-SHOP-NAME.myshopify.com/admin/apps/private/new
https://YOUR-SHOP-NAME.myshopify.com/admin/apps/private/new αΠτͷAPIܥαΠτͷ[ΞϓϦཧ]͔Β • ύʔτφʔͷཧը໘ʹʮΞϓϦཧʯ͋Δ͕ɺͦΕShopifyΞϓϦ͚ • ετΞϑϩϯτAPIͱಉը໘ʹ͋ΔʮAdmin APIʯShopifyΞϓϦ͚ • ্ه2ͭShopifyͷΞϓϦΛ࡞Δ࣌ʹ͏APIͷઃఆͱ֤छใ •
ݖݶ͕͍ͷͰɺؒҧͬͯΣϒαΠτߏஙʹ͏ͱɾɾɾ • ʮStoreͷFrontendͷͨΊͷAPIʯ= ʮετΞϑϩϯτAPIʯͱ֮͑Α͏ • ετΞϑϩϯτAPIApple PayAndroidͷܾࡁʹରԠՄೳʢMobile Buy SDKʣ #ShopifyUC
Agenda • ShopifyͰͷϑϩϯτΤϯυͷ࡞Γํ • ։ൃ༻αΠτ / Storefront APIར༻ͷ४උ • Gatsby(React)ͰShopifyͱ࿈ܞͨ͠αΠτΛ࡞Δ
• What’s your favorite style to make the store? #ShopifyUC
https://www.gatsbyjs.com/ #ShopifyUC
https://www.gatsbyjs.com/ Gatsby -> Reactϕʔεͷ੩తαΠτδΣωϨʔλʔ • APIϑΝΠϧ͔ΒσʔλΛऔΓࠐΈɺ੩తͳHTMLΛ࡞͢Δπʔϧͷ1ͭ • ੩తαΠτͱͯ͠ެ։͢ΔͷͰɺαʔόʔΛ྿Ձʹ͍͢͠ • ϑϩϯτΤϯυͷίʔυJavaScript
(React)Ͱ࣮ • ϓϥάΠϯγεςϜ͕͋Γɺ༗໊Ͳ͜Ζͷσʔλ΄΅ϊʔίʔυͰऔΓࠐΊΔ • औΓࠐΜͩσʔλΛར༻͢ΔͷʹɺGraphQL͕ඞཁɻ • ʮWebαΠτΛReactͰ࡞Γ͍ͨʯ࣌ʹߴ֬Ͱީิʹग़Δπʔϧͷ1ͭ #ShopifyUC
gatsby-config.jsʹଓใΛهड़ module.exports = { siteMetadata: { title: `Gatsby Typescript Starter`,
}, plugins: [ `gatsby-plugin-typescript`, { resolve: `gatsby-source-shopify`, options: { // ετΞͷυϝΠϯ shopName: “example.myshopify.com”, // ετΞϑϩϯτAPIͷΞΫηετʔΫϯ accessToken: “xxxxxxxxxxxxxxxxxx”, }, }, ], } #ShopifyUC
GraphQLͰඞཁͳσʔλ͚ͩऔಘ͢Δ const result = await graphql(` query { allShopifyProduct(sort: {
fields: [title] }) { edges { node { title images { originalSrc } shopifyId handle priceRange { maxVariantPrice { amount } minVariantPrice { amount } } } } } } `)} #ShopifyUC
ͲΜͳσʔλ͕ͱΕΔ͔ςετͰ͖Δػೳ͖ͭ #ShopifyUC
GraphQLͰϩʔυ ReactͰHTMLԽ import * as React from 'react' import Link
from 'gatsby-link' import { graphql } from "gatsby" import DefaultLayout from '../layouts' const Page = ({data}: any) => { return ( <DefaultLayout> <div> <article> <h1>Products</h1> <ul> {data.allShopifyProduct.edges.map(({ node }: any) => ( <li key={node.shopifyId}> {node.images[0] && node.images[0].originalSrc ? ( <img src={node.images[0].originalSrc} width={400} /> ): null} <h3> <Link to={`/product/${node.handle}`}>{node.title}</Link> {" - "}${node.priceRange.minVariantPrice.amount} </h3> <p>{node.description}</p> </li> ))} </ul> </article> <Link to="/">Go back to the homepage</Link> </div> </DefaultLayout> ) } • APIΛୟ͔ͳ͍ • ͯ͢GraphQLܦ༝ • ෳͷαʔϏε / APIΛར ༻ͨ͠߹ʹศརͳ #ShopifyUC
ྫ͑͜Μͳ͍ํ • ͢Ͱʹ͋ΔWordPressαΠτͷσʔ λऔΓࠐΜͰ͏ • ग़ళใͳͲɺ GoogleεϓϨουγʔτͰཧ͠ ͍ͯΔใಡΈࠐΜͰදࣔ • ࠓ͍ͬͯΔπʔϧͦͷ··׆༻
Χʔτܥͷॲཧshopify-buyΛར༻͢Δ
npm i -S \ shopify-buy import * as React from
"react" import {buildClient} from 'shopify-buy' import { Button } from 'antd' … const client = buildClient({ storefrontAccessToken: ‘your_token’, domain: ‘example.myshopify.com', }) const handleCheckout = React.useCallback((variantId: string) => { client.checkout.create() .then(async(checkout) => { const checkoutId = checkout.id await client.checkout.addLineItems( checkoutId, [{ variantId, quantity: 1 }] ) // @ts-expect-error window.open(checkout.webUrl) }) .catch(e => { console.log(e) }) }, [client]) • JavaScriptͰΧʔτૢ࡞ • ײతͳϝιουͰ ShopifyͷAPIΛૢ࡞Մೳ • TypeScriptͳΒ @types/shopify-buyΛ #ShopifyUC
JamstackͳShopifyϑϩϯτΤϯυߏங • ׳Εͯͳ͍ਓʹͱͬͯਖ਼ͨͩͷ • Jamstack / Next.js / Nuxt.js /
Gatsby / GridsomeͳͲʹ׳Ε͍ͯΔਓʹ࿕ใ • ʮطଘͷϦιʔεɾϊϋΛͬͯShopifyͷαΠτߏங͕͍͔ͨ͠൱͔ʯͷબ • طଘͷϦιʔεɾϊϋ͕ͳ͍߹ʹݫ͍͠ • σʔλιʔε͕͋ͪͪ͜ʹࢄΒ͍ͬͯΔ߹ʹ༗༻ʢಛʹGatsby / Gridsomeʣ • σʔλऩूͱॲཧ͕͔ΕΔͷͰɺஈ֊తͳϚΠάϨͳͲൺֱత༰қʹ #ShopifyUC
Agenda • ShopifyͰͷϑϩϯτΤϯυͷ࡞Γํ • ։ൃ༻αΠτ / Storefront APIར༻ͷ४උ • Gatsby(React)ͰShopifyͱ࿈ܞͨ͠αΠτΛ࡞Δ
• What’s your favorite style to make the store? #ShopifyUC
ECΔ͚ͩͳΒ STORESBASE͋Δ • STORES / BASEແྉ • UIαϙʔτຊ͚ • ༗ྉϓϥϯͰShopifyͱಉ͔
ͦΕΑΓ྿Ձʹ͑Δ • ͦΕͰShopifyΛ͏ͷʁ
ٸ͢ΔSaaSͷڞ௨߲ɿ APIΤίϊϛʔ
API͕ ։͔Ε͍ͯΔ߹ • ίʔυΛॻ͚ɺͳΜͰͰ͖Δ • ػೳʹΑͬͯαϙʔτઌ͕มΘΔ͜ͱ • ࠨ + ʮͲ͏ศརʹ֦ு͍͔ͯ͘͠ʯ
• ࠨ + ֦ுػೳͷ։ൃൢച API͕ ։͔Ε͍ͯͳ͍߹ • Ͱ͖Δ͜ͱ = ϕϯμʔͷϦϦʔε༰ • ͳʹ͔͋ΕϕϯμʔʹରԠґཔ • ʮγεςϜΛͲ͏ૢ࡞͢Δ͔ʯ • ӡ༻ߦ / ઃఆߦͱͯ͠ͷۀ #ShopifyUC
Share the knowledge ʢࣦഊஊʂʣ
None
ॻ͘ / ͢͜ͱͰΑΓਂֶ͍ͼʹͳΔ • ࢼ͢ɾಈ͔͢ஈ֊Ͱʮͳͥಈ͍͔ͨɾͳࣦͥഊ͔ͨ͠ʯΛߟ͑ʹ͍͘ • ϫʔΫγϣοϓͰ৮ͬͯຬͯ͠ɺͦͷޙ৮͍ͬͯͳ͍ͷɻ͋Γ·ͤΜ͔ʁ • Ξτϓοτ͢ΔͨΊʹɺʮͬͨ͜ͱΛݴޠԽ͢Δʯඞཁ͕͋Δ •
ॻ͖ग़ͯ͠ΈΔ͜ͱͰɺʮ࣮Θ͔͍ͬͯͳ͔ͬͨ͜ͱʯ͕ݟ͑ͯ͘Δ • ʮΈΜͳॻ͔ͳ͍ʯ͚ͩͰɺʮΈΜͳࣦഊ֮ͯ͑ͯ͠Δʯ • ࣦഊΛॻ͘ = ࣦഊͷৼΓฦΓ͕Ͱ͖͍ͯΔ • ͳΜͰ͍͍͔Βɺࢼͨ͜͠ͱͷৼΓฦΓΛPublishing͠Α͏ʂ #ShopifyUC
ͦ͏͍͑ࠓ͜Μͳͷ͕͋Γ·ͨ͠Ͷ #ShopifyUC #ShopifyUC
ͦ͏͍͑ࠓ͜Μͳͷ͕͋Γ·ͨ͠Ͷ #ShopifyUC #ShopifyUC
ͦΖͦΖ͜Μͳͷ͋Γ·ͨ͠Ͷ #ShopifyUC
JamstackͳShopifyϑϩϯτΤϯυߏங • ׳Εͯͳ͍ਓʹͱͬͯਖ਼ͨͩͷ • Jamstack / Next.js / Nuxt.js /
Gatsby / GridsomeͳͲʹ׳Ε͍ͯΔਓʹ࿕ใ • ʮطଘͷϦιʔεɾϊϋΛͬͯShopifyͷαΠτߏங͕͍͔ͨ͠൱͔ʯͷબ • طଘͷϦιʔεɾϊϋ͕ͳ͍߹ʹݫ͍͠ • σʔλιʔε͕͋ͪͪ͜ʹࢄΒ͍ͬͯΔ߹ʹ༗༻ʢಛʹGatsby / Gridsomeʣ • σʔλऩूͱॲཧ͕͔ΕΔͷͰɺஈ֊తͳϚΠάϨͳͲൺֱత༰қʹ #ShopifyUC
#ShopifyUC