SlideShare uma empresa Scribd logo
1 de 65
最新技術に挑戦し続ける
LIFULL HOME'Sアプリの開発について
2018年2月15日
株式会社LIFULL 高橋庸介
Developers Summit 2018
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
高橋庸介
• 2015年 株式会社LIFULL入社
• LIFULL HOME’Sアプリ開発担当
• iOS, tvOS
• API
• AWS
• Firebase
自己紹介
2
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
LIFULL
3
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。4
LIFULL HOME’Sアプリ
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
本発表のテーマ
5
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。6
プロダクトに導入するまでが
新技術への挑戦です
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。7
Android
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。8
Android
Google Play 「ベスト オブ 2017」 デイリーヘルパー部門 入賞
一昨年のGoogle Play 「ベスト オブ 2016」 ベストローカルアプリ部門に続いて2年連続
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。9
iOS
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。10
iOS
AppStore
Today
掲載
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。11
新技術をプロダクトに導入したことで
評価に繋がっている
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
• アイデア提案
• 導入時の困難に立ち向かう
• 技術的負債の返済
12
新技術を導入するための課題
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。13
• アイデア提案
• 導入時の困難に立ち向かう
• 技術的負債の返済
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
長期目線で評価してもらわないとつらい
短期目線しかない組織では提案が通りにくい
アイデア評価 - 新技術アイデアを評価する
14
根気強く意識を変えていくしかない
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。15
アイデア評価 - 風土づくりにつながる活動
• Google I/O・WWDC動画鑑賞会
新機能だけでなくUXや画像フォーマットなどのセッションも
• デザイン勉強会ランチ
最近のアプリデザインの流行を追う
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。16
アイデア評価 - モックで提案する
モックで提案することで採用率アップ
• 言語化できないよさを伝えられる
• 実現可能性を示せる
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。17
アイデア評価 - クリエイターの日
1Qに7日間だけ普段の業務以外のことに挑戦できる制度
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。18
根気強く風土づくり
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。19
• アイデア提案
• 導入時の困難に立ち向かう
• 技術的負債の返済
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。20
導入時の困難に立ち向かう - 新技術には困難がつきもの
新技術導入時に直面する事態
• 調査・学習が難しい
• 予期せぬことが起こる
これらを乗り越えて初めてプロダクトに導入できる
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
Android Instant Apps
21
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。22
Instant Apps
ネイティブアプリをインストールをしなくても
使えるようにする技術
対応デバイスは世界で5億台以上
(2017/9/6時点)
まだ対応事例が少ない
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。23
Instant Apps - 大規模な実装見直しが必要になる
Instant Appsに対応したモジュール構造にするために
全体の依存関係と実装見直しが必要に
作業内容
• コードの依存関係を洗い出し
• 依存関係の整理、似た機能の統合、容量削減
• Instant Appsとしての機能開発
• 動かない機能の復旧
• テスト
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。24
Instant Apps - xmlリソースの参照問題
特定条件下でのリソースアクセスで
「Resource Not Found」になる
機能モジュール内xmlからのリソースアクセスはBaseモジュールのRを参照してしまう
(ビルドが通ってしまうので気づかない)
Feature Base
bg_image bg_image
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
• Google Analytics - Android 7で動かなかった
• Crashlytics - 今では対応済み
• DataBinding - 今でもBaseモジュールでしか動かない
Issue Tracker、Stack Overflowを見て調査
InstantApps - ライブラリがInstant Appsに対応していない
25
https://qiita.com/inuko/items/c93d9963cdc97136219b
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
Tango
26
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。27
Tango - LIFULL HOME’S Room Style AR
実際のお部屋にカーテンのイメージデータを表示すること
で、模様替え後のお部屋をリアルにシミューレション
https://play.google.com/store/apps/details?id=com.lifull.homes.android.roomstyle_ar
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。28
Tango - 早すぎた
Tangoのサポートは2018年3月1日に終了
対応端末は2端末のみ
• Phab 2 Pro
• ZenFone AR
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
ARKit
29
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。30
ARKit - AR間取り計測
ホームズくんと一緒にお部屋を計測
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。31
ARKit - WWDC後のブレスト
A:「家具とか置けたらいいよね!」
B:「ホームズくんが召喚できたら面白いよね!」
C:「それはどれぐらいでできるの?」
一同: 「…」
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。32
ARKit - WWDC後のブレスト
A:「家具とか置けたらいいよね!」
B:「ホームズくんが召喚できたら面白いよね!」
C:「それはどれぐらいでできるの?」
一同: 「…」
Tangoやった人:「モデルありますよ」
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。33
ホームズくんモデルの取り込み
Blenderで作成したホームズくんモデルを
取り込み
応用例
クリスマス仕様
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。34
ARKit - ホームズくんのモデルで可能になったこと
ホームズくんとコミュニケーションしながらユーザを誘導
専門用語による説明ではなくホームズくんとの対話
床認識操作の誘導 認識完了の通知
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
AppleTV
35
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。36
AppleTV - 家族で住まい探し
住まい探しは家族の問題
家族で住まい探しをする新しい体験を提案したい
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。37
AppleTV - PodspecにtvOSがあるはどれ?
• AWSCore (AWSSDK)
• Firebase
• GoogleAnalytics
• GoogleMaps
• Fabric
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。38
AppleTV - Fabricだけ(2018/2/14現在)
• AWSCore (AWSSDK)
• Firebase
• GoogleAnalytics
• GoogleMaps
• Fabric
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。39
AppleTV - ライブラリが対応してないなら自力で実装
AWS接続部分はリファレンスを読みながら自力で実装
https://docs.aws.amazon.com/ja_jp/general/latest/gr/Welcome.html
Google AnalyticsはScreenやEventを送るぐらいなら簡単
• https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide?hl=ja
• https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters?hl=j
a
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
iOSに新規インストールするとtvOSにも
インストールされる設定
その代わりtvOSだけ配信停止はできな
後での解除できない
※ 審査等はiOSに影響しません
40
AppleTV - Universal Purchaseにするか?
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。41
AppleTV - AppleTVのストア掲載
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
新技術には困難がつきもの
リスクを取る覚悟をする
42
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。43
• アイデア提案
• 導入時の困難に立ち向かう
• 技術的負債の返済
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
iOSアプリリニューアル
44
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。45
技術的負債の返済 - iOSアプリが抱えていた技術的負債
アプリのメンテナンス性の低下
メンバー入れ替わりによるコードのブラックボックス化
• 新機能追加のコスト増加
• 仕様把握漏れによるバグの発生
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
新技術を導入しやすい設計
→ 機能追加・修正時の影響範囲がわかりやすい設計
技術的負債の返済 - 設計方針
46
統一化
抽象化
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。47
技術的負債の返済 - iOS HOME’S Architecture
View
Presenter
UseCase
Repository
画面表示やイベント検知を主に行う
表示する情報取得と加工を行う
アプリケーション共通の処理を行う
サーバやデータベースへの
アクセスを抽象化する
レイヤごとの役割を明確化
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。48
技術的負債の返済 - 特定の枠組みに依存しない
UseCase
Repository
RepositoryProtocol
UseCaseはどこからデータを取得して
いるか意識しない
ラリブラリや外部サービスの切り替え
が容易に
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。49
技術的負債の返済 - 型の命名規則の統一
実装するものの役割からレイヤを決める
→ 型名は主に扱うデータ名 + レイヤ名
• PropertiesPresenter: 物件情報の表示用加工(物件一覧画面の表示
)
• PropertiesUseCase: 物件に関する処理(物件検索)
• PropertiesRepository: 物件情報の取得(物件検索クライアント呼
び出し)
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。50
技術的負債の返済 - UI実装の統一
ローディング エラー
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
抽象化と統一化で
新技術導入のコストを減らす
51
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
次の挑戦への繋がり
52
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。53
次の挑戦への繋がり - 継続的に新技術に挑戦するサイクル
実績ができたことが
次のアイデアへのエネルギーを生む
アイデア提案プロダクトへの導入
技術力UP
モチベーションUP
プロジェクト化
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。54
次の挑戦への繋がり - アプリの成長
自分の強みを発揮できる分野 × チーム開発
→ 多面的にアプリを改善
AWS
AR
ライブラリ
機械学習
Firebase
CI
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。55
次の挑戦への繋がり - アプリを介したチーム力強化
他メンバーにとっても新機能は「自分ごと」に
→ チーム力の強化
テスト
新技術導入
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
新しいことをやってくるのは
いつもLIFULL
…と言われたい!
56
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。57
まとめ
プロダクトに導入するまでが
新技術への挑戦です
• アイデアを提案しやすい風土を根気強く作ろう
• 新技術には困難がつきものなので、リスクを取る覚悟を持とう
• 技術的負債は返済して
新技術を導入しやすい状態を作ろう
58
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
おまけ
59
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
Firebaseを用いた
検索テーマ配信
60
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。61
検索テーマとは
「どんな部屋に住みたいか?」
「どんな家を買いたいか?」
をユーザに選択してもらい、それ
に合った検索条件を設定する機能
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。62
検索テーマの配信手段
画像URL + 検索条件をアプリに配信したい
Server
画像URL: http://www.homes.co.jp/image/12345.png
検索条件: market=rent&type=rennovation
RemoteConfig + RealtimeDatabase
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
検索テーマの配信手段
Condition: ios
↑配信先
Value: 001,002,005,010
↑テーマIDのリスト
Parameter Key: theme_rent
Condition: android
Value: 002,003,004,006
them
e
00
1
002
query: market=rent&type=rennovation
image_url: …
name: リノベ・リフォー
ム
← テーマID
Realtime
Database
RemoteConfig
63
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。64
メリット
RemoteConfigとRealtimeDatabaseの強力な機能の恩恵を得ることができる
。
サーバは不要。難しいことはSDKがやってくれる。
データ同期
• 同期に関する実装不要
• 効率的な通信
• オフライン対応
配信先の切り替え
• セグメントごと切り替え
• A/Bテストも容易
A B
© LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。
応用
固定になっているデータを動的に変更できるようにしてみる。
• plist等で管理している静的なデータ
• WebAPIから取得している固定のデータ
よりユーザに合った情報を提供できるかも。
plist Realtime
Database
RemoteConfig
65

Mais conteúdo relacionado

Semelhante a 最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について

さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...Naruhiko Ogasawara
 
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来馮 富久
 
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)LIFULL Co., Ltd.
 
大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!
大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!
大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!softlayerjp
 
いまさら聞けない!HTML5超入門
いまさら聞けない!HTML5超入門いまさら聞けない!HTML5超入門
いまさら聞けない!HTML5超入門Monaca
 
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略Fumiya Sakai
 
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側についてLIFULL Co., Ltd.
 
AWS SUMMIT TOKYO 2012 - BASCULE SESSION
AWS SUMMIT TOKYO 2012 - BASCULE SESSIONAWS SUMMIT TOKYO 2012 - BASCULE SESSION
AWS SUMMIT TOKYO 2012 - BASCULE SESSIONMariko Nishimura
 
[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界
[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界
[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界Amazon Web Services Japan
 
HTML5 IMPACT from Multi Device development for NicoNico
HTML5 IMPACT from Multi Device development for NicoNicoHTML5 IMPACT from Multi Device development for NicoNico
HTML5 IMPACT from Multi Device development for NicoNicoSho KUSANO
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきことtvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと庸介 高橋
 
shibuya.apk vol21
shibuya.apk vol21shibuya.apk vol21
shibuya.apk vol21Takeshi Eto
 
Cobhack2020
Cobhack2020Cobhack2020
Cobhack2020s-ueno
 

Semelhante a 最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について (17)

さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
 
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
 
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
 
大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!
大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!
大容量ファイルを爆速で転送! 世界を飛び回る! AsperaとSoftLayerの最強コラボ!
 
Global Azure Boot Camp 2019
Global Azure Boot Camp 2019Global Azure Boot Camp 2019
Global Azure Boot Camp 2019
 
いまさら聞けない!HTML5超入門
いまさら聞けない!HTML5超入門いまさら聞けない!HTML5超入門
いまさら聞けない!HTML5超入門
 
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
 
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
 
AWS SUMMIT TOKYO 2012 - BASCULE SESSION
AWS SUMMIT TOKYO 2012 - BASCULE SESSIONAWS SUMMIT TOKYO 2012 - BASCULE SESSION
AWS SUMMIT TOKYO 2012 - BASCULE SESSION
 
[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界
[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界
[AWS Summit 2012] 事例セッション #2 Bascule Meets AWS! クラウドが加速させる デジタルクリエイションの世界
 
UE4におけるレベル制作事例
UE4におけるレベル制作事例  UE4におけるレベル制作事例
UE4におけるレベル制作事例
 
HTML5 IMPACT from Multi Device development for NicoNico
HTML5 IMPACT from Multi Device development for NicoNicoHTML5 IMPACT from Multi Device development for NicoNico
HTML5 IMPACT from Multi Device development for NicoNico
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきことtvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと
 
WordPressのセキュリティ対策
WordPressのセキュリティ対策WordPressのセキュリティ対策
WordPressのセキュリティ対策
 
shibuya.apk vol21
shibuya.apk vol21shibuya.apk vol21
shibuya.apk vol21
 
Cobhack2020
Cobhack2020Cobhack2020
Cobhack2020
 

Mais de 庸介 高橋

Cookpad TechConf 2019 - Build Chat with Firestore
Cookpad TechConf 2019 - Build Chat with FirestoreCookpad TechConf 2019 - Build Chat with Firestore
Cookpad TechConf 2019 - Build Chat with Firestore庸介 高橋
 
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側庸介 高橋
 
LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信庸介 高橋
 
Jenkins + Deploygateを使った簡単ベータ配信
Jenkins + Deploygateを使った簡単ベータ配信Jenkins + Deploygateを使った簡単ベータ配信
Jenkins + Deploygateを使った簡単ベータ配信庸介 高橋
 
Swift3とObjective-Cのブリッジでハマったこと
Swift3とObjective-CのブリッジでハマったことSwift3とObjective-Cのブリッジでハマったこと
Swift3とObjective-Cのブリッジでハマったこと庸介 高橋
 
家族の「ただいま」を教えてくれるキーホルダー NFC版
家族の「ただいま」を教えてくれるキーホルダー NFC版家族の「ただいま」を教えてくれるキーホルダー NFC版
家族の「ただいま」を教えてくれるキーホルダー NFC版庸介 高橋
 
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダーおうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー庸介 高橋
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック庸介 高橋
 
カラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りましたカラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りました庸介 高橋
 

Mais de 庸介 高橋 (9)

Cookpad TechConf 2019 - Build Chat with Firestore
Cookpad TechConf 2019 - Build Chat with FirestoreCookpad TechConf 2019 - Build Chat with Firestore
Cookpad TechConf 2019 - Build Chat with Firestore
 
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
 
LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信
 
Jenkins + Deploygateを使った簡単ベータ配信
Jenkins + Deploygateを使った簡単ベータ配信Jenkins + Deploygateを使った簡単ベータ配信
Jenkins + Deploygateを使った簡単ベータ配信
 
Swift3とObjective-Cのブリッジでハマったこと
Swift3とObjective-CのブリッジでハマったことSwift3とObjective-Cのブリッジでハマったこと
Swift3とObjective-Cのブリッジでハマったこと
 
家族の「ただいま」を教えてくれるキーホルダー NFC版
家族の「ただいま」を教えてくれるキーホルダー NFC版家族の「ただいま」を教えてくれるキーホルダー NFC版
家族の「ただいま」を教えてくれるキーホルダー NFC版
 
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダーおうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
カラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りましたカラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りました
 

最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について

  • 2. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 高橋庸介 • 2015年 株式会社LIFULL入社 • LIFULL HOME’Sアプリ開発担当 • iOS, tvOS • API • AWS • Firebase 自己紹介 2
  • 3. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 LIFULL 3
  • 4. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。4 LIFULL HOME’Sアプリ
  • 5. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 本発表のテーマ 5
  • 6. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。6 プロダクトに導入するまでが 新技術への挑戦です
  • 7. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。7 Android
  • 8. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。8 Android Google Play 「ベスト オブ 2017」 デイリーヘルパー部門 入賞 一昨年のGoogle Play 「ベスト オブ 2016」 ベストローカルアプリ部門に続いて2年連続
  • 9. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。9 iOS
  • 10. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。10 iOS AppStore Today 掲載
  • 11. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。11 新技術をプロダクトに導入したことで 評価に繋がっている
  • 12. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 • アイデア提案 • 導入時の困難に立ち向かう • 技術的負債の返済 12 新技術を導入するための課題
  • 13. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。13 • アイデア提案 • 導入時の困難に立ち向かう • 技術的負債の返済
  • 14. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 長期目線で評価してもらわないとつらい 短期目線しかない組織では提案が通りにくい アイデア評価 - 新技術アイデアを評価する 14 根気強く意識を変えていくしかない
  • 15. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。15 アイデア評価 - 風土づくりにつながる活動 • Google I/O・WWDC動画鑑賞会 新機能だけでなくUXや画像フォーマットなどのセッションも • デザイン勉強会ランチ 最近のアプリデザインの流行を追う
  • 16. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。16 アイデア評価 - モックで提案する モックで提案することで採用率アップ • 言語化できないよさを伝えられる • 実現可能性を示せる
  • 17. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。17 アイデア評価 - クリエイターの日 1Qに7日間だけ普段の業務以外のことに挑戦できる制度
  • 18. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。18 根気強く風土づくり
  • 19. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。19 • アイデア提案 • 導入時の困難に立ち向かう • 技術的負債の返済
  • 20. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。20 導入時の困難に立ち向かう - 新技術には困難がつきもの 新技術導入時に直面する事態 • 調査・学習が難しい • 予期せぬことが起こる これらを乗り越えて初めてプロダクトに導入できる
  • 21. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 Android Instant Apps 21
  • 22. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。22 Instant Apps ネイティブアプリをインストールをしなくても 使えるようにする技術 対応デバイスは世界で5億台以上 (2017/9/6時点) まだ対応事例が少ない
  • 23. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。23 Instant Apps - 大規模な実装見直しが必要になる Instant Appsに対応したモジュール構造にするために 全体の依存関係と実装見直しが必要に 作業内容 • コードの依存関係を洗い出し • 依存関係の整理、似た機能の統合、容量削減 • Instant Appsとしての機能開発 • 動かない機能の復旧 • テスト
  • 24. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。24 Instant Apps - xmlリソースの参照問題 特定条件下でのリソースアクセスで 「Resource Not Found」になる 機能モジュール内xmlからのリソースアクセスはBaseモジュールのRを参照してしまう (ビルドが通ってしまうので気づかない) Feature Base bg_image bg_image
  • 25. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 • Google Analytics - Android 7で動かなかった • Crashlytics - 今では対応済み • DataBinding - 今でもBaseモジュールでしか動かない Issue Tracker、Stack Overflowを見て調査 InstantApps - ライブラリがInstant Appsに対応していない 25 https://qiita.com/inuko/items/c93d9963cdc97136219b
  • 26. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 Tango 26
  • 27. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。27 Tango - LIFULL HOME’S Room Style AR 実際のお部屋にカーテンのイメージデータを表示すること で、模様替え後のお部屋をリアルにシミューレション https://play.google.com/store/apps/details?id=com.lifull.homes.android.roomstyle_ar
  • 28. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。28 Tango - 早すぎた Tangoのサポートは2018年3月1日に終了 対応端末は2端末のみ • Phab 2 Pro • ZenFone AR
  • 29. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 ARKit 29
  • 30. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。30 ARKit - AR間取り計測 ホームズくんと一緒にお部屋を計測
  • 31. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。31 ARKit - WWDC後のブレスト A:「家具とか置けたらいいよね!」 B:「ホームズくんが召喚できたら面白いよね!」 C:「それはどれぐらいでできるの?」 一同: 「…」
  • 32. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。32 ARKit - WWDC後のブレスト A:「家具とか置けたらいいよね!」 B:「ホームズくんが召喚できたら面白いよね!」 C:「それはどれぐらいでできるの?」 一同: 「…」 Tangoやった人:「モデルありますよ」
  • 33. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。33 ホームズくんモデルの取り込み Blenderで作成したホームズくんモデルを 取り込み 応用例 クリスマス仕様
  • 34. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。34 ARKit - ホームズくんのモデルで可能になったこと ホームズくんとコミュニケーションしながらユーザを誘導 専門用語による説明ではなくホームズくんとの対話 床認識操作の誘導 認識完了の通知
  • 35. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 AppleTV 35
  • 36. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。36 AppleTV - 家族で住まい探し 住まい探しは家族の問題 家族で住まい探しをする新しい体験を提案したい
  • 37. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。37 AppleTV - PodspecにtvOSがあるはどれ? • AWSCore (AWSSDK) • Firebase • GoogleAnalytics • GoogleMaps • Fabric
  • 38. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。38 AppleTV - Fabricだけ(2018/2/14現在) • AWSCore (AWSSDK) • Firebase • GoogleAnalytics • GoogleMaps • Fabric
  • 39. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。39 AppleTV - ライブラリが対応してないなら自力で実装 AWS接続部分はリファレンスを読みながら自力で実装 https://docs.aws.amazon.com/ja_jp/general/latest/gr/Welcome.html Google AnalyticsはScreenやEventを送るぐらいなら簡単 • https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide?hl=ja • https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters?hl=j a
  • 40. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 iOSに新規インストールするとtvOSにも インストールされる設定 その代わりtvOSだけ配信停止はできな 後での解除できない ※ 審査等はiOSに影響しません 40 AppleTV - Universal Purchaseにするか?
  • 41. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。41 AppleTV - AppleTVのストア掲載
  • 42. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 新技術には困難がつきもの リスクを取る覚悟をする 42
  • 43. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。43 • アイデア提案 • 導入時の困難に立ち向かう • 技術的負債の返済
  • 44. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 iOSアプリリニューアル 44
  • 45. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。45 技術的負債の返済 - iOSアプリが抱えていた技術的負債 アプリのメンテナンス性の低下 メンバー入れ替わりによるコードのブラックボックス化 • 新機能追加のコスト増加 • 仕様把握漏れによるバグの発生
  • 46. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 新技術を導入しやすい設計 → 機能追加・修正時の影響範囲がわかりやすい設計 技術的負債の返済 - 設計方針 46 統一化 抽象化
  • 47. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。47 技術的負債の返済 - iOS HOME’S Architecture View Presenter UseCase Repository 画面表示やイベント検知を主に行う 表示する情報取得と加工を行う アプリケーション共通の処理を行う サーバやデータベースへの アクセスを抽象化する レイヤごとの役割を明確化
  • 48. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。48 技術的負債の返済 - 特定の枠組みに依存しない UseCase Repository RepositoryProtocol UseCaseはどこからデータを取得して いるか意識しない ラリブラリや外部サービスの切り替え が容易に
  • 49. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。49 技術的負債の返済 - 型の命名規則の統一 実装するものの役割からレイヤを決める → 型名は主に扱うデータ名 + レイヤ名 • PropertiesPresenter: 物件情報の表示用加工(物件一覧画面の表示 ) • PropertiesUseCase: 物件に関する処理(物件検索) • PropertiesRepository: 物件情報の取得(物件検索クライアント呼 び出し)
  • 50. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。50 技術的負債の返済 - UI実装の統一 ローディング エラー
  • 51. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 抽象化と統一化で 新技術導入のコストを減らす 51
  • 52. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 次の挑戦への繋がり 52
  • 53. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。53 次の挑戦への繋がり - 継続的に新技術に挑戦するサイクル 実績ができたことが 次のアイデアへのエネルギーを生む アイデア提案プロダクトへの導入 技術力UP モチベーションUP プロジェクト化
  • 54. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。54 次の挑戦への繋がり - アプリの成長 自分の強みを発揮できる分野 × チーム開発 → 多面的にアプリを改善 AWS AR ライブラリ 機械学習 Firebase CI
  • 55. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。55 次の挑戦への繋がり - アプリを介したチーム力強化 他メンバーにとっても新機能は「自分ごと」に → チーム力の強化 テスト 新技術導入
  • 56. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 新しいことをやってくるのは いつもLIFULL …と言われたい! 56
  • 57. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。57 まとめ プロダクトに導入するまでが 新技術への挑戦です • アイデアを提案しやすい風土を根気強く作ろう • 新技術には困難がつきものなので、リスクを取る覚悟を持とう • 技術的負債は返済して 新技術を導入しやすい状態を作ろう
  • 58. 58
  • 59. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 おまけ 59
  • 60. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 Firebaseを用いた 検索テーマ配信 60
  • 61. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。61 検索テーマとは 「どんな部屋に住みたいか?」 「どんな家を買いたいか?」 をユーザに選択してもらい、それ に合った検索条件を設定する機能
  • 62. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。62 検索テーマの配信手段 画像URL + 検索条件をアプリに配信したい Server 画像URL: http://www.homes.co.jp/image/12345.png 検索条件: market=rent&type=rennovation RemoteConfig + RealtimeDatabase
  • 63. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 検索テーマの配信手段 Condition: ios ↑配信先 Value: 001,002,005,010 ↑テーマIDのリスト Parameter Key: theme_rent Condition: android Value: 002,003,004,006 them e 00 1 002 query: market=rent&type=rennovation image_url: … name: リノベ・リフォー ム ← テーマID Realtime Database RemoteConfig 63
  • 64. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。64 メリット RemoteConfigとRealtimeDatabaseの強力な機能の恩恵を得ることができる 。 サーバは不要。難しいことはSDKがやってくれる。 データ同期 • 同期に関する実装不要 • 効率的な通信 • オフライン対応 配信先の切り替え • セグメントごと切り替え • A/Bテストも容易 A B
  • 65. © LIFULL Co., Ltd. 本書の無断転載、複製を固く禁じます。 応用 固定になっているデータを動的に変更できるようにしてみる。 • plist等で管理している静的なデータ • WebAPIから取得している固定のデータ よりユーザに合った情報を提供できるかも。 plist Realtime Database RemoteConfig 65

Notas do Editor

  1. [質問] ・iOSを担当している人? ・Androidを担当している人? ・エンジニア以外の人? いろんな人がいると思ったので、あまり技術に突っ込んだ話はしない。 もし詳しく聞きたかったら、Ask the Speakerに遠慮せず来てね。
  2. 新技術 = まだ出たてで導入事例の少ない技術
  3. 新技術に興味ない人はいないと思う。 できれば自社のプロダクトに取り入れて見たいじゃないですか? 自分の実績にもなるし、プロダクトも成長します。 実際やるとなると二の足を踏んでしまうケースって多いと思う。 ・アイデアが通らない ・トラブルが多そう ・そもそも新機能入れるようなコードになってない 3つのトピックで、導入に関する課題についてお話ししたいと思います。 これらについて私たちのチームでやって来たことをお伝えして、 他の方のチャレンジのきっかけや助けになればいいなと思います。
  4. 弊社のメンバーはモックを作るのが早い。 WWDCなどの後にはすぐモックができていたりする。 企画からもお願いされるケースもある。「難しいですよね〜」みたいに煽ってくるスタイル。
  5. [質問] Instant Apps導入してる人? Instant Apps導入してみたい人?
  6. だいたい3人月 実際の開発期間は1ヶ月
  7. [質問] Tango導入してる人? Tango知ってる人?
  8. [質問] ARKit導入してる人? ARKitこれからやって見たい人?
  9. [質問] AppleTV導入してる人? AppleTVこれからやって見たい人?
  10. 重要なのは役割ごとにグルーピングされた点と、 サーバやデータベースへのアクセスが抽象化されている点です。
  11. また、先ほどのアーキテクチャによって、アクセス先に依存しない範囲が明確になりました。 これにより、アクセスをFirebaseにしたり、AWSにしたり、あるいはローカルにしたりといった切り替えが簡単にできるようになりました。 今後新しいライブラリやサービスが出て来たときもこれで対応できます。
  12. 何かを実装しようと思ったら、役割を意識してもらって、 そこからレイヤ名とデータ名で型名をつけてもらうようにしました。 これによって、別の人が修正する際にどこをみれば良いか明確になりました。 データ名もあらかじめ統一していて、 物件であればPropertyにしようという話になりました。 そうしないと各自いろんな英訳したりとか、Bukkenみたいないまいちな型名も出て来てしまいます。
  13. とにかく見通しの良いコードを意識したので、共通に使えるようなUIの整理も行なっています。 各自が勝手な実装をしないよう、共有するUIパーツを全員で確認しました。 これによって、あっちもこっちも直すみたいな状況がなくなりました。