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
Golang+Firestore
Search
from-unknown
May 24, 2018
Programming
1
1.3k
Golang+Firestore
Basic about Cloud Firestore and how to use by Golang.
from-unknown
May 24, 2018
Tweet
Share
More Decks by from-unknown
See All by from-unknown
Goで作ったWebAssemblyで画像加工
fromunknown
1
740
GoでWebAssembly
fromunknown
0
1.3k
Goで作る初めてのHTTPサーバー
fromunknown
1
1.6k
NGO APIを支える技術
fromunknown
0
140
Other Decks in Programming
See All in Programming
Ethereum_.pdf
nekomatu
0
470
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
カンファレンスの「アレ」Webでなんとかしませんか? / Conference “thing” Why don't you do something about it on the Web?
dero1to
1
110
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.8k
Vapor Revolution
kazupon
1
140
みんなでプロポーザルを書いてみた
yuriko1211
0
280
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~
yuisakamoto
3
240
cmp.Or に感動した
otakakot
3
210
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
230
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
110
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
200
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
65
11k
Practical Orchestrator
shlominoach
186
10k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Code Review Best Practice
trishagee
64
17k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
GraphQLとの向き合い方2022年版
quramy
43
13k
Gamification - CAS2011
davidbonilla
80
5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Transcript
Go+Firestore
アジェンダ • Firebaseとは • Firestoreとは • データ構造 • Goでインサートする時は •
Goで取得する時は • まとめ
Firebaseって何? • GoogleのモバイルとWebアプリ向けの開発プラットフォーム • 特にモバイルアプリ向けのツールが揃っている ◦ クラッシュレポートやテストラボなど • モバイルアプリ以外にもストレージ、静的ホスティング、DBなどもあ る
• 個人で無料で使える枠がある
Cloud Firestore • Firebaseで提供されているNoSQL型のデータベース • Android、iOS、Web、サーバーサイドから操作可能 • サーバーサイドはJava、Python、Node.js、Go、PHPのSDKが用意 されている •
REST APIやRPCが用意されているため他の言語でも使用可能
Cloud Firestoreの特徴 • NoSQL型で特定のデータ型に特化したDB • FirestoreのイメージとしてはJSON形式のデータを保存して、それを クエリで条件指定して取り出せるデータベース • 1つのJSONがドキュメントと呼ばれる •
ドキュメントの集まりはコレクションと呼ばれる • ドキュメントには更にコレクションをもたせられる ◦ これをサブコレクションという
データ構造例 { [ “2018-05-05 12:00:00”, “2018-05-07 12:00:00” ], “Description” :
“This is a test” …. } 一つのドキュメントに なる
データ構造例 コレクション ドキュメントのID ドキュメント詳細
ドキュメント詳細 配列 オブジェクト メンバー
サブコレクション例 サブコレクション ドキュメントID ドキュメント詳細
GoでFirestoreに接続 bgContext := context.Background() // Use a service account sa
:= option.WithCredentialsFile("./credentials/firestore_credential.json") app, err = firebase.NewApp(bgContext, nil, sa) if err != nil { log.Fatalln(err) } ダウンロードしてきた クレデンシャルを読み込ませて 新規アプリを作るだけ
Goでデータをインサート type Event struct { Name string ... } event
:= &Event{ … } wr, err = client.Collection("event").Set(bgContext, event) structを作って structにデータを詰めて 任意のコレクションに セットするだけ IDの指定が無い場合は 自動採番される AddはIDが既に存在す る場合失敗する Setは上書きする
GoでID指定してデータをインサート type Event struct { Name string ... } event
:= &Event{ … } wr, err = client.Collection("event").Doc(“123”).Set(bgContext, event) IDを指定する場合はDoc() を挟む
Goでサブコレクションにインサート type Event struct { Name string ... } event
:= &Event{ … } wr, err = client.Collection("May").Doc(“123”).Collection("event") .Set(bgContext, event) Docを指定してから更に Collectionを指定する
Goでデータを取得する type Event struct { Name string ... } doc,
err := client.Collection("event").Doc(“123”).Get(bgContext) var event Event doc.DataTo(&event) 取得したいデータのIDを 指定する structに展開する 構造が違うと失敗するので 注意
Goで複数データを取得する type Event struct { Name string ... } iter
:= client.Collection("event").Documents(bgContext) for { doc, err := iter.Next() if err == iterator.Done { break } var event Event doc.DataTo(&event) } まとめて取得する場合は Documentsを使用する iteratorが取得出来るので forで回してデータを 取得する
Goで並べ替えたデータを取得する type Event struct { Name string ... } iter
:= client.Collection("event").OrderBy("TimeStamp", firestore.Asc) .Documents(bgContext) for { doc, err := iter.Next() if err == iterator.Done { break } ... } OrderByで並べ替え可能
Goで並べ替えたデータを取得する type Event struct { Name string ... } iter
:= client.Collection("event").Where("num", ">", 10).Documents(bgContext) for { doc, err := iter.Next() if err == iterator.Done { break } ... } Where句で絞り込み可能
まとめ • Web(JS)やモバイルアプリから直接DB操作が可能 • GoにSDKが提供されているので簡単に使える • JSONを出し入れする感覚でDBが扱える • スキーマはないのでデータの構造の管理はプログラムで行う •
安定性やデータが増えた時の性能等はいずれまた… • 無料枠があるので、個人開発の選択肢としてありかも
ご清聴ありがとうございました!