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
Golang+Firestore
Search
from-unknown
May 24, 2018
Programming
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Golang+Firestore
Basic about Cloud Firestore and how to use by Golang.
from-unknown
May 24, 2018
More Decks by from-unknown
See All by from-unknown
Goで作ったWebAssemblyで画像加工
fromunknown
1
950
GoでWebAssembly
fromunknown
0
1.5k
Goで作る初めてのHTTPサーバー
fromunknown
1
1.8k
NGO APIを支える技術
fromunknown
0
180
Other Decks in Programming
See All in Programming
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
180
Modernizing iOS Apps
seyfoyun
0
140
最近”作らせてる” ローカルAIアプリの話
akit37
0
530
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
190
sbt 2.0: takeoff
eed3si9n
0
180
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
350
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
330
ActionController meets Protocol Buffers
sorah
1
770
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
2.3k
8年前のNode.jsを動かして分かった、npm installの裏側
keisukeikeda
0
120
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
250
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
160
Featured
See All Featured
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
650
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
GraphQLとの向き合い方2022年版
quramy
50
15k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
440
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
570
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
740
Making the Leap to Tech Lead
cromwellryan
135
10k
How to build a perfect <img>
jonoalderson
1
6.2k
Side Projects
sachag
456
43k
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が扱える • スキーマはないのでデータの構造の管理はプログラムで行う •
安定性やデータが増えた時の性能等はいずれまた… • 無料枠があるので、個人開発の選択肢としてありかも
ご清聴ありがとうございました!