LocoPartersエンジニアインターンの竜口です。PluginTweet広告を非表示にする2016-07-04Firebaseを軽い気持ちで触ってみたら使い勝手が予想を遥かに超えてきた話こんにちは。Partnersのエンジニア、鈴木です。わたくし普段は弊社サービスReluxのサーバーサイドの開発を担当していますが、元々はiOSエンジニアでした。1年近くも実務でのアプリ開発から離れているので、iOSは話題のキャッチアップで精一杯...。手を動かそう、ということで、話題のFirebaseをさわってみました。Firebaseとは?そもそもFirebaseとはなんでしょう?元々は米国で始まったmBaasであり、2014年にGoogleに買収されたことでその名が広く知れ渡りました。I/Oにてバージョンアップを発表、その中には無料で利用できるプッシュ通知の提供もありました。年始に同じくプッシュ通知サービスを提供するmBaasであるParseの終了アナウンスがあったため、代替サービスとして注目している人も多いのではないでしょうか。そんな時勢も相まって、今もっとも注目を集めるmBaasと言っても過言ではありません。何ができるの?Firebaseは実に多くの機能を提供しています。Reporting、Notificationsなどなど、どれも本来であればサーバー開発に大きな工数がかかるもの。これらの機能が高水準で提供されており、かつ無料で利用できる枠も大きいときたら、個人デベロッパーも企業も試さない手はないでしょう。便利そう、面白そう、かつフルスクラッチで作ったらとても大変そう、という理由です。いう名前からお察しのことと思いますが、特徴をざっくり箇条書きにするとこんな感じです。端末から送信されたデータがクラウド上に保存されるクラウド上のDBを介して、複数の端末、複数のユーザー間でデータの同期が可能であるオフラインでもローカル上でデータ保存され、オンラインになったタイミングで自動でクラウド上にデータ保存される特に便利なのが最後のオフライン時の挙動。これをフルスクラッチで実現しようと思ったらぞっとしますね...。AnalyticsのSDKがこんな仕組みだったと思うのですが、同じ技術を用いているのでしょうか。導入編それでは導入から見ていきましょう。Googleアカウントと連携できるので、1クリックで完了です。コンソールはこんな感じ。ほとばしるGoogle感。その後DLしたplistをプロジェクトに追加。最後にCocoapods経由で追加してあげれば導入完了です。ちなみにpodfileへの追加分はこんな感じ。'Firebase/Database'作るアプリ複数端末でのデータ同期、ときたらやはりチャットでしょうか。サンプルとして簡易的なチャットアプリを作ってみます。最先端のマテリアルデザインを取り入れた、最高にイケてるUIです。わかっているので何も言わないでください。ユーザー名とテキストを入れるだけの、簡素なものです。ソースコードでは実装に入っていきましょう。AppDelegateに以下を追記します。YES;}ViewControllerは以下。true;}これですべてです。やっつけコードなのはご容赦いただくとして、やっていることはこれだけです。DBの読み書きをするためのインスタンスを取得DBの変更を監視、変更があった場合の処理をブロック構文で書く(この場合はテキストの追加)送信ボタンが押下されたら、記入者とメッセージ内容を保存するDBの読み書きが本当にシンプルに記述できます。実行結果それでは実行結果を見てみましょう。コンソールにこんな具合で、リアルタイムにデータが追加されていきます。ちなみに編集や削除もこちらからできます。debug時にも便利ですね。今回シミュレータと実機でチャットを試してみましたが、問題なくやりとりできました。一方の端末でネットワークの接続を切って更新、ネットワーク再接続、というテストをしてみたところ、期待通り再接続時にもう一方でテキスト内容が更新されました。すごさがわかっていただけると思います。総括いかがでしたか?繰り返しになりますが、その導入の簡単さ、記述するソースコードの簡潔さ、オフライン時の挙動の便利さには目を見張るものがあります。今回はサンプルということで簡素な使い方しかしていませんが、色々とアイディアが膨らむサービスです。次回は他の機能も試していこうと思います。Messengerのchatbotリリースを振り返ってこんにちは、Loco技術Gの古田です。こちらのリンクからお試しいただけます。振り返りも兼ねてご紹介しようと思います。はじまりきっかけは社長の鶴の一声、、、ではなく。弊社は新しい技術や仕組みにいち早く取り組もうとする文化があります。Tryしてみよう!という流れになるのは自然なことでした。リリースをすることを決める。実装を考えていかないとこれってリリースできるかなとか本当に必要あるのかとかやらない言い訳はいくらでも出てきてしまいます。時代の流れというか人々の中心にチャットがあることは明らかであり、お客様とのコミュニケーションを大事にしている弊社にとってはうまく活かしていきたいプラットフォームでした。自分で作ろうと思った理由としては2つあり、1つは元から自分自身でもAIには興味持っていたこと。具体的な活用イメージを描くためにも直接作りたいという点でした。他社の事例も参考にしながらユーザーストーリーを作りました。良い事例がいくつも出ていたのでかなり参考になりました。(参考例)http://m.me/hiponchohttp://m.me/cnnhttp://m.me/techcrunchhttp://m.me/alterra.cc設計で気を付けたことは3つです。必要最低限のミニマムスタート。使ってもらえるものか。reluxらしい機能か。これを元にまずはGoogleSlide5,6枚の簡単なものを作成しました。今回はreluxの検索機能とコンシェルジュへと繋げる機能としました。実装まずは足がかりとして、こちらのイベントへ参加。雰囲気を察して、鸚鵡返しを作ると良さそうだと分かり実装開始。色々なサイトを参考にしながらHerokuを活用して実現できました。ここまでは意外とあっさり。周りの参加者もお昼頃にはそこまで完了している様子。次に、検索を実現するためにDBを参照する方法を検討。既存のrelux自体はPHPで書いているので、PHPでbotAPIを作成するという手もありました。Gatewayで実現することにしました。その勉強会ではLambda環境までいかずにタイムアップ。続きは宿題となりました。〜〜〜Lambdaの導入、ここは意外とはまりました。RDSを参照するためVPCにアクセスできるように設定しつつ、Messengerへ投稿するために外部へ通信できる必要がありました。通信できない状況が続きました。試行錯誤を繰り返し環境を構築。(方法はどこかで書けたら書きますw)Lambda使って鸚鵡返しに成功したことを確認できました。次はメッセージ内容の保存です。検索機能ではchatやりとりの中で入力した条件を利用するので、テキスト内容とメッセージの種類(日付・泊数・人数など)を保存する先としてAWSのDynamoDBを選択しました。これはLambdaで標準に使えるaws-sdkを使えば簡単に実装できます。最後に検索条件に従って宿泊できる施設を検索する機能です。これもSDKを使えばDBとの接続は難しくありません。クエリを書く際にはセキュリティに配慮して実装しました。途中気づいたのが写真付きのパネルは最大10個までという点です。本来relux上のエリア区分は12あります。10では全て選択できません。統合も検討しましたが、まずはサクッと進めるために取り扱い施設数が少ないエリアを除くという一時対応としました。他にも難しいなと思ったのはチャットだから自由な表現ができる点。同じ意味を伝えるのにも様々な表現がある。検索フローと関係なく、いつでも好きなテキストを打ててしまう。全ての言葉に正しく反応することを考え始めると時間がかかるので検索中とそれ以外とで状態を定義して、それぞれに一定の文言を返す様にしました。一連の操作が含まれている動画を用意する必要があります。出したはいいのですが、最初の申請では2週間以上待たされました。変だなと思っているところで社内の人間が他社に聞くと2日程度で完了したとのこと。普通ではなさそうなので思い切って審査をキャンセルし再度申請したところ2日で通過。審査完了したのにOKボタンを押し忘れてたのかな。2週間のロスは痛いですが、無事にリリースできました。リリース反響プレスリリース当日は凄まじい勢いで投稿数が増えました。普段は月に数名というところ、初日で1000名を超える方からアクセスいただきました。おかげで社内コンシェルジュも大慌て、嬉しい悲鳴でした。実際やってみることで世の中の注目度を身をもって感じました。おわりに世の中の流れに乗るということのインパクトの大きさを感じると共に初期に参加することによる反響の大きさ、その重要性を改めて実感。これからサービスや組織が大きくなっても初動スピードは大事にしていきます。今回は本当にプレイヤーとして存分に楽しませてもらいました。新しいことにtryするって良いですね〜ということで、こんなスピード感でいろいろ挑戦したい!というエンジニアの方がいれば、ぜひ一度弊社に遊びに来てください。Messengerのchatbotリリースを振り返ってTweet広告を非表示にする2016-06-14reluxのAndroidアプリコーディング規約こんにちは。Androidアプリ開発を担当している赤池です。