2016年6月13日月曜日

SPAJAM2016に参加しました

SPAJAM2016というハッカソンにチームkirinsan.orgの一員として参加してきました。正確には東京予選Dということで、このハッカソンで最優秀賞をもらえたら本戦に上がれて温泉旅行に行ける!というやつです。

今回はテーマが家族ということだったのですが、2時間ほど作戦会議をした結果作ったモノはエアねこというアプリでした。これは「家族みんなで猫を飼う」というコンセプトの育成シミュレーションのようなイメージです。

目標としたコンセプトイメージ


  1. 家族みんなで1匹の猫を飼うのだから、一度に一つの端末にしか猫は表示されない。
  2. 猫は自由きままに行動するので、不定期に端末間を移動する。
  3. エサがあったら寄ってくる。
  4. ねこじゃらしを振ったら寄ってくる。
  5. 冷蔵庫開けると寄ってくる。
  6. たまにキーボードの上を歩いてぐちゃぐちゃな文字をPC上に表示させる。
  7. たまに電子ピアノの上を歩いて鍵盤を鳴らす。
  8. たまにファミコンのリセットボタンを勝手に踏む。
とはいえ24時間という開発時間の制約もあったので後半部分の実装まではなかなか手が回らなかったのですが、端末間で猫が移動するとか、エサを置くと寄ってくるとか、ねこじゃらしを振ったら(iPhoneを振る)寄ってくるとか、そういうところはちゃんと作れました。

実装

今回はチーム内にiOSエンジニアが二人いたので、ユーザーが使用する部分はiOSのネイティブアプリとして作成し、バックエンドにFirebaseのデータベースサーバーを用意するのと、猫の動作を制御するNode.jsのプログラムを作成しました。私はNode.jsで猫の動きを作成するのと、Firebaseデータベース内の項目を設計する部分を担当しました。

ポイント

今回の開発で使用したポイントはバックエンドにFirebaseデータベースを使用したことです。

Firebaseは2014年にGoogleが買収したデータベースサーバーのホスティングサービスなのですが、一般にイメージされる「データベースのホスティング」とは違って、MySQLやOracleやMongoDBなどのデータベースソフトではなく独自のデータベースエンジンとなっています。
といっても一つの巨大なJSONオブジェクトを扱うような仕組みなので、むしろリレーショナルDBよりもとっつきやすいです。

Android、iOSを始めとしてWebブラウザ・Node.js用のJavaScript等各種言語向けのAPIが提供されていて、保存されているデータの内容も管理コンソールから簡単に確認できるので簡単にアプリに組み込むことができます。

Firebaseの最大の特徴は「リアルタイムデータベース」と名乗っているだけのことはあるリアルタイム性です。

ある特定のデータに対する変更が行われると、そのデータを監視している全てのクライアントに変更が自動で通知されるのです。これにより、更新ボタンのようなUIを用意しなくとも自動で常に最新のデータが表示されるという仕組みが簡単に実装できます。
TODOリストや簡単なテキストチャットのようなアプリであれば、超簡単に作れます。

接続が不安定な場合でも、Firebaseはオフラインになったことを検知してその間に行われた変更をローカルに保存しておき、接続が回復した時にサーバーに送信します。

今までサーバーサイドのコードで四苦八苦していたのがバカらしく思えるほどです。
そして驚くべきことに、Googleはこのサーバーを無料で使わせてくれているのです!(接続数などの制限がなくなる有料プランもあります)
まるでハッカソンのためにあるかのようなこのFirebase。みなさんもぜひ一度触ってみてください。


もちろん、Firebaseも万能ではありません。いくつか欠点があります。
検索に関する機能はかなり貧弱で、一つのキーを使った簡単なフィルターやソートくらいしかできません。文字列検索のようなことは一度データを全部落としてきてアプリ側でフィルター表示するか、別途検索用のデータを持つデータベースを用意した方が良いです。

また、トランザクションの機能はありません。あるデータを+1する、-3する、といった程度のアトミックな更新をしたり、あるキーの下にある値を複数更新するということは可能ですが、複数のキーの値を更新するとか、数回に渡る更新をロールバックするとかいうことはできません。

最後に地味に不便なところが一つ。先日のGoogle IO 2016でFirebaseがGoogle Cloud Platformと統合されて大幅に機能強化されることが発表されたのですが、その影響で管理コンソールはリニューアルされ、APIも一新されました。
新しくなってからまだ日も浅いので、Firebaseでググると古い方のAPIに関するドキュメントや資料が大量に出てきます。
今のところ新しくなったFirebaseに関する情報源としてまともに使えるのは公式のAPIドキュメントくらいなのですが、もちろん全て英語なので日本人の我々としてはなかなか扱いづらいところです…もう少し日本語情報が増えてくるといいんですけどね!


iOSのフロント側の実装については私は何もからんでいないのでわかりません!
Firebaseの使い方のアドバイスくらいはしたけど。
というわけで割愛。

結果

…というわけで、ほとんどFirebaseの紹介になってしまいましたが、作ったアプリはなんと東京予選Dの最優秀賞をいただくことになりまして、本戦に出場することになりました。やっほーい!( ・∀・)

自分一人でやっていただけだったら絶対無理だっただろうな。iOSのフロント部分を作ってくれた人、発表資料をおもろい感じに仕上げてくれた人、イラスト書いたり音素材作ってくれた人、メンバーそれぞれの力が合わせられたからこその受賞だったと思います。ありがとう。

本戦もがんばってこようと思います。

0 件のコメント:

コメントを投稿