SlideShare a Scribd company logo
1 of 38
JavaScriptから利用する
Firebase
@shimokawa
2016/03/08
下川拓治
@shimokawa
福岡 → 京都 → 東京
最近はWebアプリ開発が多い
Ruby, JavaScript, Java, C/C++
目次
• データの読み書き
• ホスティング
• ユーザ認証
• オフライン対応
• 実際に使ってみての感想など
データの読み書き
使用準備
<script src='https://cdn.firebase.com/js/client/2.4.1/firebase.js'></script>
クライアントライブラリをインクルード
Firebaseのデータは1つのJSONオブジェクト
{
"messages" : {
"-KBmsNUshgxhTjcjFi-7" : {
"name" : "shimo",
"text" : "こんにちは"
},
"-KBmsPV_vfbOfsRKNqQr" : {
"name" : "shimo",
"text" : "こんばんは"
}
}
}
データベースの参照の取得
// JSONオブジェクトのルートの参照
var rootRef = new Firebase(“https://<YOUR-APP-ID>.firebaseio.com/“);
// ルートの直下にあるmessagesキー参照
var messageRef = rootRef.child("messages");
// ルートの直下にあるmessagesキー参照
var messagesRef = new Firebase(“https://<YOUR-APP-ID>.firebaseio.com/messages");
参照は、JSONツリー上の特定の場所を指し示すもの
データの読み書きするにはまず参照を取得する
データの保存方法
• 参照オブジェクトのメソッドを使う
• set()
• update()
• push()
• transaction()
set()
• 基本的な保存方法
• 参照が示すキーに対する値全体を上書きする
• 参照が示すキーが存在しない場合はキーごと作成する
{
"users" : {
"taro" : {
"name" : "Taro",
"age" : 30
}
}
}
var userRef = new Firebase(“https://<YOUR-APP-ID>.firebaseio.com/users/taro");
userRef.set({name: "Taro", age: 30});
保存後のデータベースの内容
push()
• 参照する場所の直下に一意なキーを生成した上で、
そのキーに対して値を保存する
• キーはタイムスタンプから作られるので、時間順になる
• 参照が示す場所にリストデータを保存するのに使う
var messagesRef = new Firebase("https://<YOUR-APP-ID>.firebaseio.com/messages");
messagesRef.push({name: "Taro", text: “Goodbye"});
{
"messages" : {
"-KBmsNUshgxhTjcjFi-7" : {
"name" : "Taro",
"text" : "Hello"
},
"-KBmsPV_vfbOfsRKNqQr" : {
"name" : "Taro",
"text" : "Goodbye"
}
}
}
更新後のデータベースの状態
自動生成される
データの読み出し方法
• 参照にコールバック関数を登録する
• on(“イベント種別”, callback)
• once(“イベント種別”, callback)
• イベントの種類
• value
• child_added
• child_changed
• child_removed
• child_moved
on(“value”, callback)
• 参照が示す場所以下の値をまるごと取得する
• その後、参照先のデータが更新されるたびに
繰り返しコールバック関数に更新後のデータが渡される
{
"messages" : {
"-KBmsNUshgxhTjcjFi-7" : {
"name" : "Taro",
"text" : "Hello"
},
"-KBmsPV_vfbOfsRKNqQr" : {
"name" : "Taro",
"text" : "Goodbye"
}
}
}
var ref = new Firebase("https://<YOUR-APP-ID>.firebaseio.com/messages");
ref.on("value", function(snapshot) {
console.log(snapshot.val());
});
データベースの内容
snapshot.val()
コールバックに渡されるのはDataSnapshot型のオブジェクト
https://www.firebase.com/docs/web/api/datasnapshot/
on(“child_added”, callback)
• 参照の子ノードを一つずつ順番に取得する
• 典型的には、push()で作られたリストを指し示す参照から、
そのリストの項目を順に取得する
• 既存のデータがある場合は、一通りデータを読み出す
• その後、子ノードが追加されるたびに、コールバックが
呼ばれる
var ref = new Firebase("https://<YOUR-APP-ID>.firebaseio.com/messages");
ref.on(“child_added", function(snapshot) {
console.log(snapshot.val());
});
データベースの内容
{
"messages" : {
"-KBmsNUshgxhTjcjFi-7" : {
"name" : "Taro",
"text" : "Hello"
},
"-KBmsPV_vfbOfsRKNqQr" : {
"name" : "Taro",
"text" : "Goodbye"
}
}
}
snapshot.val()
その他のイベント
• on(“child_changed”, callback)
• 参照の子ノードの値が変化した時にコールバックが呼ばれる
• on(“child_removed”, callback)
• 参照の子ノードが削除された時にコールバックが呼ばれる
• on(“child_moved”, callback)
• リストデータ内での子ノードの位置が変化したら呼ばれる
• リスト内での順序が変わるのはpriorityが変化した時
サンプル:チャットのようなもの
https://wiiu.firebaseapp.com/toy_chat.html
リストデータ取得時の条件追加
• 並び順の指定
• orderByChild()
• orderByKey()
• orderByValue()
• orderByPriority()
• 取得件数の制限
• limitToFirst()
• limitToLast()
• 範囲の指定
• startAt()
• endAt()
• equalTo()
ref.orderByPriority()
.startAt(100)
.limitToFirst(20)
.once('value', function(snapshot) {
console.log(snapshot.val());
});
使用例
サンプル:
https://wiiu.firebaseapp.com/pagination.html
過去のメッセージを少しずつ取得するよう修正したもの
ホスティング
ホスティング
• HTMLファイルをFirebaseのサーバに置いて公開できる
• https://{アプリケーションID}.firebaseapp.com
• 有料で独自ドメインにできる
先ほどのサンプルもこれを使っています
ホスティング: 手順
$ npm install -g firebase-tools
$ firebase init
$ firebase deploy
コマンドラインツールをインストールする
プロジェクトのディレクトリを初期化する
使用するFirebaseアプリケーションを選択する
初回実行時には先にログインするよう求められる
プロジェクトを公開する
https://{アプリケーションID}.firebaseapp.com に公開される
firebaseコマンドが使えるようになる
設定ファイル firebase.json と、HTMLファイル等を置くディレクトリが作成される
ユーザー認証
セキュリティに関するトピック
• ユーザ認証
• Eメール&パスワード
• OAuth (Facebook, Twitter, GitHub, Google)
• 匿名
• カスタム
• アクセス権限の設定
• 入力データの検証
使用準備
Login & Auth ページの Email & Passwordにある
Enable Email & Password Authentication にチェックを入れる
認証機能を使ったサンプル
https://wiiu.firebaseapp.com/auth_required.html
画面構成と使用するAPI
• ユーザ登録画面
• createUser() を使ってユーザを作成
• ログイン画面
• authWithPassword() を使ってログイン処理
• 認証が必要な画面
• getAuth() を使ってログイン中か否かをチェック
その他のユーザー認証関連API
unauth() ログアウト
changeEmail() メールアドレス変更
changePassword() パスワード変更
resetPassword() パスワードのリセット
removeUser() ユーザーの削除
オフライン対応
var ref = new Firebase(‘https://<YOUR-APP-ID>.firebaseio.com/.info/connected');
ref.on("value", function(snap) {
if (snap.val() === true) {
console.log("online");
} else {
console.log("offline");
}
});
• 自分のオンライン状態を変化を検知
var lastOnlineRef = new Firebase("users/taro/lastOnline");
lastOnlineRef.onDisconnect().set(Firebase.ServerValue.TIMESTAMP);
• 接続が切れた時に値を更新
• オフライン中にもデータの保存ができて、オンライン
復帰時にサーバと同期
実際に使ってみて
• 使いはじめの頃はRDBと比較してしまう
• 逆順にソートできないの? とか
• 制約はあるが、使ってみるとわりと何とかなる
• データの蓄積よりリアルタイム性のある情報のやり取り向き
• ユーザー認証やオフライン対応の機能はWebアプリを
作る上でとても便利
リンク
• 今回のサンプルアプリ
• https://wiiu.firebaseapp.com
• サンプルアプリのソース
• https://github.com/takuji/firebase_demo
終
おまけ
APIがPromise化
https://www.firebase.com/blog/2016-01-21-keeping-our-promises.html
APIのレスポンスはもっぱらコールバック関数で受け取っていたのが
、
一部のAPIの戻り値がPromiseになった。
小技:自動生成されるキーをデータに入れる
空push()してset()
var messagesRef = new Firebase("https://<YOUR-APP-ID>.firebaseio.com/messages");
var messageRef = messagesRef.push();
messageRef.set({id: messageRef.key(), name: "Taro", text: “Goodbye"});
{
"messages" : {
"-KBmsNUshgxhTjcjFi-7" : {
"id" : "-KBmsNUshgxhTjcjFi-7",
"name" : "Taro",
"text" : "Hello"
}
}
}
更新後のデータベースの状態

More Related Content

What's hot

ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回Naoyuki Yamada
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティスAkihiro Kuwano
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Shinsuke Sugaya
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Daisuke Kikuchi
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...Amazon Web Services Japan
 
Embulkを活用したログ管理システム
Embulkを活用したログ管理システムEmbulkを活用したログ管理システム
Embulkを活用したログ管理システムAkihiro Ikezoe
 
20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geodeMasaki Yamakawa
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsNaoyuki Yamada
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成Shinsuke Sugaya
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
EmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてEmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてSatoshi Akama
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
Introduction to DocumentDB
Introduction to DocumentDBIntroduction to DocumentDB
Introduction to DocumentDBTakekazu Omi
 

What's hot (20)

Elasticsearch at Makuake
Elasticsearch at MakuakeElasticsearch at Makuake
Elasticsearch at Makuake
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
AWS Black Belt Tech Webinar 2016 〜 Amazon CloudSearch & Amazon Elasticsearch ...
 
Embulkを活用したログ管理システム
Embulkを活用したログ管理システムEmbulkを活用したログ管理システム
Embulkを活用したログ管理システム
 
20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geode
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
EmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてEmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについて
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
Introduction to DocumentDB
Introduction to DocumentDBIntroduction to DocumentDB
Introduction to DocumentDB
 
Mongodb
MongodbMongodb
Mongodb
 

Viewers also liked

デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付きMayumi Narisawa
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学びMasaru Matsuo
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Yuuki Takezawa
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3Fumiya Sakai
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチKazuaki KURIU
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Fumiya Sakai
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうSyouta Tada
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack botKazuaki KURIU
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Futoshi Endo
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説Fumiya Sakai
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク LaravelMasashi Shinbara
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントFumiya Sakai
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With LaravelTakumi Yoshida
 

Viewers also liked (20)

デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
Laravel の学び方と得られる学び
Laravel の学び方と得られる学びLaravel の学び方と得られる学び
Laravel の学び方と得られる学び
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
3 tips of Laravel
3 tips of Laravel3 tips of Laravel
3 tips of Laravel
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack bot
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク Laravel
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
 

Similar to JavaScriptから利用するFirebase

勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
プロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリプロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリYusuke Muraoka
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205Toshi Harada
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch dbEiji Kuroda
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
Elasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめElasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめ朋哉 池田
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-uedayou
 
JSON Based Web Services
JSON Based Web ServicesJSON Based Web Services
JSON Based Web ServicesToru Yamaguchi
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Shinichi Tomita
 

Similar to JavaScriptから利用するFirebase (18)

勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Zabbix API
Zabbix APIZabbix API
Zabbix API
 
プロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリプロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリ
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
Elasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめElasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめ
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
Haikara
HaikaraHaikara
Haikara
 
Mongodb 紹介
Mongodb 紹介Mongodb 紹介
Mongodb 紹介
 
実践Realm
実践Realm実践Realm
実践Realm
 
JSON Based Web Services
JSON Based Web ServicesJSON Based Web Services
JSON Based Web Services
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
 

JavaScriptから利用するFirebase

Editor's Notes

  1. JavaScriptから利用するFirebaseというタイトルで、お話させていただきます。
  2. 私は下川拓治と申します。 株式会社マナボで開発の仕事をしています。 主にRailsアプリの開発をしていまして、その他にJavaやGoのサーバのお世話をしています。
  3. 今回の話の内容はこのようになっています。 はじめにFirebaseに対してJavaScriptでデータの読み書きをする方法について説明します。 次に、Firebaseを使ったWebアプリをホスティングする機能が提供されているので、その手順を説明します。 そのあと、セキュリティ関連トピックのうち、特にJavaScriptを使う部分としてユーザ認証周りについて話をします。 最後に、日頃Railsアプリを開発している人間が初めてFirebaseを使ってみて感じた事などを少しお話ししたいと思います。
  4. Webページからfirebaseを使うには、まずクライアントライブラリをインクルードします。
  5. 次に、Firebaseに保存されるデータがどういうものなのかを説明します。 Firebaseに保存されるデータは、一つの大きなJSONオブジェクトです。
  6. データを操作するにはまずJSONオブジェクト場所を表す参照を取得します。 ルート直下のmessagesキーの参照は、ルートの参照のchild()メソッドを使ってこのように書けます。 URLで直接messagesへの参照を取得することも可能です。
  7. データの保存に関する操作にはこれらの4つがあります。
  8. set()は一番基本的な保存方法です。 参照が指し示す場所を引数に与えられた値で上書きします。
  9. コード例です。 ユーザーの情報をセットしています。
  10. pushは参照直下に値を保存するのではなく、一意なキーを生成して、参照直下にはそのキーが入り、その下に値が保存されます。 キーはタイムスタンプから作られ、pushするたびに
  11. コード例です。 リストデータと言っても、構造的にはオブジェクトで、キーが時系列になっているというだけです。
  12. 値を取得するにはonメソッドを使ってコールバックを登録します。 onceメソッドはそのonメソッドの特殊版になります。 イベントの種類にはこの5つがあります。 参照が指す場所の何を知りたいのかによって使い分けます。
  13. まずon()メソッドにvalueイベントを指定するデータの取り方を説明します。
  14. コード例です。 ここではmessagesキーというリストデータをまるごと読み取ろうとしています。 最初に一度データを取得した後、新しいメッセージが追加されても、既存のメッセージの文面が更新されても、コールバックが呼び出されます。
  15. 次はchild_addedイベントです。 valueとの違いは、子ノードを一つずつに分けて個別にコールバックを呼び出すところです。
  16. (実演はしない)
  17. チャットメッセージ一覧のようなリストデータを取得したい時に、並び順を変えたり、取得する件数を絞ったり、条件を満たすものだけを取得するようにもできます。 コールバックを設置する前に
  18. 10:00
  19. 11:00
  20. push()を使うと、キーが自動的に生成されますが、値の方にIDとしてこの値を含めておくと、後でデータを削除したい時にIDの取得が簡単になって便利です。 それにはまず引数なしでpush()を実行し、キーの生成だけを済ませます。 そしてそのキーの値を、セットするオブジェクトのidキーとして含めることができます。