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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
910
GoでWebAssembly
fromunknown
0
1.4k
Goで作る初めてのHTTPサーバー
fromunknown
1
1.8k
NGO APIを支える技術
fromunknown
0
170
Other Decks in Programming
See All in Programming
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
140
型も通る、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
540
Cloudflare is Agents
chimame
0
160
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
880
5分で問診!Composer セキュリティ健康診断
codmoninc
0
930
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
180
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.2k
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
320
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
380
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
320
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
500
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
330
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
440
Site-Speed That Sticks
csswizardry
13
1.4k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
790
It's Worth the Effort
3n
188
29k
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が扱える • スキーマはないのでデータの構造の管理はプログラムで行う •
安定性やデータが増えた時の性能等はいずれまた… • 無料枠があるので、個人開発の選択肢としてありかも
ご清聴ありがとうございました!