FirebaseΛͬͨαʔόʔϨεWebΞϓϦέʔγϣϯ։ൃKIHARU SASAKI2016.OctServerlessConf TOKYO
View Slide
Freelancebump.hatenablog.com@bump_of_kiharu⡟ղ加ֹכ,JIBSV4BTBLJ崧׃ךؿٗٝزؒٝسؒٝآص،ԍ"OHVMBS7VF"84'JSFCBTF4*FS̔ꆃ輐禸؝ٝ؟ٕ̔8FCرؠ؎ش̔崧׃ ➙؝؝
What is Firebase?'JSFCBTFהכ
'JSFCBTFהכ2011ɹ؟٦ؽأ㨣2014ɹ(PPHMFח״顠 2016ɹ#BB4ך倜فٓحزؿؓ٦ي խխխխה׃ג鹌⻉BaaS(Backend as a Service)♰➂⟃♳ךركٗحػ٦ָⵃ欽
8FC"QQדⵃ欽ׅ'JSFCBTFך⚺ז؟٦ؽأ"VUI؟٦غ٦؟؎سך涪搀׃חծぐفٗغ؎تךِ٦ؠ٦钠鏾ֶ״ןِ٦ؠ٦盖椚遤ֲ)PTUJOHإُؗ،זؚٗ٦غٕطحزٙ٦ؙ⢪欽׃ծؐؑـٌغ؎ٕؐؑـך،فٔ侧猱דرفٗ؎4UPSBHF歗⫷ծ갈㡮ծ⹛歗זוծ؝ٝذٝخך،حفٗ٦س⥂㶷ֶ״ןر٦ةך《䖤遤ֲ3FBMUJNF%#䱸竲ׁגְׅץגךؙٓ؎،ٝزח㼎׃ծر٦ةך⥂㶷הず劍ٔ،ٕة؎يד㹋植ׅ
'JSFCBTFךך➭؟٦ؽأ GPS.PCJMF"QQT"OBMZUJDTٌغ؎ٕ欽،شٔذ؍ؙأ/PUJDBUJPOQVTI鸐濼5FTU-BC暟椚畭劣ח״"OESPJE،فٔךذأز㹋倵"E.PC.PCJMF"QQ欽䎢デ邌爙3FNPUF$POH鏣㹀ػًٓ٦ةח״،فٔך⹛⡲ؕأةو؎ؤ%ZOBNJD-JOLT،فٔך؎ٝأز٦ٕ剣搀חַַ׆،فٔⰻך暴㹀皘䨽פ钷㼪$SBTI3FQPSUJOH،فٔךؙٓحءُ䞔㜠 ꧊׃ծ䕦갟䏝瘝ךⴓ匿遤ֲ
Overview؟٦ؽأ嚊銲
%&.0bit.ly/demo-chat'JSFCBTFך$PEFMBCדⰕׁגְ؝٦س♧鿇㢌刿׃ג⢪欽׃גְתׅ
3FBMUJNF%BUBCBTF 0OMJOF0JOF๏ 侧ىٔ猱⟃ⰻחⰋגךؙٓ؎،ٝزחず劍๏ 䗁䌓䖓ח荈⹛涸חر٦ةず劍๏ ؔؿٓ؎ٝ儗ך⥂㶷갫笝䭯ׁؔؿٓ؎ٝ儗ؔٝٓ؎ٝ儗ؔٝٓ؎ٝ䗁䌓๏ ر٦ةך⥂㶷ָ〳腉ٗ٦ٍٕؕؗحءُ๏ ِ٦ؠ٦ָ乼⡲竰竲ֿׅהָ〳腉๏ ؔٝٓ؎ٝ朐䡾ך㢌刿嗚濼ָ〳腉侧ىٔ猱⟃ⰻדず劍ؔؿٓ؎ٝ儗ر٦ة⥂䭯
3FBMUJNF%BUBCBTF /P42-EBUBCBTF๏ /P42-,74๏ Ⰻر٦ةאך+40/ח呓秛๏ ر٦ة圓鸡ָךתת3&45"1*ח๏ ر٦ةך،ؙإإٔ٦ٕ鏣㹀〳腉 إُؗٔذ؍ٕ٦ٕ{ "users": { "uid001": { "name": "Fujiwara" } }, "messages": { "id-‐001": { "name": "Fujiwara", "text": "hello!" }, ...... } }
3FBMUJNF%BUBCBTF %BUBBDDFTT๏ ر٦ةך刿倜כծ鷄⸇٥㢌刿٥ꤐ欽"1*⢪欽๏ ر٦ةך朐䡾㢌⻉כぐ؎كٝز飑铣׃ג嗚濼๏ ♧鿇ך"1*כ1SPNJTF鵤ׅ๏ زٓٝؠؙءّٝ㼎䘔var db = firebase.database(); var ref = db.ref('messages'); ref.push({ name: "Sasaki", text: "Hello world" }).then(function() { // do something }).catch(function(err) { // do something });【データ追加 例】
3FBMUJNF%BUBCBTF 2VFSJFT๏ ⚛ן갫ծ《䖤⟝侧ծ眔㔲䭷㹀遤ֲًاحسⵃ欽ׅ๏ ًاحسثؑ٦ٝד勴⟝醱侧籬־ג䭷㹀〳腉๏ POPPODFر٦ة㢌刿ך؎كٝزٔأش٦ך涫ꐮ٥鍑ꤐvar db = firebase.database(); var ref = db.ref('messages'); ref.limitToLast(50).on('child_added', function(data) { // do something });【例】
3FBMUJNF%BUBCBTF 3&45GVM"1*curl 'https://.firebaseio.com/users/uid001.json'【GET例】{ "users": { "uid001": { "name": "Fujiwara" } }, ...... }๏ ر٦ةךꥡ㾴圓鸡ח״ծぐر٦ةח♧䠐ך63-ָ♷ִծ3&45ؒٝسه؎ٝزה׃ג⢪欽דֹ
"VUIFOUJDBUJPO๏ ぐفٗغ؎ت،ؕؐٝزח״钠鏾ֶ״ןِ٦ؠ盖椚 0"VUIؿٗ٦إحءّٝ盖椚๏ ؕأةي钠鏾堣腉ח״荈؟٦ؽأ،ؕؐٝزדךؚٗ؎ٝ〳腉๏ ،ؕؐٝزח醱侧ך钠鏾فٗغ؎تׇֿׁؙٔٝה〳腉! # $% &FNBJMQBTTXPSEؚٗ؎ٝ〳
var auth = firebase.auth(); // Sign in Firebase using popup (Google account) var provider = new firebase.auth.GoogleAuthProvider(); auth.signInWithPopup(provider); // Sign out auth.signOut();【Google アカウントによるOAuth 例】"VUIFOUJDBUJPOֽֿ
)PTUJOH搀俱فٓٝד44- )551 杝荈سً؎ٝךⵃ欽ָⵃ欽〳腉๏ (PPHMFךؚٗ٦غٕז$%/ח佄ִ⚅歲鋉垷ךٗ٦سٖ؎ذٝء๏ 44- )551ָرؿٕؓزד䱰欽๏ 杝荈سً؎ٝךⵃ欽〳腉 搀俱๏ $-*ח״؝وٝسאדرفٗ؎๏ ؝ٝا٦ٕ♳דرفٗ؎㾶娖ך然钠ծٗ٦ٕغحؙ〳腉
4UPSBHF(PPHMF$MPVE4UPSBHFחر٦ةָ呓秛ׁծ($1⢪欽׃ג؟٦غ٦؟؎سדךⳢ椚〳腉๏ ِ٦ؠ٦ך歗⫷װ⹛歗ծ갈㡮瘝ך؝ٝذٝخ⥂盖կلةغ؎ز鋉垷ך؝ٝذٝخ،حفٗ٦سדֹ๏ (PPHMF$MPVE4UPSBHFךغ؛حزח呓秛ׁծ($4"1*⢪ֲֿהד圫ղזⵖ䖴〳腉๏ ر٦ةח㼎׃،ؙإإٔ٦ٕ鏣㹀〳腉 'JSFCBTFTUPSBHFإُؗٔذ؍ٕ٦ٕ
Caution points涪٥麊欽儗ך殅䠐挿
/P42-%BUBCBTF๏ 3%#ך״ֲזؙؒٔ乼⡲כדֹזְ ⢽MJLF BWFSBHF๏ ر٦ة圓鸡כ〳腉זꣲؿٓحزח׃ծזץֻطأزׇׁזְ 姻鋉⻉〳腉זꣲׇ׆ءٝفٕח/P42-ך暴䚍崞ַ׃ⵃ欽䗰ָֽ 膴3%#膷
أذ٦آؚٝ橆㞮זו๏ 'JSFCBTFךمأذ؍ؚٝחכ %FWFMPQNFOU4UBHJOH1SPEVDUJPO הְ橆㞮כ暴ח欽䠐ׁגְזְךדծⴽךفٗآؙؑزה׃ג⡲䧭ׅךך搀俱فٓٝ
؟٦غ٦؟؎سⳢ椚๏ ؟٦غ٦؟؎سדךⳢ椚䗳銲הׅךכծ(PPHMF$MPVE'VODUJPOTװך➭($1ך堣腉ⵃ欽ֿׅהדծ؟٦غ٦ٖأז麊欽㹋植 ׃($'כ植㖈،ٕؿ؋晛˟䎃剢植㖈⢽$MPVE7JTJPO"1*ה'VODUJPOTⵃ欽׃歗⫷鍑匿ך؟ٝفٕ IUUQTHJUIVCDPNNDEPOBNQBNJOHTQFDT
ً٦ٕ鷏⥋๏ ً٦ٕ،سٖأ钠鏾⟃㢩דً٦ٕ鷏⥋遤ְְ㜥さכծ㢩鿇ךؙٓؐس؟٦ؽأ穈さׇֿהד؟٦غ٦ٖأז麊欽㹋植⢽;BQJFSה4FOEHSJEⵃ欽׃ծر٦ة鷄⸇ךة؎ىؚٝדً٦ٕꂁ⥋ׅ IUUQTTFOEHSJEDPNEPDT*OUFHSBUF5VUPSJBMT;BQJFSTFOEJOH@XIFO@OFX@SFCBTF@DIJME@SFDPSET@BEEFEIUNM
Enjoy your serverless LIFE!KIHARU SASAKI2016.OctServerlessConf TOKYO