LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

かぞく参観日でプログラミング体験教室を開催しました

こんにちは!

プロダクトエンジニアリング部の吉永です。

今回は2020/12/28(月)に社内イベント「かぞく参観日」で開催したプログラミング体験教室について紹介したいと思います!

アジェンダ

続きを読む

LIFULL HOME'S Androidアプリ 6年間の変遷

こんにちは! 株式会社LIFULLでLIFULL HOME'Sアプリ Android開発チームの衛藤です!

Android開発チームでは、不動産業界の不を解消すべく、これまでに最新テクノロジーを率先しプロダクトに反映し続けてきました。 現在のアプリバージョンはv12.12.0(ブログ執筆時点)となっており、12回ものメジャーバージョンアップを重ねてきたのかと思うと感慨深いものがあります!

私がLIFULLにジョインしたのは2014年7月。それまで存在していたアプリをフルリニューアルし、新たなv1.0.0として開発をしている最中のことでした。 中途採用のためAndroidの開発知識は少しはあったものの、内製開発自体は初めての体験だったため、チーム開発を含め非常に新鮮だったことを今でも思い出します。

さて、今回の記事はその6年間でLIFULL HOME'S Androidアプリがどのような変遷を遂げてきたかについて紹介しようと思います!
仕事の箸休めタイムにでも、リラックスして眺めて頂けると嬉しいです!

LIFULL HOME'S AndroidアプリUI・UXの変遷

画面別に紹介

トップ画面

まずは起動時のトップ画面の変遷です。v1系からv12系になるまでの間、約4回のUI変更が行われています。

f:id:LIFULL-etotake:20210108181404p:plain f:id:LIFULL-etotake:20210108181430p:plain

v1.0.0では、完全リニューアル版として新規リリースされました。ToolbarやNavigation Drawerが導入され、より使いやすくなったアプリとして生まれ変わりました。
トップ画面はしばらくこの状態が続き、v4.0.0でマテリアルデザインが導入されることで、より洗練されたUXとなりました。

v4.6.0では「特集」という、検索条件が予め設定されたテーマを検索できる機能が追加されました。

v4.8.0では、特集がタブ化され、ここで初めてBottomNavigationが導入されています。

さらにv4.10.0では、タブが廃止され、特集がトップ画面上部のエリアに大きく配置換えされました。この上部のエリアは、Firebase RemoteConfig + ReatimeDatabaseにより動的に変更可能な領域となっており、季節要因やその他状況に応じて柔軟に特集を出し分けることが可能となっています。
仕組みについては、以前iOSメンバーがイベントで登壇した資料があげられています。

www.slideshare.net

現在の最新バージョンv12系では一気にリニューアルされ、トップ画面が2つに別れています(後述のホーム画面)。

続きを読む

Google Developers ML Summit に登壇しました

こんにちは。LIFULL でネイティブアプリのスペシャリストをしている菊地です。 普段は LIFULL HOME'S アプリ(iOS, Android)の開発チームで Tech Lead をしています。

2020年12月3日(木)、4日(金)に開催された Google Developers ML Summit に BigQuery で実現するユーザーの傾向に合わせたレコメンドシステムというセッションで登壇させていただきました。

cloudonair.withgoogle.com

当日はまさかのトップバッターということもあり、ライブ Q&A でどういった質問が来るか?そもそも質問くるのか!?という緊張感が凄かったです。

ここでは時間の都合でセッションの中で回答できなかったことや、もう少し詳しいお話を書かせていただければと思います。

Google Developers ML Summit とは

Google Developers ML Summit は年に一度、Google Cloud 主催で ML(Machine Learning) に関する技術・事例の紹介などを行うために様々な開発者が一同に集まるイベントになります。

データサイエンティスト、アプリケーション開発者向けに、最新の Google Cloud AI や、機械学習サービスの活用例の紹介。 TensorFlow、Cloud AI などの活用事例、機械学習モデルの開発や利用、データサイエンティスト/機械学習エンジニアを繋げるプラットフォーム「Kaggle」の紹介

公式サイトより

講演資料はこちらで公開されています

セッション内容

今回、登壇させていただいたセッションは、BigQuery で実現するユーザーの傾向に合わせたレコメンドシステムになります。

内容としては、LIFULL HOME'S の Android アプリに実装した「お気に入り傾向が似ているほかのユーザーがお気に入りに入れている物件をレコメンドする」機能について、開発のきっかけや、どのようなものを比較・検討したうえで実現したか?というものを発表しております。

f:id:LIFULL-kikuchk:20201222151330p:plain

※ こちらもチェック!好みが近い人が閲覧した物件と表示されている部分が今回実装したものになります。

開発する際の課題と解決

開発する際に課題として上がってきた項目は主に下記の3つになります。

1. レコメンドに必要な学習データをどう集めるか?

レコメンドを行うためには学習データとしてユーザーの行動を集める必要があります。 今回は、Firebase Analytics を既に導入していたため、「物件をお気に入りに追加した」というイベントを計測し、Firebase にある BigQuery Export を利用することで実現しました。

2. レコメンドエンジンをどのように構築するか?

レコメンドエンジンの実現には、GCP では様々な方法で実現することができます。

検討した方法
  • Recommendations AI
  • BigQuery ML
  • Cloud Data Proc
  • AI Platform
選択したもの

元々の選択肢にはなかった BigQuery による協調フィルタリング を選択しました。 ※ 詳細についてはぜひセッションまたはスライドをご覧いただければと思います。

3. レコメンド結果をアプリからどうやって利用するか?

レコメンドエンジンが抽出したレコメンド結果をアプリから利用するためにどこに置くか?について検討する必要がありました。

アプリから呼び出せる API を作って BigQuery を直接読み取る、別で DB を用意するなど様々なものが考えられます。

今回は、Firestore にユーザー毎の Document が存在していたことから Document 配下に直接書き込む事で、アプリからの直接参照も行えるなどメリットがあったため、Firestore を選択することにしました。

構成図

今回、最終的に構築されたレコメンドシステムのアーキテクチャはこちらの図のようになります。

f:id:LIFULL-kikuchk:20201222183933p:plain

レコメンドシステム全体の処理としては下記のような3つで構成されております。

  1. アプリから「物件をお気に入りに追加した」というイベントを Firebase Analytics で取得し、BigQuery Export を用いて BigQuery にデータをためる
  2. Cloud Scheduler で毎日一度起動する Cloud Functions(Pub/Sub 経由) が BigQuery に対してクエリで協調フィルタリングを行い、抽出結果を Firestore に格納する
  3. アプリから Firestore に対して、ユーザー毎の Document にアクセスし、3 で生成された抽出結果(レコメンド結果)を取得する

開発秘話(裏話)

開発のきっかけ

LIFULL HOME'S アプリの開発チームでは、普段からこういう機能を提供できないか?こんなことをしたら楽しんでもらえないか?という話をかなりの頻度で話しています。 これはそういうことを話す時間を設けているわけではなく、ただの雑談でそういう話をすることがあり、雑談が盛り上がってそのまま開発までしてしまうことがあります。

今回の不動産物件レコメンドシステムについては、アプリ内でユーザーの行動に合わせたレコメンドって少ないよね?好みとかに合わせたものってないかも?というところから始まり、ECなどでよく見る "この商品をお気に入りに入れた人はこちらもお気に入りに入れています" みたいなのが提供できるといいかも!と盛り上がっていったことがきっかけになります。

盛り上がった後には、ちゃんと既に提供しているレコメンドとの違いや、このレコメンドで提供できる価値があるか?というところも話した上で検討が始まりました。

開発までにかかった日数

今回、調査や検討にはかなりの時間がかかりました。

というのも雑談から始まったプロジェクトであること、最初はチーム全体ではなく数名で盛り上がって調べていた、ということが挙げられます。

設計や調査に時間をかけたこともあり、一番時間がかかったのはアプリでどう見せるか?という企画面になります。 全体を通しては実際に開発することが決まってからリリースまでには一ヶ月もかからず開発することができました。

iOS アプリとの相性

今回、LIFULL HOME'S の Android アプリで開発を行いましたが、開発したレコメンドシステムは、すべてバックエンド側のため iOS アプリでも利用が可能です。

いつ頃リリースされるか?まったく同じ内容でリリースされるか?ということは決まっておりませんが、それぞれのプラットフォームのユーザーの特性やアプリの体験に合わせた形で再利用して活用できればと考えています。

AWS や Azure ではなく GCP で開発した理由

LIFULL HOME'S アプリでは、以前から Firebase を導入しています。またマイクロサービスとして AWS、GCP の両方を使い分けています。 そのため、AWS か GCP のどちらかでの開発を行うというのが決まった状態でスタートしました。

最終的には、レコメンドエンジンの中核となる BigQuery に合わせたというのがありますが、Cloud Functions のトリガーによる Firebase の拡張が豊富なこと、既に構築しているアプリ向けプッシュ通知のシステムを GCP で構築していたため、より手軽に開発ができるということで GCP を選択しました。

予算のお話

セッション中に何度も「費用感が・・・」といった形で何度も予算の話を出しておりました。 今回のプロジェクトは元々予算がなく、他のプロジェクトの予算を削減してこちらに回すという形で捻出しました。 費用をかければもっと手軽にレコメンドシステムを実現することは可能ですが、それぞれの構成案の費用間やメリット・デメリットを知っておくことは今後のためにもなると考え、徹底的に費用に拘ってレコメンドを実現する手段を探すことにしました。

人件費なども考えると普通に BigQuery ML などで構築した方が・・・という場合もありますが、同じようなことを検討されている方々でそれぞれの環境に合わせてどうやって実現していくか?ということを考える際の参考になれば幸いです。

データサイエンティストとの関わり方

今回は、レコメンドエンジンの核となる BigQuery で協調フィルタリングを行う部分について、データサイエンティストに相談に乗っていただきました。

BigQuery で協調フィルタリングでがきることはわかっていましたが、実際にクエリを書くとなるとアプリチームのスキルだけでは時間がかかってしまいます。 そのため、普段から BigQuery なども使いこなしているプロに相談しようとなり、弊社のデータサイエンティストにこういうことをやりたいんですけどと相談したところ、数時間後には試験的なクエリを提供していただき開発を一気に進めることができました。

まとめ

今回、Google Developers ML Summit で発表させていただいた BigQuery で実現するユーザーの傾向に合わせたレコメンドシステムについてご紹介させていただきました。 こちらで紹介させていただいたレコメンドは、LIFULL HOME'S Android アプリ内にてご利用いただけます!!

※ レビューいただいたコメントは中の人が見て返信してますので、ぜひアプリの使い勝手やご意見などを気軽にコメントいただけると嬉しいです!いただいたコメントはアプリの改善にも活かしていきます!

play.google.com

セッションの中でも触れましたが、個人的には BigQuery ML を試したいという思いはあったのですが、お金という現実と向き合って"やりたいことをどう実現するか?"と"費用という問題とどう戦っていくか?"というところについてこだわって進めたプロジェクトになります。 今回の内容がレコメンドを作ってみたいと考えている方の参考になれば幸いです。それぞれの構成の詳細についてはセッションスライドに記載があるので、ぜひご覧ください。

LIFULLではメンバーを募集しております! カジュアル面談もありますのでご興味ある方は是非ご参加ください!

hrmos.co

新卒2年目がLINE物件問合わせで成長できた話

こんにちは。
プロダクトエンジニアリング部の岩見です。
賃貸のバックエンドを主に担当しています。

私が新卒入社して以来の一番大きな施策であるLINE物件問合せについていろいろとお話できればと思います。
初投稿です!よろしくお願いします!!

続きを読む

第9回『創民祭』を初のリモート開催しました!

こんにちは。クリエイターの日運営委員のヨンジュンです。社内のモノづくりイベント『創民祭』が開催されましたので、その様子を共有させていただきます。

今回はコロナ禍のため、Spatial Chatというサービスを使い、初のリモートによる創民祭開催となりました! f:id:LIFULL-heoyon:20201223182632p:plain

創民祭とは?

創民祭(そうみんさい)とは、業務や「クリエイターの日」、プライベートで創った物など、LIFULL社員が作ったプロダクトをお披露目するイベントです。近年はWebに限らず、ジオラマやイラスト等、多種多様なプロダクトが展示されています。

前回の様子はこちら

www.lifull.blog

続きを読む

LIFULL秘書のウィズコロナ

LIFULL秘書の新垣です。この記事はLIFULLアドベントカレンダー2の24日目です。 担当させていただいているお二人(取締役、CTO)の管掌がいずれも主にエンジニア組織のため、今年も参加させていただくことになりました。

昨年の記事はこちら↓

www.lifull.blog

「秘書って在宅勤務できるの?」と聞かれることが多かった2020年。

LIFULLでは新しい働き方として在宅勤務とオフィス勤務を併用した勤務ルールを適用しており、これは役員も秘書も同様です。

そこで今回は、コロナ前後における業務変化について3つに限定し紹介します。

  1. スケジュール調整の変化

  2. コミュニケーションの変化

  3. 戦略発信量の変化

続きを読む

セキュリティエンジニアがKubernetesチームにジョインした話

こんにちは!テクノロジー本部の花塚です!
最近気になっている脆弱性は、Envoyに見つかったHeap Buffer OverflowであるCVE-2019-18801です。

この記事では、セキュリティエンジニアがジョブチェンジをしてKubernetesチームにジョインした話、その後の取り組みについて紹介させていただきます。

私事ですが、今年の10月にKubernetesチームにジョインすることになりました。 Kubernetesチームは、以下の記事で、「KEELチーム」として紹介されています。

www.lifull.blog

KEELチームは、Kubernetesをベースとしたアプリケーション実行基盤を開発しています。 詳しくは上記の記事をご覧ください。

続きを読む