ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

「mBaaS採用で、サーバー開発が完全不要に!」 - 京王グループの京王アプリ事例インタビュー

京王アプリは京王電鉄の鉄道運行情報配信を軸に、京王グループの各社が提供する様々な情報を集約したポータルアプリとなっています。mBaaSの機能をフルに活用しているため、アプリの事例としてとても面白いのではないかと思います。今回はその開発を担当されている方々にお話を伺いました。

アプリについて教えてください

京王アプリは京王グループが横断的に情報発信できるように作られています。京王電鉄のみならず、バスや京王グループの店舗や施設の情報も配信されます。グループとしてのハブアプリとなっていて、京王グループのサービスを利用する皆さんにとって役立つ情報を提供できるものになります。想定利用者数は10万ユーザで、沿線に住んでいる方々に使って欲しいと考えています。

mBaaSを含めたアーキテクチャを教えてください

今回のアーキテクチャは次のようになっています。

case-bg-bln-case_keio 管理機能開発はJavaで行っています。管理画面から操作されたデータはすべてmBaaSに登録しています。スマートフォンアプリはネイティブをベースに作成しており、AndroidはJava、iOSについてはSwift2.0を使って開発しております。RDSとなっているところはアクションログで、アプリの操作ログを記録している場所になります。mBaaS以外のサービスも複数導入しており、Google Analyticsの解析であったりReproによるアプリ解析なども行っています。

mBaaSの使いどころは多数ありますが、例えば鉄道の遅延情報などを鉄道運行管理システムにて作成されたCSVを取り込んでアプリに通知や表示を行っています。

iOSはバージョン8~9、Androidはバージョン4.1~5.0まで対応しています。

アプリの主な機能を教えてください

お勧めな機能としてはお知らせ、クーポン、スタンプラリー機能で、最も重要視している機能は運行情報の配信です。スタンプラリー機能では複数の場所を回ってスタンプを受け取ることでクーポンが受け取れるという機能になります。これはGPSを使って制御しています。

また、会員管理機能を使って、よく利用する店舗や駅をマイショップ、マイステーションとして登録できるようになっています。登録することで京王グループ各社(加盟店)が作成するお知らせやクーポンを受け取れるようになります。運行状況は曜日や時間単位でお知らせを受け取るか否かを指定できるようにしています。

mBaaSの使っている機能を教えてください

今回はほぼ全て使っています。前述の通り会員管理を使っていますし、アプリ内で使われている各種データはデータストアに入れています。画像などのデータはファイルストアに保存していて、プッシュ通知も使っています。

既存システムとの連携については運行状況で使っているようにCSVを取り込んだり、既存サイトから情報を取得するといった方法も行っています。それらのデータもバッチ処理でmBaaSのデータストアなどに登録するようになっています。アプリは全てmBaaSとのみ通信を行い、サーバとの連携はしていません。

mBaaSの使い方で工夫した点を教えてください

プッシュ通知は位置情報で絞り込まず、まず配信した上でアプリ側で位置情報付きプッシュかどうかを判別しています。それが位置情報付きであれば、GPSを使って位置情報と比較し、範囲外の場合は破棄しています。ユーザ属性などの細かい情報も含めてプッシュ通知を出しているので、管理画面上で絞り込むのではなく、アプリ側で表示/非表示を振り分けた方が効率的でした。

今回、運用を行う担当者や加盟店様向けに管理画面はmBaaSのコントロールパネルとは別で開発しています。mBaaSのコントロールパネルは技術者にとっては分かりやすいのですが、運用担当者に特化したものではありません。そこで独自の担当者にとって分かりやすい画面を使って、REST API経由でデータを簡単に登録できるようにしています。

今回のプロジェクトで言えば、開発担当者がmBaaSに慣れていたのが大きかったと言えます。mBaaSを使うと「なんとなくできそう」で開発を進めてしまって、いざとなったら問題があったといった時が過去にありました。そういったmBaaSならではのコツを設計段階でちゃんと把握しているかどうかは大きなポイントだと感じています。

例えばiOS、AndroidでSDKの機能に違いがあります。そのためiOS SDKならできることがAndroid SDKだとできない場合があります。今回はそういった差異はアプリ側で吸収するようにしています。

これらのコツはmBaaSのサービスサイトでebookの形で提供されているので、利用前には一読しておくことがスムーズな開発に繋がると思いました。

mBaaSによって効率化された部分を教えてください

例えばデータストアと同じような仕組みを一から作ろうと思ったら相当な工数がかかるかと思います。APIを作ったり、SDKも作らないといけません。プッシュ通知の仕組みも同様です。そういった部分が工数ゼロで実現できるのはmBaaSの利点だと思います。

後はフロントエンドの冗長化やバックアップの仕組みなども考えると5~6人月くらいは削減できたんじゃないかと思っています。実際、AWSの構築は1人月程度で終われていて、サーバエンジニアをアサインするまでもありませんでした。

mBaaSに期待する機能はありますか

データストアやファイルストアへの接続が増えたり、データ数が多くなるとどうしても遅延が発生してしまいます。欲しいデータの処理をまとめて書けるようになったりすると高速化するのだろうなと思ったりしています。現在はキャッシュやデータの取得を非同期にすることで解決しています。

管理画面でデータストアを操作している時に、文字列と数字が見た目では分からないといった問題がありました。数字だと思ったら実は文字列だったり、日付だと思ったら文字列だったといった具合です。それが原因でエラーになってしまったことがあったので、管理画面上で型が分かるようになっていると嬉しいです。

mBaaSを使う上で注意した点はなんでしょうか

元々mBaaSを使っていこうとしていたのですが、実際に自分たちのやりたい機能がmBaaSでできるかどうかちゃんと把握していませんでした。今回について言えばmBaaSに慣れたエンジニアがアサインできたことで、担当者の疑問を解消していけたのが大きかったと考えています。

例えばプッシュ通知についても100%絶対に届く訳ではありません。通信状態が悪かったり、GPSのような技術と組み合わせていると尚更です。そういった点もちゃんと説明を繰り返しておくことで担当者の不安を軽減し、開発がスムーズに進められるようになりました。

mBaaSはだいたいのことができますので、逆に「こういった操作はしない方が良い」「これはできません」といったアンチパターンのような形で、プロジェクトに合うかどうかを判断できる情報が欲しいと思います。

今後のアプリ開発予定はいかがでしょうか

現在絶賛開発中ということもありますので(※インタビュー当時 12月)、まず3月のリリースに向けて開発のツメを行っていきます。その後、管理画面の改修を行ったり、幾つかの機能追加を予定しています。


「ニフティクラウド mobile backendは国内のベンダー製なので、海外のものに比べて接しやすいと思います。 開発者用フォーラムで質問ができるので、まずは使ってみて悩むところがあればフォーラムで聞いてみると良いのではないでしょうか」とのこと。

京王アプリはmBaaSの機能をほぼ網羅的に使って実装されています。 さらに管理画面を自作するなど、mBaaSの利用ケースとしてとても面白いのではないでしょうか。