LoginSignup
39
36

More than 5 years have passed since last update.

Firebaseを今すぐ始めるのに必要な最低限のこと

Last updated at Posted at 2015-11-30

初Qiita投稿。

Firebaseとは?

バックエンドとフロントエンドで分けて考えてみよう。

バックエンド

バックエンドは、クラウド上で提供されるドキュメント・データベースとそのデータベースにアクセスするためのRESTなAPI。この部分はFirebaseの基礎。

後述するが、FirebaseのAPIは双方向通信をサポートしている。

フロントエンド

フロントエンドは、そのRESTなデータAPIへのアクセスを容易にするJavaScriptライブラリー。Firebaseの利用(application)はJavaScriptを始めとするクライエントコードのみで実装できる。この部分はFirebaseのオプションの部分で、Hostingサービスも提供されているが、よそでホストしても構わない。

ちなみに「Firebaseすげ~」っとなるもう一つの要素が、双方向通信のサポート(webSocket等)。例えば、あるクライエントがデータを書き込んだとしたら、別のクライエントにはライブラリーからCallbackで通知が届く。その通知を処理することで、データの変更をPush式にすべてのクライエントに反映させることが出来る。例えば、チェスのゲームで、相手の駒の動きを即座にlocalのDOMに反映させる、などが容易に実装できる。

App

このバックエンドとフロントエンドをまとめて「App」というユニットで活用できるようになっている。

以下、新規Appの作るためのフォームと、既存のAppの様子。

New Skitch.jpg

データURL

この部分で示されるURLが非常に重要。
2015-11-29 20_07_13-New Item - Qiita.png

これはSQLデータベースで言うところのコネクション・ストリングと同じようなものと考えてもよい。

データの管理

このデータURLは当然ブラウザーで開くことが出来る。データURLが指し示す場所は・・・そうデータ。

New Skitch.jpg

ここで、手動でデータをinsertしたりeditしたりできる。Google Driveのドキュメントを編集するような感覚でドキュメント・データベースの内容を管理することが出来る。

そして、クライエントはこの手動のデータ管理を単に自動化するもの、っと考えると理解しやすいかもしれない。

Firebaseを利用するのに最低限必要なもの

Firebaseのアカウント
新規Firebase App
クライエントコードをホストする環境(開発中ならlocalhostでOK)

つまり、今すぐ始められる。なんのサーバーも必要なし。

最低限のクライエントコード

Firebaseのトップページで提供されているTutorialをindex.htmlとして保存して、ブラウザーで開くだけで一応Firebaseの最低限の機能であるデータの書き込みと双方向通信を確認できる。

Tutorial

<html>
  <head>
    <script src='https://cdn.firebase.com/js/client/2.2.1/firebase.js'></script>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>
  </head>
  <body>
    <div id='messagesDiv'></div>
    <input type='text' id='nameInput' placeholder='Name'>
    <input type='text' id='messageInput' placeholder='Message'>
    <script>
      var myDataRef = new Firebase('https://******.firebaseio.com/');
      $('#messageInput').keypress(function (e) {
        if (e.keyCode == 13) {
          var name = $('#nameInput').val();
          var text = $('#messageInput').val();
          myDataRef.push({name: name, text: text});
          $('#messageInput').val('');
        }
      });
      myDataRef.on('child_added', function(snapshot) {
        var message = snapshot.val();
displayChatMessage(message.name, message.text);
      });
      function displayChatMessage(name, text) {
        $('<div/>').text(text).prepend($('<em/>').text(name+': ')).appendTo($('#messagesDiv'));
        $('#messagesDiv')[0].scrollTop = $('#messagesDiv')[0].scrollHeight;
      };
    </script>
  </body>
</html>

注:上のコードはそのままでは動かない。まず以下の点を変更します。

var myDataRef = new Firebase('ここに自分のFirebaseのAppのデータURLを指定する');

次に、このindex.htmlをふたつの異なるブラウザーで開く。
下はChromeとFireFoxで開いた場合。

2015-11-29 20_50_37-Start.png

実際にメッセージを打ち込んでみると、両方のブラウザーが現在のFirebaseのデータベースの状態を反映することが観察できる。

データURLをブラウザーで開いて、データの状態を確認してみると・・・

New Skitch.jpg

期待どおりの結果になっている。

コードの解説

簡単にコードの重要な部分を解説する。

下はFirebaseのクライエントライブラリーをCDNからダウンロードする部分。必須。

<script src='https://cdn.firebase.com/js/client/2.2.1/firebase.js'></script>

下は、Firebaseオブジェクトを作成しているところ。データURLを渡すことで、そのデータベースへのアクセスが可能になる。必須。


var myDataRef = new Firebase('データURLを指定する');

次に、データを実際に書き込むところ。
ここでは、JQueryでふたつのフィールドのデータを取得し、最後にFirebaseのpushメソッドで書き込んでいる。
データがJSONであることに注意。このJSONデータ、階層構造を持つ複雑なものでも構わない。Firebase側で処理してくれる。この点もFirebaseの扱い安い点。

var name = $('#nameInput').val();
var text = $('#messageInput').val();
myDataRef.push({name: name, text: text});

最後に、データベースの更新の知らせを受け取るコード。onを使い、データ更新に耳を澄ませている。’child_added'は「childが新しく加わる度に起こしてくれ」っと言っている。
ちなみにこのonはページがロードした時も一度fireされる。そうすることで、既存のデータを表示することができ、そのための特別なコードを書く必要がなくなる。

myDataRef.on('child_added', function(snapshot) {
  var message = snapshot.val();
  displayChatMessage(message.name, message.text);
});

まとめ

Firebaseを使うとかなり軽いフットワークで双方向通信とPersistentなデータをサポートするアプリケーションを作成できる。

39
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
36