<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>BaaS &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/baas/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>Firebaseで作る簡単リアルタイムウェブアプリケーション（前編）</title>
		<link>/technohippy/18040/</link>
		<pubDate>Tue, 19 Jan 2016 00:00:44 +0000</pubDate>
		<dc:creator><![CDATA[あんどう やすし]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[BaaS]]></category>
		<category><![CDATA[Firebase]]></category>

		<guid isPermaLink="false">/?p=18040</guid>
		<description><![CDATA[Firebaseは2014年10月にGoogleに買収されたことで一躍有名になったBaaS（Backend as a Service）です。本記事ではちょっとしたリアルタイムウェブアプリケーションを作りながらFireba...]]></description>
				<content:encoded><![CDATA[<p><a href="https://www.firebase.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase</a>は2014年10月にGoogleに買収されたことで一躍有名になったBaaS（Backend as a Service）です。本記事ではちょっとしたリアルタイムウェブアプリケーションを作りながらFirebaseの機能を紹介します。</p>

<h2>Firebaseとは</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2-300x219.png" alt="https://www.firebase.com/" width="300" height="219" class="size-medium wp-image-18079" srcset="/wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2-300x219.png 300w, /wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2.png 640w, /wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2-207x151.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://www.firebase.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase</a>はデータストレージ、ユーザー管理などアプリケーションのバックエンドとして必要となる機能をサービスを提供することで、アプリケーション開発者がクライアントサイドの開発に集中できるようにしてくれるBaaS（Backend as a Service）の一種です。</p>

<p>2014年10月にGoogleに買収され、<a href="https://cloud.google.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Cloud Platform</a>（GCP）の一員となりました。この買収によりGCPにはPaaS（Platform as a Service）として<a href="https://cloud.google.com/appengine/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google App Engine</a>、IaaS（Infrastracture as a Service）として<a href="https://cloud.google.com/compute/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Compute Engine</a>、BaaSとしてFirebaseと、いわゆるXaaS系が一通り揃ったことになります。</p>

<h2>Firebaseの特徴</h2>

<p>Firebaseはもともとは開発者用APIを持つウェブサイトに埋め込み可能なリアルタイムチャットサービスとして始まりました。</p>

<p>しかし、多くのユーザーがチャットサービスとしてではなく、ゲームなどのアプリケーションでリアルタイムにデータを同期するために使用したため、創業者たちはチャットサービスのリアルタイムメッセージングシステムを切り出して別サービスとしました。これが現在のFirebaseの元となっています。</p>

<p>そのため、Firebaseは数あるBaasの中でも特にチャットアプリのようなリアルタイムにデータを同期する必要があるサービスに適しています。</p>

<h2>Firebaseの機能</h2>

<h3>リアルタイムデータベース</h3>

<p>FirebaseのデータベースはスキーマレスないわゆるNoSQLで、特定のアプリケーションに関係するデータ全体がひとつのJSONオブジェクトとして保持される点が大きな特徴です。</p>

<p>これによりデータが階層構造をなすため、それぞれのデータが一意のURLを持つことができます。例えばデータベース全体を指すURLは以下のようになります。</p>

<ul>
<li>https://アプリケーションID.firebaseio.com/</li>
</ul>

<p>特定のデータを示すURLは以下のようになります。</p>

<ul>
<li>https://アプリケーションID.firebaseio.com/プロパティのパス</li>
</ul>

<p>例えばアプリケーション名 my-first-chat-app のデータ全体が以下の様であるとして</p>

<p></p><pre class="crayon-plain-tag">{
  "messages" : {
    "-K5kPGFquoTbqHYQqBRS" : {
      "body" : "message",
      "name" : "name"
    },
    "-K5kPUqfBfdj4bAa1fyv" : {
      "body" : "message2",
      "name" : "name2"
    },
    "-K5kR-lwtG4I5w9T36Xq" : {
      "body" : "message3",
      "name" : "name3"
    }
}</pre><p></p>

<p>最初のメッセージ（messages/-K5kPGFquoTbqHYQqBRS）の内容だけを確認したいのであれば、次のURLをブラウザで表示すればいいということになります。</p>

<ul>
<li>https://my-first-chat-app.firebaseio.com/messages/-K5kPGFquoTbqHYQqBRS</li>
</ul>

<div id="attachment_18064" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa-300x250.png" alt="/messages/-K5kPGFquoTbqHYQqBRS" width="300" height="250" class="size-medium wp-image-18064" srcset="/wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa-300x250.png 300w, /wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa.png 640w, /wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa-207x172.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">特定データの表示</p></div>

<h3>認証</h3>

<p>Firebaseを使用すると非常に簡単にユーザー認証をアプリケーションに組み込むことができます。組み込みの認証機構としては、メールアドレスとパスワードを使用した認証、OAuthを使用した認証（Facebook, Twitter, GitHub, Google）、匿名ログインがあり、加えてJSON Web Tokens (JWTs)を使用して既存の任意の認証システムと連携することも容易です。</p>

<h3>ホスティング</h3>

<p>HTML、CSS、JS、画像などの静的なアセットは、Firebaseコマンドラインツールを使用して自身のドメイン上（<code>アプリケーションID.firebaseapp.com</code>）、もしくは有料プランであれば独自ドメイン上に簡単にデプロイすることができます。</p>

<p>さらにデプロイの履歴は管理画面で見ることができ、問題があった場合には以前のバージョンにロールバックすることも可能です。</p>

<h4>コマンドラインツール</h4>

<p>Firebaseのホスティングサービスを利用するにはFirebaseコマンドラインツールを使用する必要があります。node.jsとnpmがインストールされていればコマンドツールは以下のコマンドで簡単にインストールできます。</p>

<p></p><pre class="crayon-plain-tag">$ npm install -g firebase-tools</pre><p></p>

<p>firebaseコマンドで利用可能なサブコマンドは、以下のとおりです。</p>

<dl>
<dt><strong>firebase init</strong></dt>
<dd>プロジェクトディレクトリを初期化します。ホスティングサービスに必要なすべての設定は当コマンドによりプロジェクトディレクトリルートに作成されるfirebase.jsonファイルに含まれます</dd>
<dt><strong>firebase deploy</strong></dt>
<dd>現在のプロジェクトをサーバーにデプロイします</dd>
<dt><strong>firebase disable:hosting</strong></dt>
<dd>ホスティングを無効にし、アクセスに対し&#8221;Site Not Found&#8221;ページを表示するようにします</dd>
<dt><strong>firebase login</strong></dt>
<dd>コマンドラインツールをログインします</dd>
<dt><strong>firebase logout</strong></dt>
<dd>コマンドラインツールをログアウトします</dd>
<dt><strong>firebase list</strong></dt>
<dd>現在ログイン中のユーザーが利用可能なFirebaseアプリの一覧を表示します</dd>
</dl>

<h3>APIとSDK</h3>

<p>FirebaseデータベースにはREST APIがあり、さらにそのAPIを利用する各種環境用のクライアントライブラリが標準で用意されています。</p>

<ul>
<li><a href="https://www.firebase.com/docs/web/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web</a>（JavaScript）</li>
<li><a href="https://www.firebase.com/docs/ios/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">iOS</a>（Objective C）</li>
<li><a href="https://www.firebase.com/docs/android/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Android</a>（Java）</li>
</ul>

<p>なお、これらの標準クライアントライブラリを使用するとFirebaseはオフラインでの動作が保証されます。つまりネットワーク接続がない場合でも、Firebaseデータベースの読み書きの対象を一旦ローカルのキャッシュとすることで、アプリケーションは正常に動作します。その後、接続が復活した時に内容がサーバーと同期されます。</p>

<p>また、標準ライブラリに加えて、REST APIを使用する非公式なライブラリとして以下の様なものもあります。これ以外にもいろいろとありますので、サーバーサイドで自分の好きな言語を利用したい場合はGitHubなどで検索してみるといいでしょう。</p>

<ul>
<li><a href="http://ozgur.github.io/python-firebase/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Python-Firebase</a>（Python）</li>
<li><a href="https://github.com/ktamas77/firebase-php" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase-Php</a>（PHP）</li>
<li><a href="https://github.com/oscardelben/firebase-ruby" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase-Ruby</a>（Ruby）</li>
<li><a href="http://derailed.github.io/bigbertha" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">BigBertha</a>（Ruby）</li>
<li><a href="https://github.com/CodementorIO/rest-firebase" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Rest-Firebase</a>（Ruby）</li>
</ul>

<p>なお、標準クライアントライブラリを使用した場合はオフラインでの動作が保証されますが、非公式ライブラリを使用した場合はその限りではありません。</p>

<h2>サンプルアプリケーション</h2>

<p>Firebaseを使用した基本的なアプリケーション開発の流れを確認するために簡単なチャットアプリケーションを作成してみましょう。先に紹介したとおりFirebaseクライアントライブラリは環境に応じて複数ありますが、今回はJavaScript版クライアントライブラリを使用してWebアプリケーションを作成します。</p>

<div id="attachment_18083" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5-300x213.png" alt="サンプルチャット" width="300" height="213" class="size-medium wp-image-18083" srcset="/wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5-300x213.png 300w, /wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5.png 640w, /wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">サンプルチャット</p></div>

<h3>Firebaseアプリケーション作成</h3>

<p>まずはじめに、今回のサンプルから使用するデータベースを用意するため、ウェブコンソールからFirebaseアプリケーションを作成します。http://firebase.com/ を開き、画面右上のログインボタンをクリックしてログインしてください。</p>

<p>アカウントを新たに作成しても構いませんし、GoogleアカウントやGitHubアカウントを使用してログインすることもできます。</p>

<div id="attachment_18085" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d-300x213.png" alt="Firebaseログイン後" width="300" height="213" class="size-medium wp-image-18085" srcset="/wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d-300x213.png 300w, /wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d.png 640w, /wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Firebaseログイン後</p></div>

<p>ログイン後、左下の入力エリアにアプリ名とアプリURLを入力して、アプリを作成します。今回は以下の様な設定を使用するものとします。</p>

<table>
<tr><th>App Name</th><td>My First Chat App</td></tr>
<tr><th>App URL</th><td>https://my-first-chat-app.firebaseio.com/</td></tr>
</table>

<div id="attachment_18086" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08-300x213.png" alt="スクリーンショット 2015-12-17 22.46.32" width="300" height="213" class="alignnone size-medium wp-image-18086" srcset="/wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08-300x213.png 300w, /wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08.png 640w, /wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Firebaseアプリ新規作成</p></div>

<p>サーバーサイドで行う作業は以上です。これだけでNoSQLデータベースが作成され、クライアントアプリから自由に利用できるようになりました。</p>

<h3>サンプルアプリケーションの初期化</h3>

<p>サンプルアプリケーションは最終的にFirebaseホスティングサービスを利用するため、まずfirebase initコマンドを実行してプロジェクトディレクトリを初期化します。</p>

<p></p><pre class="crayon-plain-tag">% firebase init

? What Firebase do you want to use? my-first-chat-app
? What directory should be the public root? public
✔  Public directory public has been created
Firebase initialized, configuration written to firebase.json</pre><p></p>

<p>初期化にあたって</p>

<ol>
<li>アプリ名</li>
<li>デプロイするファイルを配置するディレクトリ</li>
</ol>

<p>を聞かれるので、アプリ名は先程作成したものを、ディレクトリ名はデフォルトのpublicを設定してください。</p>

<h3>ウェブアプリケーション作成</h3>

<p>それではここから実際に冒頭のサンプルアプリケーションを作成していくこととします。といっても必要となるのはHTMLファイルが一つだけ、それも非常に小さなものですので先に全体を見てしまいましょう。</p>

<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;title&gt;Firebaseサンプル1&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div&gt;
      &lt;input id="name" placeholder="名前" /&gt;
      &lt;input id="message" placeholder="メッセージ" /&gt;
      &lt;button id="send"&gt;投稿&lt;/button&gt;
    &lt;/div&gt;
    &lt;ul id="messages"&gt;
    &lt;/ul&gt;

    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"&gt;&lt;/script&gt;
    &lt;script src="https://cdn.firebase.com/js/client/2.3.2/firebase.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      // データベースの参照を準備
      var firebaseRef = new Firebase("https://my-first-chat-app.firebaseio.com/"); // ... 1
      var messagesRef = firebaseRef.child('messages'); // ... 2

      // 既存メッセージを表示
      messagesRef.on('child_added', function(snapshot) { // ... 3
        var msg = snapshot.val();
        $('&lt;li&gt;').text(msg.name + ': ' + msg.body).prependTo('#messages');
      });

      $('#send').click(function() {
        // 新規メッセージを投稿
        messagesRef.push({ // ... 4
          name: $('#name').val(),
          body: $('#message').val()
        });
      });
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p>今回のサンプルアプリケーションのコードはこれだけ、コメントや空行を除けばJavaScript部分はたったの12行です。このコードをローカルに保存し、ブラウザで開いてみてください。HTMLを含めて全体でも40行弱のコードですが、複数ブラウザで開いて、一方でメッセージを入力すればその内容はリアルタイムに他方に反映され、（かろうじて）チャットとして利用できます。</p>

<p>コードの詳細については次回以降に譲りますが、簡単に説明すると、行われている処理は以下のとおりです。</p>

<ol>
<li>アプリケーションURLを引数としてFirebaseオブジェクトをインスタンス化し、前節で作成したFirebaseデータベースに接続するためのオブジェクトを生成します。</li>
<li>Firebaseデータベースのmessagesオブジェクトへの参照を取得します。この参照への操作はサーバー上のFirebaseデータベースに保存されることになります。</li>
<li>messagesオブジェクトに子ノードが追加された場合のコールバック関数を登録します。今回はコールバック関数内でメッセージの内容をli要素としてul要素に追加しています。なお、onメソッドで登録されたコールバック関数はHTMLの初回読み込み時にも実行されるため、初回読み込み時用の処理を特別に記述する必要はありません。</li>
<li>messagesオブジェクトに子ノードを追加します。</li>
</ol>

<h4>オフライン対応の確認</h4>

<p>さて、ここで一つ面白い実験をしてみましょう。複数のブラウザでサンプルアプリを開き、使用しているコンピューターのネットワークをOFFにしてください。</p>

<p>そのまま一方の画面でメッセージをいくつか入力すると、メッセージを入力した画面では新しいメッセージがリストに追加されますが、他方の画面にはメッセージが追加されません。</p>

<p>その状態でコンピューターのネットワークをONにするとどうでしょう。少し経って他方の画面にもメッセージが表示されるのが確認できるはずです。</p>

<div id="attachment_18109" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/firebasedb-1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/firebasedb-1-300x120.png" alt="firebasedb" width="300" height="120" class="alignnone size-medium wp-image-18109" srcset="/wp-content/uploads/2016/01/firebasedb-1-300x120.png 300w, /wp-content/uploads/2016/01/firebasedb-1.png 640w, /wp-content/uploads/2016/01/firebasedb-1-207x83.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">ネットワークが正常</p></div>

<p>実はFirebaseデータベースの読み書きはいったんローカルDBを経由して行われています。そのためネットワーク接続が不通の場合もローカル側の処理は正常に完了し、ネットワークが回復すると自動的にデータがサーバーと同期されるのです。</p>

<div id="attachment_18110" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/firebasedb2-1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/firebasedb2-1-300x120.png" alt="firebasedb2" width="300" height="120" class="alignnone size-medium wp-image-18110" srcset="/wp-content/uploads/2016/01/firebasedb2-1-300x120.png 300w, /wp-content/uploads/2016/01/firebasedb2-1.png 640w, /wp-content/uploads/2016/01/firebasedb2-1-207x83.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">ネットワーク異常発生</p></div>

<div id="attachment_18111" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/firebasedb3-1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/firebasedb3-1-300x120.png" alt="firebasedb3" width="300" height="120" class="alignnone size-medium wp-image-18111" srcset="/wp-content/uploads/2016/01/firebasedb3-1-300x120.png 300w, /wp-content/uploads/2016/01/firebasedb3-1.png 640w, /wp-content/uploads/2016/01/firebasedb3-1-207x83.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">ネットワーク復旧</p></div>

<p>これによりアプリケーション開発者はネットワークの状態を一切意識することなくリアルタイムアプリケーションを作成することができます。</p>

<p>リアルタイムに状態を同期する必要がある場合、この機能だけでもFirebaseを採用する価値があるのではないかと私は思うのですが、みなさんはいかがでしょうか？</p>

<h3>データベースの内容確認</h3>

<p>サンプルアプリにメッセージをいくつか書き込んだらダッシュボードでデータベースがどうなっているか、内容を確認してみましょう。https://アプリケーションID.firebaseio.com/ にアクセスしてみてください。</p>

<div id="attachment_18115" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5-300x229.png" alt="データベース確認" width="300" height="229" class="size-medium wp-image-18115" srcset="/wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5-300x229.png 300w, /wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5.png 640w, /wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5-207x158.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">データベース確認</p></div>

<p>ちゃんと登録されています。</p>

<p>ちなみにこのダッシュボードから値を変更することもでき、その場合ももちろんクライアント側のイベントハンドラが発火され、ブラウザ側の表示はリアルタイムに変更されます。</p>

<h3>デプロイ</h3>

<p>最後に、今回のアプリケーションをFirebaseにデプロイして実際に利用できるようにします。firebase initコマンドを実行したディレクトリでfirebase deployコマンドを実行してください。</p>

<p></p><pre class="crayon-plain-tag">% firebase deploy

=== Deploying to 'my-first-chat-app'...

i  deploying hosting
i  preparing public directory for upload...
✔  1 files uploaded successfully

✔  Deploy complete!

URL: https://my-first-chat-app.firebaseapp.com/
Dashboard: https://my-first-chat-app.firebaseio.com/

Visit the URL above or run firebase open</pre><p></p>

<p>では、ブラウザで <a href="https://my-first-chat-app.firebaseapp.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">https://my-first-chat-app.firebaseapp.com/</a> を開いてみましょう。開発時と同じデータベースを参照しているので先ほど入力したメッセージがここでも表示されています。</p>

<p>ちなみにアプリのドメインは firebaseapp.com で、ダッシュボードのドメインは firebaseio.com です。うっかり打ち間違えないように気をつけましょう。</p>

<h2>まとめ</h2>

<p>いかがでしょう。Firebaseを使用すれば非常に簡単にリアルタイムアプリケーションが作成できるということが分かっていただけたのではないでしょうか。</p>

<p>今回はFirebaseの全体的な機能の概要を説明しました。次回はもう少し複雑なアプリケーションを作りながら、Firebaseのそれぞれの機能をより詳細に掘り下げていきたいと思います。お楽しみに。</p>
]]></content:encoded>
			</item>
		<item>
		<title>mBaaSの「今」がわかる！ぶっちゃけ仮想パネルディスカッション！</title>
		<link>/shumpei-shiraishi/14370/</link>
		<pubDate>Wed, 13 May 2015 00:00:17 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[BaaS]]></category>
		<category><![CDATA[Kii]]></category>
		<category><![CDATA[Milkcocoa]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Parse]]></category>
		<category><![CDATA[appiaries]]></category>
		<category><![CDATA[mBaaS]]></category>
		<category><![CDATA[ノハナ]]></category>

		<guid isPermaLink="false">/?p=14370</guid>
		<description><![CDATA[連載： アプリケーションアーキテクチャ最前線 (3) BaaS / mBaaSという言葉をご存知でしょうか。この単語は「Backend as a Service」の略（mBaaSは、さらにモバイルアプリに特化したもの）で...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/arch/" class="series-287" title="アプリケーションアーキテクチャ最前線" data-wpel-link="internal">アプリケーションアーキテクチャ最前線</a> (3)</div><p><style>.post-detail-contents p { text-indent:0; } #contents #post-detail .block-contents img[width="70"] { display: inline-block; float: left; margin-right: 1em; width: 48px; } #contents #post-detail .block-contents p { overflow: hidden; } #contents #post-detail .block-contents p strong { font-weight: bold; } #contents #post-detail .block-contents p > br { display: none; } .post-detail-contents p > span { display: block; min-height: 48px; }</style>
BaaS / mBaaSという言葉をご存知でしょうか。この単語は「Backend as a Service」の略（mBaaSは、さらにモバイルアプリに特化したもの）で、サーバサイド（バックエンド）のコードをほとんど書かなくてもアプリを開発できるようにするサービスです。2013年にFacebookが買収した<a href="https://parse.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Parse</a>が特に有名です（以下、「mBaaS」で用語を統一します）。</p>

<p>mBaaSは主にモバイルアプリの開発に利用され、Webエンジニアにとっては少し馴染みの薄い技術ではあるのですが、これからのアプリケーションアーキテクチャを考える上では外せないトピックだと考え、有識者の方々にお集まりいただき、「仮想パネルディスカッション」を実施しました。mBaaSを作っている人と使っている人が入り乱れ、愚痴（？）からIoTに至るまで、mBaaSに関するトピックが尽きることなく話し合われました。</p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-1.jpg" alt="" width="640" height="344" class="aligncenter size-full wp-image-14600" srcset="/wp-content/uploads/2015/04/mBaaS-1.jpg 640w, /wp-content/uploads/2015/04/mBaaS-1-300x161.jpg 300w, /wp-content/uploads/2015/04/mBaaS-1-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>今、そしてこれからのアプリケーション開発を知りたい人必見の内容です！
ƒ</p>

<h2>まずは自己紹介から</h2>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：本日はこれほど多くの「mBaaSを作る人」「mBaaSを使う人」に集まってもらい、光栄の至りです。まずは皆さん、自己紹介からお願いします。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：石塚進です。<br>私は<a href="http://jp-cloud.kii.com/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Kii</a>という会社で、mBaaSを作っています。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-7.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14624" /><br><span><strong>井上</strong>：日本マイクロソフトのエバンジェリスト・井上大輔です。Microsoft Azureが持つmBaaSサービスを担当しています。私はどちらかというと、「作る」でも「使う」でもなく、mBaaSを「売る」立場ですが…ここにいていいんでしょうか（笑）。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：多様性があっていいと思います（笑）。では引き続き、物江さんから時計回りで自己紹介をお願いします。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-11.jpg" alt="" width="70" height="84" class="alignleft size-full wp-image-14628" /><br><span><strong>物江</strong>：私も同じく日本マイクロソフトのエバンジェリスト・物江修です。普段はHTML5やJavaScriptといったフロントエンド技術を担当することが多いのですが、Microsoft Azureの担当でもありまして、今回は井上を引っ張り出してきました。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-10.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14629" /><br><span><strong>のびすけ</strong>：<a href="http://liginc.co.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">LIG</a>の菅原のびすけです。mBaaSをいろいろ試した中で、<a href="https://mlkcca.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Milkcocoa</a>というmBaaSに惚れ込んでLIGブログで取り上げたりしていたら、エバンジェリストに任命されました。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>：<a href="http://www.appiaries.com/jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">アピアリーズ</a>というmBaaSを開発している槌野雅敏です。本日は、今後mBaaSはどうあるべきかってところを皆さんと議論したいと思っております。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>：<a href="http://nohana.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ノハナ</a>という会社でエンジニアをやっている田中和紀と申します。<a href="http://parse.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Parse</a>をかなりハードに使っているので、そうした知見を共有できればと思っています。</span></p>

<p><br></p>

<h2>BaaS / mBaaSのよいところ</h2>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：では手始めに、mBaaSを「使う」立場であるのびすけさんと田中さんに、「なぜmBaaSを使おうと思ったのか？」をお聞きしたいのですが、よろしいですか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-10.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14629" /><br><span><strong>のびすけ</strong>:プロトタイピングやハッカソンなど、時間が限られている中で裏側の部分を全く考えずに作り始められるのがすごくいいと思っています。キャンペーン等での実案件でも使いました。開発のスピード重視で一過性のものを作るのにmBaaSはすごく役に立ちますね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:私が携わっているノハナというサービスは、mixiのイノベーションセンターという新規事業開発プログラムから生まれたものです。そのプログラムは、非常に短期間で成果を上げることが求められるものだったので、mBaaSを採用することにしました。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：なるほど。「とにかく開発の立ち上げがとにかく早い」というのが利点と言えそうですね。mBaaSの利点について、今度は作っている側の方にも聞いてみたいです。例えば井上さん、いかがですか？製品を「売る」立場として、セールストークに期待しつつ（笑）。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-7.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14624" /><br><span><strong>井上</strong>：って言っても、私もともとサーバサイドのエンジニアなので、バックエンドに関しては「自分で作ればいいじゃん」と思うこともよくありまして…（笑）。とはいえ、作るのが爆速になるのはすごくメリット大きいと思います。<br>
マイクロソフトの場合だと、mBaaSサービスを2つ持ってまして。<a href="http://azure.microsoft.com/ja-jp/services/app-service/mobile/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">モバイルサービス</a>と<a href="http://azure.microsoft.com/ja-jp/services/mobile-engagement/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">モバイルエンゲージメント</a>です。モバイルサービスは一般的なmBaaSサービス。モバイルエンゲージメントは、いわばプッシュ通知に特化したSaaSのようなものでして、プッシュ通知の開封率とか、エラーが返ってないか調べたりとか、ターゲットを絞って送るとか、いろいろと面倒な部分をまるごとサポートしてくれます。こういうサービスは、確かにすごく便利ですね。</span></p>

<h2>mBaaSの悩ましいところ</h2>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：<br>では逆に、mBaaSの悩ましいところや、改善すべきところとかはありますか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:Parseに限って言うと、安定性には少し問題がありますね。弊社のサービスは、月末にリクエストが集中するのですが、そこでトラブルが多発するのが困りものです。うち（ノハナ）がハードに使いすぎて、サービス設計者の意図を超えちゃってる部分もあるとは思うんですけど。<br>
今でも、ノハナの8割くらいはParse.com上で動いています。8,000万枚の画像、1億件以上のレコードを扱っているといった感じで、多分日本で一番使っている会社じゃないでしょうか。あと、サポートのレベルとかもあまり高くない。Facebookに買収されて、安定性やサポートレベルが上がるかと期待したのですが、今のところはそうなってないです。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：さすが、使いたおしているだけあって、辛口ですね（笑）。<br>ちなみに、パフォーマンスとかはどうなんでしょう？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:Parseは、データセンターがアメリカの西海岸にしかないんです。今後はシンガポールに作るらしいんですが。なので、すごく遅延します（笑）。ノハナはフォトブックのサービスなんで、画像のアップロードが頻繁に発生するんですが、遅い遅い。<br>
なので、日本でサーバ立てて一旦そこにキャッシュするようにして、そこからParseにアップロードするようにしてます。こうして一部機能から日本にサーバを立てていって、そのうちParseから脱却して自社のインフラに移行しようと図っています。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：<br>
苦労してますね…。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:とはいえ、感覚的には、運用や設計のエンジニア3人分くらいの働きはしてくれると思っています。だから、仮に今また新しくサービスを作れと言われたら、またParse使うと思いますよ。スピードを持って、商用のモバイルアプリを出すには最高なので。<br>ただ、3人分雇えるくらいの利益が出てきたので、切り替えようかと思っているってところですね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：<br>
その移行って、うまくいきそうですか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:いくと思っています。今でも常に、Mongoからデータをダンプして、解析とか集計用にデータをインポートするということを行っているので。<br>ただ、数ヶ月はかかりそうですけどね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>:サービスを作っている立場からしても、今のmBaaSはまだまだ進化の途上だと思います。もちろんプッシュのサービスとか、便利な点はあるのですが。私も元々サーバサイドのエンジニアなので、バックエンドの自由度が低いのはデメリットに思えてしまいますね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-11.jpg" alt="" width="70" height="84" class="alignleft size-full wp-image-14628" /><br><span><strong>物江</strong>：ロジックのほとんどがクライアント側で実装されるのなら、バックエンドって認証やデータ保存がメインになって、今のBaaSでも十分なのかな…なんて思ってしまうんですが、違うんでしょうか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>:ところがそうでもないんですよ。実際のお問い合わせでも、例えばトランザクション制御とか複雑な検索クエリとか、今のmBaaSができることを超えたものをお望みの方もたくさんいらっしゃるのが現状です。</span></p>

<h2>mBaaS開発の実際</h2>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：トランザクションや複雑な検索といったお話が出ましたが、そういったユースケースにはやはり対応しづらいんでしょうか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>:これはmBaaSというよりは、NoSQLデータベースの問題ですけどね。RDBの感覚で設計してしまい、クエリ量の増加やトランザクションの問題に直面するというケースはよくあります。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:そうそう、コツが必要ですよね。まず、そもそもデータベースを正規化しちゃいけないんです。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：そういうデータベースを設計する際って、どういうふうに進めるんですか？<br>まず正規化してから崩す？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:そうですね、僕らも最初は正規化して作ってましたけど、それをどんどん崩していった感じです。でももしかすると一番いいのは、モバイルアプリのコードをひたすら書いていって、結果的にできたDBを使うといった感じかもしれません。<br>サーバサイドから設計しない。モバイルからリクエストを投げると、勝手にテーブルやカラムになっていくので、それを使うのが結果的に一番きれいになる…かもしれません。キモチワルイですけどね(笑)。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：そういう進め方、実際にありますね。ただ、iOSとAndroidは基本的に開発者が別々なので、それぞれがコードを書いていった結果、最終的にデータ構造が食い違っちゃったなんてこともあります（笑）。<br>サーバサイドの設計なしで始めるので、そういうことが起きるんですよね。もともと決まってればそれに合わせるんですけど。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：ちなみに、mBaaSのデータストアってMongoDBがよく使われているイメージがありますが、この中でMongoDB以外のデータベース使っている製品ってあるんでしょうか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：Kiiは独自でキーバリューストアを作ってますね。APIの裏側を全部差し替え可能にしてあって、サービスの特性に応じてストレージを切り替えられるようにしてあります。柔軟なのはいいんですが、Techieにやりすぎな面もありますね（笑）。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-7.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14624" /><br><span><strong>井上</strong>：NoSQLの話で盛り上がってる中、肩身が狭いんですが（笑）、AzureのmBaaSで使われるのはRDB（PaaS版のSQLServer）なんです。DocumentDBってサービスもあってそちらはNoSQLなんですが、デフォルトではありません。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>： <br>実際mBaaS使うと、開発の流れとかは変わるんでしょうか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-10.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14629" /><br><span><strong>のびすけ</strong>:データベース設計より先に、UI設計からいけますね。開発の入り方は変わると思います。まあ、キャンペーンとかの小さな短期的な仕事だから、ゆるい設計で進められるのですが。長期的になると、先にDB設計をしっかりやらないと後々大変なことになります。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:そうですね、長期的なサービスだと、まずDB設計はするでしょうね。で、僕だったら一旦設計した後、そこでリクエスト回数をどうやって減らそうかな、とか考える。通信が一番パフォーマンスに影響するので。
正規化を崩すとか、キャッシュ戦略を考えたり。<br>
で、各mBaaSにafterなんちゃらとか、なにかした後に何かする機能とか、Cloud Codeとかあるんですが、そういうのは極力使わないようにする。スケールしなくなるので。あと問題なのはSDKの完成度ですね。Parseはあまり完成度が高くなくて…メインスレッドで通信しちゃったりするので…。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：ほんと、使い倒した方ならではのノウハウというか、バッドノウハウというか、愚痴というか、たまってますね（笑）。</span></p>

<p><br></p>

<h2>個々のmBaaSサービスの特徴</h2>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：では、せっかくこれだけの方々にお集まりいただいたのですから、読者がサービスを比較する手助けになるように、それぞれのサービスの利点や特徴を教えていただけますか？じゃあまずKiiの石塚さんから。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：そうですね、まずKiiは、サポートはなかなかのものだと思いますよ。日本語はもちろん、中国語や英語もいけますし。機能的な点では、今のところmBaaSのサービスはどれも似たり寄ったりかな、と思っています。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：ありがとうございます。<br>
では次、マイクロソフトの井上さん。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-7.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14624" /><br><span><strong>井上</strong>：<br>え、いやー…いいところって言っても、そんなに…。</span></p>

<p><br><br>
<strong>一同</strong>:えー！（爆笑）</span>
<br><br></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-7.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14624" /><br><span><strong>井上</strong>：というのは冗談で、まずマイクロソフトはデータセンターが世界19カ所にあるんですよ。日本にも、東と西の2カ所ある。そして、1カ所あたり60万台くらいとか持ってます。AWSの2倍とかそんなレベル。<br>
なので、スケールのレベルがぜんぜん違うと思います。あと、サポートって分野に関しては、マイクロソフトはかなり手厚いです。マイクロソフトのサポートって、社内でもかなり厳しく評価される立場なんで。Azureが持ついろんなサービスと連携できるのも強みですね。mBaaSとPaaSとか、管理用のサービスとか。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-10.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14629" /><br><span><strong>のびすけ</strong>:僕は開発スピードが重視されるキャンペーンの受託制作とかで使うことが前提なのですが、とにかくさくっと作り始められるかどうかを重視しています。サンプルやチュートリアルを少し触って、すぐに動かせるっていうのが大事。<br>そういう点では、Milkcocoaはすごくいいです。その他のサービスは、多機能なのはいいんですが、僕の立場からするとそこまでの機能はいらないかな、と。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>:アピアリーズは、受託開発とセットでできますよ、というのを割とウリにはしてますね。<br>親会社であるPCPhase社のリソースを活用できるのが売りです。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:Parseですが、まあ、最初の方に出たサービスですよね。<br>
…特徴って、なんかあるのかな？（笑）。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：一時期は、「Parseを使っておけばとりあえず間違いない」みたいな雰囲気ありましたよね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>:今でもそれはありますよね。Parseの成功を見て、追いつけ追い越せでやっている。だから、今は各社のサービスが似たり寄ったりになってる部分もあると思います。</span></p>

<p><br></p>

<h2>mBaaS のこれから</h2>

<p><img src="/wp-content/uploads/2015/04/mBaaS-11.jpg" alt="" width="70" height="84" class="alignleft size-full wp-image-14628" /><br><span><strong>物江</strong>：じゃあ、今後はどうなっていくんでしょう？開発者が自由度の高いバックエンドを開発できるようになっていくのか、それともブラックボックス化がより進んで、必要な物を組み合わせてサービスを作っていけるようになるとか、どんな方向にいくのでしょうか？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-9.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14630" /><br><span><strong>槌野</strong>:どちらにチャレンジする企業もあって、開発者がどちらを選んだかという結果によって、段々淘汰されていく…って流れじゃないかと思いますね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：私は今後もっとサービスの高レベルな部分、例えば分析とかですね、そういうニーズを満たすという方向にいくんじゃないかと思っています。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-10.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14629" /><br><span><strong>のびすけ</strong>:IoTの流れとかもありそうですよね。Web制作する側からすると、デバイスのセンサーデータを取ってくる部分はブラックボックスでもよくて、そこをBaaSが担ってくれる…という未来が考えられるかなと。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：相性はすごく良さそうですよね。<br>Parseも、先日のF8カンファレンスでIoT対応を発表しましたね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：<br>実はKiiも、去年の10月からIoT対応機能は載せてるんですよね。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-7.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14624" /><br><span><strong>井上</strong>：<br>あ、実はAzureも去年IoT対応してまして…。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：あれ、実は結構IoT対応してるサービスっていっぱいあるんですね（笑）。<br>むしろParse遅かった、みたいな？</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-6.jpg" alt="" width="70" height="83" class="alignleft size-full wp-image-14607" /><br><span><strong>石塚</strong>：そうなんですよ。なので実はアメリカの方では、mBaaSって単語の&#8221;m&#8221;を落として、&#8221;IoT BaaS&#8221;とか&#8221;IoTプラットフォーム&#8221;とかが毎週出てくるといった状態。ものすごくレッドオーシャン化しているんです。</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-5.jpg" alt="" width="70" height="80" class="alignleft size-full wp-image-14604" /><br><span><strong>白石</strong>：そんなことになってたんですね、知らなかった…！</span></p>

<p><img src="/wp-content/uploads/2015/04/mBaaS-81.jpg" alt="" width="70" height="82" class="alignleft size-full wp-image-14632" /><br><span><strong>田中</strong>:「mBaaSのこれから」っていう話で言うと、モバイルやIoTの分野に挑戦するベンチャーが後を絶たない昨今、mBaaSの重要性は今後も高まると思いますね。まず単純に工数の問題。アプリ開発はiOS, Android両対応が必要な上に、Web開発より工数がかかります。<br>
次にリソースのフォーカスに関する問題。モバイルアプリはUI/UXが優れていることが第一。なので、必然的にフロントエンド側にリソースを重点的に投下していく必要があります。<br>
最後に人材の問題。アプリのエンジニアは常に不足している状態ですので、これまでWebのエンジニアだった人にも、アプリ開発を担当してもらう必要があります。<br>
こうした理由からエンジニアをサーバ開発に回すことが難しくなっているというのが実際で、今後もmBaaSは重要な位置付けになると考えています。散々Parseをdisったあとなので、説得力あるかはわかりませんけどね (笑)。
</span></p>

<p>—— と、話は尽きませんが、ひとまずここまでとさせていただきます。
本記事で、BaaS / mBaaSという分野の現状と可能性が読者の皆様に伝われば幸いです！</p>
]]></content:encoded>
		
		<series:name><![CDATA[アプリケーションアーキテクチャ最前線]]></series:name>
	</item>
	</channel>
</rss>
