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
今日から始めるAmplify DataStore
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sutetotanuki
June 23, 2020
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
今日から始めるAmplify DataStore
sutetotanuki
June 23, 2020
More Decks by sutetotanuki
See All by sutetotanuki
数案件を同時に進行するためのコンテキスト整理術
sutetotanuki
2
430
高速開発のためのコード整理術
sutetotanuki
1
1k
Next.js 16の新機能 Cache Components について
sutetotanuki
0
660
Vercel AI SDK を使って Next.js で AIアプリケーションを 作成する方法のご紹介
sutetotanuki
0
1.9k
WEBエンジニア向けAI活用入門
sutetotanuki
0
1.1k
ブラウザ上で実行され、 AIアシスタント付きデータベース postgres.new を触ってみた
sutetotanuki
0
580
今時のCookie事情
sutetotanuki
0
750
高速案件立ち上げで使われるマッハテンプレートのフロントエンド技術選定
sutetotanuki
2
2.1k
Core Web Vitals を改善する Next.js の機能群
sutetotanuki
1
2.7k
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
480
The SEO Collaboration Effect
kristinabergwall1
1
520
Mobile First: as difficult as doing things right
swwweet
225
10k
It's Worth the Effort
3n
188
29k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Designing Powerful Visuals for Engaging Learning
tmiket
1
480
Are puppies a ranking factor?
jonoalderson
1
3.8k
Tell your own story through comics
letsgokoyo
1
1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
740
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
Transcript
ాক ࠓ͔Β࢝ΊΔ"NQMJGZ%BUB4UPSF
ࣗݾհ ాক wαʔόʔαΠυΤϯδχΞ w"84ߏங ϞόΠϧΞϓϦͷόοΫΤϯυ"1* w"OESPJE /&8 w͖ͳ"84αʔϏε
w4 &$4 wۀͰ༻͢Δݴޠ w3VCZ (P 1ZUIPO +BWB4DSJQU ,PUMJO
ࠓ͢ࣄ w"84"NQMJGZ%BUB4UPSFͱʁ wجຊతͳ͍ํ wར༻্ͷҙ wϢʔεέʔε
AWS Amplify DataStore ͱʁ
"NQMJGZͱ Amplifyͱ
"NQMJGZ
"84"NQMJGZ$POTPMF ϗεςΟϯά
"84"NQMJGZ$-* $-*Ͱ"84ϦιʔεΛ࡞ͨ͠Γ ίʔυΛੜ͢Δ
"84"NQMJGZ-JCSBSJFT ΞϓϦέʔγϣϯʹΈࠐ·Ε ΔϥΠϒϥϦ܈
"NQMJGZ%BUB4UPSFͱ Amplify DataStore ͱ
"NQMJGZ%BUB4UPSFͷಛ wநͷߴ͍σʔλૢ࡞"1* wΦϑϥΠϯରԠ wσʔλڝ߹ͷ͠͞Λ͋Δఔܰݮ
%BUB4UPSF"1* w%BUB4UPSFTBWF w%BUB4UPSFRVFSZ w%BUB4UPSFEFMFUF w%BUB4UPSFPCTFSWF
%BUB4UPSF"1*$36% w%BUB4UPSFTBWF w%BUB4UPSFRVFSZ w%BUB4UPSFEFMFUF w%BUB4UPSFPCTFSWF ొɾߋ৽
औಘ আ
%BUB4UPSF"1*ϦΞϧλΠϜߋ৽ w%BUB4UPSFTBWF w%BUB4UPSFRVFSZ w%BUB4UPSFEFMFUF w%BUB4UPSFPCTFSWF ߋ৽௨
"NQMJGZ%BUB4UPSFσʔλͷྲྀΕ
"NQMJGZ%BUB4UPSFσʔλͷྲྀΕ
جຊతͳ͍ํ
جຊతͳखॱ w"NQMJGZ"QQΛ࡞ w(SBQI2-εΩʔϚΛ࡞ wεΩʔϚ͔ΒίʔυΛࣗಈੜɹ wΞϓϦέʔγϣϯͷΈࠐΈ
Πϝʔδ
"NQMJGZ$-*ΛΠϯετʔϧ $ npm install -g @aws-amplify/cli
"NQMJGZ"QQΛ࡞ $ amplify init w"NQMJGZʹඞཁͳϑΝΠϧΛੜ wରԠ͍ͯ͠ΔϑϨʔϜϫʔΫΛݕ
"1*Λ࡞ $ amplify add api w௨৴ํࣜΛબͿ ࠓճ(SBQI2- wೝূํࣜΛબͿ
ࠓճ$PHOJUPΛબ
(SBQI2-εΩʔϚ enum TodoStatus { WAITING DONE } type Todo
@model @auth(rules: [{allow: owner}]){ id: ID! owner: String title: String items: [TodoItem] @connection(name: "TodoItems") status: TodoStatus } type TodoItem @model { id: ID! owner: String content: String todo: Todo @connection(name: "TodoItems") status: TodoStatus }
(SBQI2-εΩʔϚ enum TodoStatus { WAITING DONE } type Todo
@model @auth(rules: [{allow: owner}]){ id: ID! owner: String title: String items: [TodoItem] @connection(name: "TodoItems") status: TodoStatus } type TodoItem @model { id: ID! owner: String content: String todo: Todo @connection(name: "TodoItems") status: TodoStatus } ྻڍܕ 50%0ຊମ 50%0ΞΠςϜ
(SBQI2-εΩʔϚόοΫΤϯυ type Todo @model @auth(rules: [{allow: owner}]){ NPEFMτϥϯεϑΥʔϜΛ͚ͭΔ͜ͱͰ "NQMJGZ͕ඞཁͳ"84ϦιʔεΛ࡞͢Δͷʹ
ඞཁͳίʔυΛੜ͢Δ
(SBQI2-εΩʔϚݖݶཧ type Todo @model @auth(rules: [{allow: owner}]){ owner: String
BVUIτϥϯεϑΥʔϜΛ͚ͭΔ͜ͱͰɺ͜ͷϞσϧ ʹΞΫηεͰ͖ΔݖݶΛ͚ͭΔ͜ͱ͕Ͱ͖Δ ࠓճϞσϧͷ࡞ऀͷΈ͕͜ͷϞσϧΞΫηε Ͱ͖ΔΑ͏ʹ͍ͯ͠Δ
(SBQI2-εΩʔϚؔ࿈ type Todo @model @auth(rules: [{allow: owner}]){ items: [TodoItem]
@connection(name: "TodoItems") type TodoItem @model { todo: Todo @connection(name: "TodoItems") DPOOFDUJPOτϥϯεϑΥʔϜͰϞσϧಉ࢜ͷ ؔ࿈Λઃఆ͢Δ͜ͱ͕Ͱ͖Δ
ϞσϧʹඞཁͳϑΝΠϧΛੜ $ amplify codegen models w(SBQI2-ͷεΩʔϚ͔ΒΞϓϦέʔγϣϯ ͕༻͢ΔϞσϧͷίʔυΛࣗಈੜ w(SBQI2-ͷίʔυΛࣗಈੜ
"84ڥΛߏங $ amplify push w"84ϦιʔεΛ࡞͠ɺόοΫΤϯυΛߏங ͢Δ
"NQMJGZ-JCSBSJFTΛΠϯετʔϧ $ yarn add aws-amplify aws-amplify-vue
$PHOJUPೝূ <template> <amplify-authenticator></amplify-authenticator> </template> ೝূํ๏ʹ$PHOJUPΛબΜͰ͍ΔͷͰ$PHOJUPͰ ϩάΠϯग़དྷΔύʔπΛΈࠐΉ $PHOJUPೝূࡁΈͷϢʔβʔ͕σʔλΛొ͢Δͱ BVUIτϥϯεϑΥʔϜͷޮՌͰίʔυΛ ॻ͔ͳͯࣗ͘ಈʹϞσϧอଘ࣌ʹઃఆ͞ΕΔ
Ϟσϧͷอଘ await DataStore.save( new Todo({ title: this.todoTitle, status: TodoStatus.WAITING
}) ); %BUB4UPSFTBWFʹϞσϧͷΠϯελϯεΛ͠ σʔλΛอଘ͠·͢
ؔ࿈ͷ͋ΔϞσϧͷอଘ async createTodoItem(todo) { await DataStore.save( new TodoItem({ todo:
todo }) ); DPOOFDUJPOτϥϯεϨʔλʔΛઃఆͨ͠ ϑΟʔϧυʹؔ࿈͢ΔϞσϧͷΠϯελϯεΛ ઃఆͯ͠อଘ͢Δ
ϞσϧͷσʔλΛऔಘ %BUB4UPSFRVFSZʹϞσϧΛ͠ɺ σʔλΛऔಘ͠·͢ async fetchTodos() { this.todos = await
DataStore.query(Todo, Predicates.ALL); },
ϞσϧͷσʔλΛݕࡧ %BUB4UPSFRVFSZʹୈҰҾʹϞσϧΛΘͨ͠ ୈ̎Ҿʹݕࡧ݅Λࢦఆ͢Δ ্هྫTUBUVT͕8"*5*/(ͷͷ͚ͩΛ நग़͢Δ this.todoItems = await DataStore.query(
TodoItem, c => c.status("eq", TodoStatus.WAITING) )
ؔ࿈ͷ͋ΔϞσϧͷσʔλΛݕࡧ GJMUFSͰؔ࿈Ϟσϧͷ*%͕ઃఆ͞Ε͍ͯΔσʔλ͚ͩ ΛߜΓࠐΉ async fetchTodoItems(todo) { this.todoItems = (
await DataStore.query(TodoItem, c => c.status("eq", TodoStatus.WAITING)) ).filter(item => item.todo && item.todo.id === todo.id); },
Ϟσϧͷߋ৽ͷϦΞϧλΠϜ௨ %BUB4UPSFPCTFSWFͷୈҰҾʹϞσϧΛΘͨ͠ ߋ৽͕͋ͬͨ߹ͷίʔϧόοΫΛઃఆ͢Δ DataStore.observe(Todo).subscribe(() => { this.fetchTodos(); });
Ϟσϧͷߋ৽ await DataStore.save( TodoItem.copyOf(todoItem, updated => { updated.status =
TodoStatus.DONE; }) ); ϞσϧͷΠϯελϯεΠϛϡʔλϒϧͳͷͰɺ ίϐʔ͠ΠϯελϯεͷΛ্ॻ͖ͨ͠ͷΛ อଘ͢Δ͜ͱͰߋ৽͢Δ
Ϟσϧͷσʔλͷআ await DataStore.delete(Todo, Predicates.ALL); %BUB4UPSFEFMFUFϝιουʹϞσϧΛ ͢͜ͱͰআ͢Δ
ҙ
ϩʔΧϧσʔλͷΫϦΞ async logout({ commit }) { await DataStore.clear(); }
ϩάΞτ࣌ʹϩʔΧϧσʔλΛΫϦΞ͢Δඞཁ ͕͋Δɻ ΫϦΞ͠ͳ͍ͱผͷϢʔβʔͰϩάΠϯͨ͠߹ ʹɺϩʔΧϧσʔλ͕ࠞࡏͯ͠͠·͏
Ϣʔεέʔε
Ϣʔεέʔε wϦΞϧλΠϜߋ৽͕ඞཁͳΞϓϦ wήʔϜɺνϟοτ wωοτϫʔΫ͕ෆ҆ఆͳॴͰ͏ ΞϓϦ
None