最新技術に挑戦し続ける
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

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

  • 1.
  • 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.
  • 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

Editor's Notes

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