SlideShare uma empresa Scribd logo
1 de 30
iOSアプリリニューアルの裏側
LIFULL HOME’S事業本部 新UX開発部 デバイスソリューションユニッ
ト
高橋庸介(2018年2月1日)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2
自己紹介
高橋庸介
• iOS / アプリ用API担当
• テニス
• ゼルダ
• 子供1人 (もうすぐ1歳)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3
アジェンダ
• アプリリニューアル
• ARKit
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4
アプリリニューアル
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5
リニューアルが必要になった背景
アプリのメンテナンス性の低下
メンバー入れ替わりによるコードのブラックボックス化
•新機能追加のコスト増加
•仕様把握漏れによるバグの発生
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6
リニューアルに求めること
LIFULL HOME’S開発の特徴
•開発メンバーが多い(現在 5人)
•外部要因(Web側など)で仕様変更が発生することがある
•UIは頻繁にチューニングされる
メンバーによる設計差異の低減
外部要因による変更の柔軟さ
UIチューニングのしやすさ
リニューアルの設計に求めること
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7
アーキテクチャ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Clean Architecture
Entities
UseCase
Interface Adapters
Frameworks & Drivers
Entities
大規模プロジェクトレベルのビジネスルール
UseCases
アプリケーション固有のビジネスルール
Interface Adapters
EntitiesやUseCases用のデータ形式から
Framework & Drivers用のデータ形式に変
換する
Frameworks & Drivers
データベースやWebフレームワークなど
円の内側にしか依存できない
https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architect
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
iOS HOME’S Architecture
View
Presenter
UseCase
Repository
画面表示やイベント検知を主に行う
表示する情報取得と加工を行う
アプリケーション共通の処理を行う
サーバやデータベースへのアクセス
を抽象化する
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
レイヤ間の関連(RxSwiftの利用)
View
Presenter
UseCase
Repository
UseCaseはデータの問い合わせや
取り出し方について意識しない
Variable
Observable
RepositoryProtocol
Observableを返すことで複数
UseCaseの連携などを容易に
PresenterのVariableとViewは同期
が取れた状態にする
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
スレッドの管理
PresenterのVariableの値は
常にメインスレッドで更新
処理は極力バックグラウンドで実行
View
Presenter
UseCase
Repository
スレッドの境界
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12
型の命名規則の統一
• 用語の整理
• 物件: Property
• 保存条件: SavedSearch
• 原則、主に扱うデータに対応する用語 + レイヤ名
• PropertiesPresenter: 物件情報の表示(物件一覧画面の表示)
• PropertiesUseCase: 物件に関する処理(物件検索)
• PropertiesRepository: 物件情報の取得(物件検索クライアント呼び出
し)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13
新アーキテクチャでできるようになったこと
コードの見通しが良くなった
型名の整理、レイヤごとの役割の分類によりどこを修正すべきか分かるよう
になった。
サーバ側の変更に強くなった
サーバアクセス部分がアプリのメインロジックと分離されている。
UIの変更に強くなった
Viewがアプリのメインロジックと分離されている。
PresenterによりViewControllerが肥大化しない。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14
ユーザインタフェース
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15
デザインの一貫性
配色
形状
フィードバック
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16
デザインガイドライン
default色 highlight色
(黒8%かけ)
disabled色
(白60%かけ)
Background #f7f7fa なし なし
Line #bdc8ca なし なし
Orange #ed6103 #da5903 #f8c09a
White #ffffff #ebebeb #ffffff
ベースとなる色や画面パーツを整理
状態別の色の変更も考慮
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17
ハイライト
方法
• UIView#drawで背景画像に黒をブレンドする。
• isHighlightedのwillSetで半透明の黒のlayerを被せる。この
とき背景画像でlayerをmaskする。
UIButtonやUITableViewCellのデフォルトハイライトは色や範囲がうまく指定できない。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18
ローディングの使い分け
Shimmer
UITableViewの初回ロード
3点ローディング
ここから下に追加される場合
全画面ロード
操作をブロックしたい場合
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19
ユーザの操作を邪魔しないエラー
どこにでも表示可能
• 画面の下領域からせりだす
ユーザの操作を邪魔しすぎない
• 画面の一部しか占有しない
• 「閉じる」か「再試行」か
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20
デザインの一貫性見直し効果
デザインのブレを低減
実装共通化による開発効率のアップ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21
無事リニューアルリリース
ぜひ使ってみてください
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22
ARKit
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23
ARKitで注意しなければならないこと
Human Interface Guidelines
https://developer.apple.com/ios/human-interface-guidelines/technologies/augmented-
reality/
特に気をつけた点
• Wherever possible, provide hints in context.
• If you must display instructional text, use approachable
terminology.
• Indicate when initialization is occurring and involve the user.
ユーザはARという体験に慣れていない
→ ARKitに必要な「床を認識させる」の意味がそもそも分からない。
ユーザに優しいイントロダクションを提供する必要がある。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24
LIFULL HOME’SアプリのARKit機能の特徴
ホームズくんとコミュニケーションしながらユーザを誘導
専門用語による説明ではなくホームズくんとの対話
床認識操作の誘導
認識完了の通知
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25
実装要素
• タップした床に点を置いて線で結ぶ
• ホームズくんを動かす
• 結果画面を生成する
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26
床の上に線を引く
実装方法
• ARSCNView#hitTestで画面中央の床上の座標を取得
• 取得した座標に点Nodeを追加
• 隣り合う点同士を繋ぐ線Nodeを追加
線を引く実装例
• https://github.com/shu223/ARKit-Sampler
• https://github.com/levantAJ/Measure
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27
ホームズくんを動かす
Blenderで作成したホームズくんモデルを取り込み
Android Tangoのノウハウを流用
動きのパターンを決めてモデルの差し替えに対応
クリスマス特別機能に利用
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28
結果画面の表示
面積の計算
多角形の面積は各点の座標を使って計算可能
間取り図の生成
• 最初の2点が水平になるよう座標を回転させることで見やすくする
• 床画像で塗りつぶして間取りっぽく
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29
まとめ
文脈を使ってユーザにARKitの使い方をガイド
• なるべく説明書的なガイドをしない。
• 専門用語を使わない。
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側

Mais conteúdo relacionado

Mais procurados

iOSアプリケーションの継続的デリバリー
iOSアプリケーションの継続的デリバリーiOSアプリケーションの継続的デリバリー
iOSアプリケーションの継続的デリバリーNaoki Umehara
 
iOSアプリケーションでロボットを制御してみよう
iOSアプリケーションでロボットを制御してみようiOSアプリケーションでロボットを制御してみよう
iOSアプリケーションでロボットを制御してみようJunya Ishihara
 
リワード広告におけるリジェクト問題の現状
リワード広告におけるリジェクト問題の現状リワード広告におけるリジェクト問題の現状
リワード広告におけるリジェクト問題の現状TakashiOkaniwa
 
【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)
【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)
【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)natsumo
 
iOSアプリケーションの継続的デリバリー 〜エンタープライズ品質のiOSアプリケーションを目指して〜
iOSアプリケーションの継続的デリバリー   〜エンタープライズ品質のiOSアプリケーションを目指して〜iOSアプリケーションの継続的デリバリー   〜エンタープライズ品質のiOSアプリケーションを目指して〜
iOSアプリケーションの継続的デリバリー 〜エンタープライズ品質のiOSアプリケーションを目指して〜Naoki Umehara
 
賃貸不動産スマホサイトランキングNo.1への道のり
賃貸不動産スマホサイトランキングNo.1への道のり賃貸不動産スマホサイトランキングNo.1への道のり
賃貸不動産スマホサイトランキングNo.1への道のりLIFULL Co., Ltd.
 
LIFULL HOME'S高速化への道のり
LIFULL HOME'S高速化への道のりLIFULL HOME'S高速化への道のり
LIFULL HOME'S高速化への道のりLIFULL Co., Ltd.
 
2013 07-03 iOS勉強会_ios7マルチタスキング_ext
2013 07-03 iOS勉強会_ios7マルチタスキング_ext2013 07-03 iOS勉強会_ios7マルチタスキング_ext
2013 07-03 iOS勉強会_ios7マルチタスキング_extKentaro Matsumae
 
Potatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaPotatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaAkira Iwaya
 
HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2
HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2
HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2Akiyoshi Samukawa
 
iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話Hideki Abe
 
20140918 i os8イベント_ios-history (公開用)
20140918 i os8イベント_ios-history (公開用)20140918 i os8イベント_ios-history (公開用)
20140918 i os8イベント_ios-history (公開用)Rikitake Oohashi
 
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリAngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリアシアル株式会社
 
Web標準技術で iOS、Android両対応アプリを開発
Web標準技術でiOS、Android両対応アプリを開発Web標準技術でiOS、Android両対応アプリを開発
Web標準技術で iOS、Android両対応アプリを開発 アシアル株式会社
 

Mais procurados (19)

Vtecxlt20151201
Vtecxlt20151201Vtecxlt20151201
Vtecxlt20151201
 
iOSアプリケーションの継続的デリバリー
iOSアプリケーションの継続的デリバリーiOSアプリケーションの継続的デリバリー
iOSアプリケーションの継続的デリバリー
 
iOSアプリケーションでロボットを制御してみよう
iOSアプリケーションでロボットを制御してみようiOSアプリケーションでロボットを制御してみよう
iOSアプリケーションでロボットを制御してみよう
 
リワード広告におけるリジェクト問題の現状
リワード広告におけるリジェクト問題の現状リワード広告におけるリジェクト問題の現状
リワード広告におけるリジェクト問題の現状
 
【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)
【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)
【JavaScript SDK ver.2】MonacaとmBaaSでプッシュ通知を体験しよう(for Android & iOS)
 
iOSアプリケーションの継続的デリバリー 〜エンタープライズ品質のiOSアプリケーションを目指して〜
iOSアプリケーションの継続的デリバリー   〜エンタープライズ品質のiOSアプリケーションを目指して〜iOSアプリケーションの継続的デリバリー   〜エンタープライズ品質のiOSアプリケーションを目指して〜
iOSアプリケーションの継続的デリバリー 〜エンタープライズ品質のiOSアプリケーションを目指して〜
 
20110824 android apps_tanaka
20110824 android apps_tanaka20110824 android apps_tanaka
20110824 android apps_tanaka
 
賃貸不動産スマホサイトランキングNo.1への道のり
賃貸不動産スマホサイトランキングNo.1への道のり賃貸不動産スマホサイトランキングNo.1への道のり
賃貸不動産スマホサイトランキングNo.1への道のり
 
LIFULL HOME'S高速化への道のり
LIFULL HOME'S高速化への道のりLIFULL HOME'S高速化への道のり
LIFULL HOME'S高速化への道のり
 
2013 07-03 iOS勉強会_ios7マルチタスキング_ext
2013 07-03 iOS勉強会_ios7マルチタスキング_ext2013 07-03 iOS勉強会_ios7マルチタスキング_ext
2013 07-03 iOS勉強会_ios7マルチタスキング_ext
 
Potatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwayaPotatotips3 hoshi gaki_akira_iwaya
Potatotips3 hoshi gaki_akira_iwaya
 
HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2
HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2
HOME'SアプリのFragmentとデザインの関係 Minami Aoyama Night #2
 
Funit
FunitFunit
Funit
 
iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話
 
20140918 i os8イベント_ios-history (公開用)
20140918 i os8イベント_ios-history (公開用)20140918 i os8イベント_ios-history (公開用)
20140918 i os8イベント_ios-history (公開用)
 
「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4
「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4
「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4
 
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリAngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
 
Web標準技術で iOS、Android両対応アプリを開発
Web標準技術でiOS、Android両対応アプリを開発Web標準技術でiOS、Android両対応アプリを開発
Web標準技術で iOS、Android両対応アプリを開発
 
Realmを使ってみた話
Realmを使ってみた話Realmを使ってみた話
Realmを使ってみた話
 

Semelhante a 【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側

【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側についてLIFULL Co., Ltd.
 
「ABCs2018」LT〝Intro to Google Play Instant〟
「ABCs2018」LT〝Intro to  Google Play Instant〟「ABCs2018」LT〝Intro to  Google Play Instant〟
「ABCs2018」LT〝Intro to Google Play Instant〟LIFULL Co., Ltd.
 
shibuya.apk vol21
shibuya.apk vol21shibuya.apk vol21
shibuya.apk vol21Takeshi Eto
 
2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料LIFULL Co., Ltd.
 
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめLIFULL Co., Ltd.
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」feedtailor
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!CData Software Japan
 
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)LIFULL Co., Ltd.
 
20180523 LIFULL.apk#2
20180523 LIFULL.apk#220180523 LIFULL.apk#2
20180523 LIFULL.apk#2Takeshi Eto
 
New Integration "X" 新インテグレーションソリューション
New Integration "X" 新インテグレーションソリューションNew Integration "X" 新インテグレーションソリューション
New Integration "X" 新インテグレーションソリューションmotani_kamakura
 
Android Instant Apps対応した話
Android Instant Apps対応した話Android Instant Apps対応した話
Android Instant Apps対応した話Takeshi Eto
 
エンタープライズにおける iOSアプリ開発・導入のいろは
エンタープライズにおける iOSアプリ開発・導入のいろはエンタープライズにおける iOSアプリ開発・導入のいろは
エンタープライズにおける iOSアプリ開発・導入のいろはfeedtailor
 
成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》
成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》
成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》Katsuaki Sato
 
Smartphoneguidebook 111118085105-phpapp02
Smartphoneguidebook 111118085105-phpapp02Smartphoneguidebook 111118085105-phpapp02
Smartphoneguidebook 111118085105-phpapp02Alan Kuo
 
アプリ製作ツール HiCIEL 紹介
アプリ製作ツール HiCIEL 紹介アプリ製作ツール HiCIEL 紹介
アプリ製作ツール HiCIEL 紹介baeksunil
 
アプリ申請の基礎 リジェクト周り
アプリ申請の基礎 リジェクト周りアプリ申請の基礎 リジェクト周り
アプリ申請の基礎 リジェクト周りNatsuki Yamanaka
 

Semelhante a 【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側 (20)

【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について
 
「ABCs2018」LT〝Intro to Google Play Instant〟
「ABCs2018」LT〝Intro to  Google Play Instant〟「ABCs2018」LT〝Intro to  Google Play Instant〟
「ABCs2018」LT〝Intro to Google Play Instant〟
 
shibuya.apk vol21
shibuya.apk vol21shibuya.apk vol21
shibuya.apk vol21
 
2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料
 
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
【Web系ベンチャーが語るAWS利用事例】社内ソリューションアーキテクトのすすめ
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
 
2017/05/24 potatotips #40
2017/05/24 potatotips #402017/05/24 potatotips #40
2017/05/24 potatotips #40
 
20180523 LIFULL.apk#2
20180523 LIFULL.apk#220180523 LIFULL.apk#2
20180523 LIFULL.apk#2
 
New Integration "X" 新インテグレーションソリューション
New Integration "X" 新インテグレーションソリューションNew Integration "X" 新インテグレーションソリューション
New Integration "X" 新インテグレーションソリューション
 
Android Instant Apps対応した話
Android Instant Apps対応した話Android Instant Apps対応した話
Android Instant Apps対応した話
 
LIFFとLINE SDKの昨今
LIFFとLINE SDKの昨今 LIFFとLINE SDKの昨今
LIFFとLINE SDKの昨今
 
エンタープライズにおける iOSアプリ開発・導入のいろは
エンタープライズにおける iOSアプリ開発・導入のいろはエンタープライズにおける iOSアプリ開発・導入のいろは
エンタープライズにおける iOSアプリ開発・導入のいろは
 
20110824 android apps_endo
20110824 android apps_endo20110824 android apps_endo
20110824 android apps_endo
 
成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》
成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》
成功するスマートフォンアプリ戦略とは?マーケティングからマネタイズまで《基礎編》
 
Smartphoneguidebook 111118085105-phpapp02
Smartphoneguidebook 111118085105-phpapp02Smartphoneguidebook 111118085105-phpapp02
Smartphoneguidebook 111118085105-phpapp02
 
アプリ製作ツール HiCIEL 紹介
アプリ製作ツール HiCIEL 紹介アプリ製作ツール HiCIEL 紹介
アプリ製作ツール HiCIEL 紹介
 
NucliOS 概要
NucliOS 概要NucliOS 概要
NucliOS 概要
 
アプリ申請の基礎 リジェクト周り
アプリ申請の基礎 リジェクト周りアプリ申請の基礎 リジェクト周り
アプリ申請の基礎 リジェクト周り
 

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庸介 高橋
 
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について庸介 高橋
 
LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信庸介 高橋
 
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきことtvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと庸介 高橋
 
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 庸介 高橋 (10)

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
 
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
 
LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信
 
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきことtvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと
 
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実践テクニック
 
カラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りましたカラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りました
 

【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側

  • 1. iOSアプリリニューアルの裏側 LIFULL HOME’S事業本部 新UX開発部 デバイスソリューションユニッ ト 高橋庸介(2018年2月1日)
  • 2. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2 自己紹介 高橋庸介 • iOS / アプリ用API担当 • テニス • ゼルダ • 子供1人 (もうすぐ1歳)
  • 3. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3 アジェンダ • アプリリニューアル • ARKit
  • 4. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4 アプリリニューアル
  • 5. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5 リニューアルが必要になった背景 アプリのメンテナンス性の低下 メンバー入れ替わりによるコードのブラックボックス化 •新機能追加のコスト増加 •仕様把握漏れによるバグの発生
  • 6. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6 リニューアルに求めること LIFULL HOME’S開発の特徴 •開発メンバーが多い(現在 5人) •外部要因(Web側など)で仕様変更が発生することがある •UIは頻繁にチューニングされる メンバーによる設計差異の低減 外部要因による変更の柔軟さ UIチューニングのしやすさ リニューアルの設計に求めること
  • 7. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7 アーキテクチャ
  • 8. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 Clean Architecture Entities UseCase Interface Adapters Frameworks & Drivers Entities 大規模プロジェクトレベルのビジネスルール UseCases アプリケーション固有のビジネスルール Interface Adapters EntitiesやUseCases用のデータ形式から Framework & Drivers用のデータ形式に変 換する Frameworks & Drivers データベースやWebフレームワークなど 円の内側にしか依存できない https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architect
  • 9. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 iOS HOME’S Architecture View Presenter UseCase Repository 画面表示やイベント検知を主に行う 表示する情報取得と加工を行う アプリケーション共通の処理を行う サーバやデータベースへのアクセス を抽象化する
  • 10. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 レイヤ間の関連(RxSwiftの利用) View Presenter UseCase Repository UseCaseはデータの問い合わせや 取り出し方について意識しない Variable Observable RepositoryProtocol Observableを返すことで複数 UseCaseの連携などを容易に PresenterのVariableとViewは同期 が取れた状態にする
  • 11. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 スレッドの管理 PresenterのVariableの値は 常にメインスレッドで更新 処理は極力バックグラウンドで実行 View Presenter UseCase Repository スレッドの境界
  • 12. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12 型の命名規則の統一 • 用語の整理 • 物件: Property • 保存条件: SavedSearch • 原則、主に扱うデータに対応する用語 + レイヤ名 • PropertiesPresenter: 物件情報の表示(物件一覧画面の表示) • PropertiesUseCase: 物件に関する処理(物件検索) • PropertiesRepository: 物件情報の取得(物件検索クライアント呼び出 し)
  • 13. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13 新アーキテクチャでできるようになったこと コードの見通しが良くなった 型名の整理、レイヤごとの役割の分類によりどこを修正すべきか分かるよう になった。 サーバ側の変更に強くなった サーバアクセス部分がアプリのメインロジックと分離されている。 UIの変更に強くなった Viewがアプリのメインロジックと分離されている。 PresenterによりViewControllerが肥大化しない。
  • 14. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14 ユーザインタフェース
  • 15. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15 デザインの一貫性 配色 形状 フィードバック
  • 16. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16 デザインガイドライン default色 highlight色 (黒8%かけ) disabled色 (白60%かけ) Background #f7f7fa なし なし Line #bdc8ca なし なし Orange #ed6103 #da5903 #f8c09a White #ffffff #ebebeb #ffffff ベースとなる色や画面パーツを整理 状態別の色の変更も考慮
  • 17. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17 ハイライト 方法 • UIView#drawで背景画像に黒をブレンドする。 • isHighlightedのwillSetで半透明の黒のlayerを被せる。この とき背景画像でlayerをmaskする。 UIButtonやUITableViewCellのデフォルトハイライトは色や範囲がうまく指定できない。
  • 18. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18 ローディングの使い分け Shimmer UITableViewの初回ロード 3点ローディング ここから下に追加される場合 全画面ロード 操作をブロックしたい場合
  • 19. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19 ユーザの操作を邪魔しないエラー どこにでも表示可能 • 画面の下領域からせりだす ユーザの操作を邪魔しすぎない • 画面の一部しか占有しない • 「閉じる」か「再試行」か
  • 20. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20 デザインの一貫性見直し効果 デザインのブレを低減 実装共通化による開発効率のアップ
  • 21. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21 無事リニューアルリリース ぜひ使ってみてください
  • 22. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22 ARKit
  • 23. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23 ARKitで注意しなければならないこと Human Interface Guidelines https://developer.apple.com/ios/human-interface-guidelines/technologies/augmented- reality/ 特に気をつけた点 • Wherever possible, provide hints in context. • If you must display instructional text, use approachable terminology. • Indicate when initialization is occurring and involve the user. ユーザはARという体験に慣れていない → ARKitに必要な「床を認識させる」の意味がそもそも分からない。 ユーザに優しいイントロダクションを提供する必要がある。
  • 24. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24 LIFULL HOME’SアプリのARKit機能の特徴 ホームズくんとコミュニケーションしながらユーザを誘導 専門用語による説明ではなくホームズくんとの対話 床認識操作の誘導 認識完了の通知
  • 25. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25 実装要素 • タップした床に点を置いて線で結ぶ • ホームズくんを動かす • 結果画面を生成する
  • 26. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26 床の上に線を引く 実装方法 • ARSCNView#hitTestで画面中央の床上の座標を取得 • 取得した座標に点Nodeを追加 • 隣り合う点同士を繋ぐ線Nodeを追加 線を引く実装例 • https://github.com/shu223/ARKit-Sampler • https://github.com/levantAJ/Measure
  • 27. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27 ホームズくんを動かす Blenderで作成したホームズくんモデルを取り込み Android Tangoのノウハウを流用 動きのパターンを決めてモデルの差し替えに対応 クリスマス特別機能に利用
  • 28. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28 結果画面の表示 面積の計算 多角形の面積は各点の座標を使って計算可能 間取り図の生成 • 最初の2点が水平になるよう座標を回転させることで見やすくする • 床画像で塗りつぶして間取りっぽく
  • 29. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29 まとめ 文脈を使ってユーザにARKitの使い方をガイド • なるべく説明書的なガイドをしない。 • 専門用語を使わない。