SlideShare a Scribd company logo
1 of 41
前任者から引き継いだ Eight
Android アプリ内部の改善
2017/02/16
Sansan tech meetup #1 モバイルアプリ編
Sansan 株式会社 Eight 事業部 辰濱健一
Copyright © 2014 Sansan, Inc. All rights reserved.
#Sansan_tech_meetup
1
Copyright © 2014 Sansan, Inc. All rights reserved. 2
Copyright © 2014 Sansan, Inc. All rights reserved. 3
【公開自粛】
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
4
• 辰濱健一 @tatsuhama50
• 徳島生まれ、奈良育ち、徳島県在住
• 2回転職するも、いずれも徳島県内勤務
• Tokushima.app 主催
(徳島でのスマホアプリの勉強会)
• Sansan株式会社所属
• 古民家を改修した神山ラボ勤務
• 名刺アプリ Eight Android 版の開発
• Kotlin, RxJava, Realm, … を使ってます
• リモートワーク
• 趣味は楽器演奏
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan神山ラボ
5
Copyright © 2014 Sansan, Inc. All rights reserved.
> 趣味
6
• 楽器演奏(エレクトーン・トランペット)
• 徳島県内のイベントで、ちらほら演奏する機会を頂い
てます
Copyright © 2014 Sansan, Inc. All rights reserved.
Eight Android アプリ関係者の推移
7
#1 #2
#3 #4
#5 #6
Copyright © 2014 Sansan, Inc. All rights reserved.
Eight Android アプリ関係者の推移
8
#1 #2
#3 #4
#5 #6
前任者
社員 社員
業務委託
社員
内定者
Copyright © 2014 Sansan, Inc. All rights reserved.
Eight Android アプリ関係者の推移
9
#1 #2
#3 #4
#5 #6
前任者
社員 社員
業務委託
社員
内定者
・#5前任者
・#1社員
・#3業託
・#1社員
・#3業託
・#2社員
・#1社員
・#3業託
・#2社員
・#6社員
Copyright © 2014 Sansan, Inc. All rights reserved.
時代の推移
10
• 前任者時代
• Android エンジニア同士のレビューができない
• どうしても個性が出る
• マッチョな Activity
• バトンタッチ後
• Android エンジニアの複数人体制
• レビューによる議論も盛んに
• 技術顧問の招聘
• モダンなライブラリの紹介&ハンズオン
• レビューへの参加
Copyright © 2014 Sansan, Inc. All rights reserved.
バトンタッチ後に導入したライブラリ等
11
• Realm
• Dagger2
• RxJava
• Kotlin
• Retrofit
• など…
Copyright © 2014 Sansan, Inc. All rights reserved.
バトンタッチ後に導入した CI 環境(Jenkins)
12
• 自動ビルド
• リリースバイナリ作成
• Fabric beta へのアップロード
• Verification
• Lint
• UnitTest
• 関数の UnitTest
• AndroidTest
• Realm のマイグレーションテスト
Copyright © 2014 Sansan, Inc. All rights reserved.
本題へ…
13
Copyright © 2014 Sansan, Inc. All rights reserved.
内部設計の改善
14
• レイヤーの整理・分割
• データの流れ、View の更新方法を整理
Copyright © 2014 Sansan, Inc. All rights reserved.
レイヤーの整理・分割
15
• Before
• マッチョな Activity
• View の構築
• 通信処理を呼び出す準備のコード
• 通信処理のコールバックで DB 書き込み、View 更新
• After
• 表示:Presentation Layer に分割
• 操作:UseCase に切り出して呼び出すだけ
Copyright © 2014 Sansan, Inc. All rights reserved.
Layers
16
Presentation Layer
Application Layer
Domain Layer
Infrastructure Layer
View Presenter
Activity
Entity UseCase
DB Network
Copyright © 2014 Sansan, Inc. All rights reserved.
Layers
17
Presentation Layer
Application Layer
Domain Layer
Infrastructure Layer
View Presenter
Activity
Entity UseCase
DB Network
マッチョ
Activity
Copyright © 2014 Sansan, Inc. All rights reserved.
データの流れ、View の更新方法を整理
18
• モデルの変更は別スレッドで行う
• View はモデル(Store)からの変更通知を受けて
表示を更新する
(Action が View を直接編集しない)
Copyright © 2014 Sansan, Inc. All rights reserved.
簡単なアプリで考える
19
• 仕様
• サーバ上のデータを TextView に表示する
• 処理
• ローカルにキャッシュがあれば、先にそれを表示する
• サーバからデータが取得できたら
• TextView に反映する
• 値をキャッシュしておく
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
20
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
21
→ Presenter に切り出せる
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
22
→ UseCase に切り出せる
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
23
色んな場所で
View を更新している!!
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
24
Action(UseCase)
が 表示を更新している!
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
25
色んな場所で
View を更新している!!
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
26
色んな場所で
View を更新している!!
モデルの変更通知を
受けて更新すべき
Copyright © 2014 Sansan, Inc. All rights reserved.
モデルの変更通知を受けて View を更新する…
27
• SharedPreference
• OnSharedPreferenceChangeListener
• BehaviorSubject
• onNext → subscribe
• Realm
• Finegrained notifications
Copyright © 2014 Sansan, Inc. All rights reserved.
モデルの変更通知を受けて View を更新する…
28
• SharedPreference
• OnSharedPreferenceChangeListener
• BehaviorSubject
• onNext → subscribe
• Realm
• Finegrained notifications
データの保存場所に依存せず、
View に Entity を提供したい
Copyright © 2014 Sansan, Inc. All rights reserved.
モデルの変更通知を受けて View を更新する…
29
• SharedPreference
• OnSharedPreferenceChangeListener
• BehaviorSubject
• onNext → subscribe
• Realm
• Finegrained notifications
データの保存場所に依存せず、
View に Entity を提供したい
Store
の導入
Copyright © 2014 Sansan, Inc. All rights reserved.
Store
30
• View は Store からの更新を受けて更新するだけ
Copyright © 2014 Sansan, Inc. All rights reserved.
Store
31
• View は Store からの更新を受けて更新するだけ
Copyright © 2014 Sansan, Inc. All rights reserved.
ObjectStore を定義
32
• 値を取得する
• 値の変更を Observable で受け取る
• これらの実装クラスを作成し、
View はこの実装クラスだけを監視して、
更新があったら反映するだけ
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
33
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
34
Action(UseCase)
が 表示を更新している!
×
不要
Copyright © 2014 Sansan, Inc. All rights reserved.
例)
35
Action(UseCase)
が 表示を更新している!
×
不要
Copyright © 2014 Sansan, Inc. All rights reserved.
Before / After
36
TextView
Shared
Pref.
初期化時に取得・反映
UseCase
※サーバからの取得処理
反映
反映
Copyright © 2014 Sansan, Inc. All rights reserved.
Before / After
37
TextViewStoreUseCase
TextView
Shared
Pref.
初期化時に取得・反映
UseCase
※サーバからの取得処理
反映
反映
Shared
Pref.
反映
反映
監視
反映
監視
Copyright © 2014 Sansan, Inc. All rights reserved. 38
スッキリ!
Copyright © 2014 Sansan, Inc. All rights reserved.
補足
39
• 更新通知には rx.Observable を使ってます
• Kotlin 使うと Rx 周りはとてもシンプルに書けます
• 1つの値を保持する ObjectStore だけでなく、集合を
保持する ArrayStore も用意しています
• デグレを支えてくれるテストチームさまさまm(__)m
Copyright © 2014 Sansan, Inc. All rights reserved. 40
Fin.

More Related Content

What's hot

kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)
kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)
kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)JOYZO
 
さばわのわ#2 AWS SDK for PHP で学ぶAthena
さばわのわ#2 AWS SDK for PHP で学ぶAthenaさばわのわ#2 AWS SDK for PHP で学ぶAthena
さばわのわ#2 AWS SDK for PHP で学ぶAthenaTakaki Sugitani
 
メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜
メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜
メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜宗 大栗
 
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話しDevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話しAkira Nagata
 
初めてのLambda(ラムダ)
初めてのLambda(ラムダ)初めてのLambda(ラムダ)
初めてのLambda(ラムダ)Fumitaka Nishiyama
 
Alibaba Cloudのベンチマークテスト
Alibaba CloudのベンチマークテストAlibaba Cloudのベンチマークテスト
Alibaba CloudのベンチマークテストKazunori Inaba
 
スマホアプリ自動テストサービス
スマホアプリ自動テストサービススマホアプリ自動テストサービス
スマホアプリ自動テストサービスKoh Uehara
 
GAS + SaaS時々 AWSで自動化
GAS + SaaS時々 AWSで自動化GAS + SaaS時々 AWSで自動化
GAS + SaaS時々 AWSで自動化Mitsuhiro Yamashita
 
20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介
20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介
20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介Midori Ikegami
 
20160312 Jaws Days 2016 API Gateway+Lambda
20160312 Jaws Days 2016 API Gateway+Lambda20160312 Jaws Days 2016 API Gateway+Lambda
20160312 Jaws Days 2016 API Gateway+LambdaKazuki Ueki
 
Zaim 500万ユーザに向けて
Zaim 500万ユーザに向けてZaim 500万ユーザに向けて
Zaim 500万ユーザに向けてWataru Nishimoto
 
怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。
怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。
怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。Mitsuhiro Yamashita
 
20160705 ふたつのAuroraクラスタを同期した話
20160705 ふたつのAuroraクラスタを同期した話20160705 ふたつのAuroraクラスタを同期した話
20160705 ふたつのAuroraクラスタを同期した話Wataru Nishimoto
 
AWS Lambda + Python資料 ver0.94 20160825
AWS Lambda + Python資料 ver0.94 20160825AWS Lambda + Python資料 ver0.94 20160825
AWS Lambda + Python資料 ver0.94 20160825Yasuharu Suzuki
 
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦するAWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦するKahori Takeda
 
JAWS-UG Lightning Talk 2010-04-07
JAWS-UG Lightning Talk 2010-04-07JAWS-UG Lightning Talk 2010-04-07
JAWS-UG Lightning Talk 2010-04-07axsh co., LTD.
 
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤Godai Nakamura
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API GatewayTakuro Sasaki
 

What's hot (20)

kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)
kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)
kintone Café 東京 Vol.3 ハンズオン資料(kintone & AWS Lambda/S3)
 
さばわのわ#2 AWS SDK for PHP で学ぶAthena
さばわのわ#2 AWS SDK for PHP で学ぶAthenaさばわのわ#2 AWS SDK for PHP で学ぶAthena
さばわのわ#2 AWS SDK for PHP で学ぶAthena
 
AWS Lambda in Golang
AWS Lambda in GolangAWS Lambda in Golang
AWS Lambda in Golang
 
メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜
メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜
メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜
 
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話しDevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
 
初めてのLambda(ラムダ)
初めてのLambda(ラムダ)初めてのLambda(ラムダ)
初めてのLambda(ラムダ)
 
Alibaba Cloudのベンチマークテスト
Alibaba CloudのベンチマークテストAlibaba Cloudのベンチマークテスト
Alibaba Cloudのベンチマークテスト
 
スマホアプリ自動テストサービス
スマホアプリ自動テストサービススマホアプリ自動テストサービス
スマホアプリ自動テストサービス
 
GAS + SaaS時々 AWSで自動化
GAS + SaaS時々 AWSで自動化GAS + SaaS時々 AWSで自動化
GAS + SaaS時々 AWSで自動化
 
20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介
20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介
20160429 JAWS-UG沖縄 Cloud on the BEACH 2016 AWS全サービス紹介
 
20160312 Jaws Days 2016 API Gateway+Lambda
20160312 Jaws Days 2016 API Gateway+Lambda20160312 Jaws Days 2016 API Gateway+Lambda
20160312 Jaws Days 2016 API Gateway+Lambda
 
Zaim 500万ユーザに向けて
Zaim 500万ユーザに向けてZaim 500万ユーザに向けて
Zaim 500万ユーザに向けて
 
怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。
怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。
怒涛のAWS入門! クラウドプラクティショナー! 知ってました? あなた、クラウドプラクティショナーなんですよ。
 
20160705 ふたつのAuroraクラスタを同期した話
20160705 ふたつのAuroraクラスタを同期した話20160705 ふたつのAuroraクラスタを同期した話
20160705 ふたつのAuroraクラスタを同期した話
 
AWS Lambda + Python資料 ver0.94 20160825
AWS Lambda + Python資料 ver0.94 20160825AWS Lambda + Python資料 ver0.94 20160825
AWS Lambda + Python資料 ver0.94 20160825
 
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦するAWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
AWS 初心者抜けきれない私がAWS Samurai と AWS Community Builder の特権フル活用したらどんなものが作れるか挑戦する
 
JAWS-UG Lightning Talk 2010-04-07
JAWS-UG Lightning Talk 2010-04-07JAWS-UG Lightning Talk 2010-04-07
JAWS-UG Lightning Talk 2010-04-07
 
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API Gateway
 

Viewers also liked

ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話
ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話
ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話chocolamint
 
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。健一 辰濱
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みSansan
 
成長するサービスを支えるAPI管理
成長するサービスを支えるAPI管理成長するサービスを支えるAPI管理
成長するサービスを支えるAPI管理Hideharu Okuma
 
つながりを加速させる、Eightのリアルタイムリコメンデーション技術
つながりを加速させる、Eightのリアルタイムリコメンデーション技術つながりを加速させる、Eightのリアルタイムリコメンデーション技術
つながりを加速させる、Eightのリアルタイムリコメンデーション技術Yotaro Fujii
 
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づけるJAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づけるTetsuya Mase
 
JAWS DAYS 2017 ランチセッション
JAWS DAYS 2017 ランチセッションJAWS DAYS 2017 ランチセッション
JAWS DAYS 2017 ランチセッションTetsuya Mase
 
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」Yotaro Fujii
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitectureTomoaki Imai
 
結果を出すチームビルディング術
結果を出すチームビルディング術結果を出すチームビルディング術
結果を出すチームビルディング術Mao Ohnishi
 
プロダクトマネージャーとエンジニアで行う改善サイクル 3つのP
プロダクトマネージャーとエンジニアで行う改善サイクル 3つのPプロダクトマネージャーとエンジニアで行う改善サイクル 3つのP
プロダクトマネージャーとエンジニアで行う改善サイクル 3つのP絵里子 尾部
 
Designers Pit 01 Origamiを使ったプロトタイプ作成を学ぼう
Designers Pit 01 Origamiを使ったプロトタイプ作成を学ぼうDesigners Pit 01 Origamiを使ったプロトタイプ作成を学ぼう
Designers Pit 01 Origamiを使ったプロトタイプ作成を学ぼうRyo Yoshitake
 
地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり
地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり
地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり健一 辰濱
 
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。健一 辰濱
 
エクセルで学ぶビジネスシミュレーション②: 実践編
エクセルで学ぶビジネスシミュレーション②: 実践編エクセルで学ぶビジネスシミュレーション②: 実践編
エクセルで学ぶビジネスシミュレーション②: 実践編Hitoshi Kumano
 
エクセルで学ぶビジネス・シミュレーション①: 超入門
エクセルで学ぶビジネス・シミュレーション①: 超入門エクセルで学ぶビジネス・シミュレーション①: 超入門
エクセルで学ぶビジネス・シミュレーション①: 超入門Hitoshi Kumano
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例健一 辰濱
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞYoshitaka Fujii
 

Viewers also liked (20)

ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話
ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話
ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話
 
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組み
 
成長するサービスを支えるAPI管理
成長するサービスを支えるAPI管理成長するサービスを支えるAPI管理
成長するサービスを支えるAPI管理
 
つながりを加速させる、Eightのリアルタイムリコメンデーション技術
つながりを加速させる、Eightのリアルタイムリコメンデーション技術つながりを加速させる、Eightのリアルタイムリコメンデーション技術
つながりを加速させる、Eightのリアルタイムリコメンデーション技術
 
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づけるJAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
 
JAWS DAYS 2017 ランチセッション
JAWS DAYS 2017 ランチセッションJAWS DAYS 2017 ランチセッション
JAWS DAYS 2017 ランチセッション
 
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
結果を出すチームビルディング術
結果を出すチームビルディング術結果を出すチームビルディング術
結果を出すチームビルディング術
 
プロダクトマネージャーとエンジニアで行う改善サイクル 3つのP
プロダクトマネージャーとエンジニアで行う改善サイクル 3つのPプロダクトマネージャーとエンジニアで行う改善サイクル 3つのP
プロダクトマネージャーとエンジニアで行う改善サイクル 3つのP
 
可視化法学-大和超券ステージ
可視化法学-大和超券ステージ可視化法学-大和超券ステージ
可視化法学-大和超券ステージ
 
Designers Pit 01 Origamiを使ったプロトタイプ作成を学ぼう
Designers Pit 01 Origamiを使ったプロトタイプ作成を学ぼうDesigners Pit 01 Origamiを使ったプロトタイプ作成を学ぼう
Designers Pit 01 Origamiを使ったプロトタイプ作成を学ぼう
 
地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり
地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり
地方のサテライトオフィスで働くエンジニアの仕事と地域との関わり
 
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。
 
RxBinding-kotlin
RxBinding-kotlinRxBinding-kotlin
RxBinding-kotlin
 
エクセルで学ぶビジネスシミュレーション②: 実践編
エクセルで学ぶビジネスシミュレーション②: 実践編エクセルで学ぶビジネスシミュレーション②: 実践編
エクセルで学ぶビジネスシミュレーション②: 実践編
 
エクセルで学ぶビジネス・シミュレーション①: 超入門
エクセルで学ぶビジネス・シミュレーション①: 超入門エクセルで学ぶビジネス・シミュレーション①: 超入門
エクセルで学ぶビジネス・シミュレーション①: 超入門
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 

Similar to 前任者から引き継いだ Eight Android アプリ内部の改善

アプリの不具合を少なくするために
アプリの不具合を少なくするためにアプリの不具合を少なくするために
アプリの不具合を少なくするために健一 辰濱
 
kintone x Sansan 連携事始め~カスタマイズまで
kintone x Sansan連携事始め~カスタマイズまでkintone x Sansan連携事始め~カスタマイズまで
kintone x Sansan 連携事始め~カスタマイズまでKatsuki Ito
 
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNA
 
アプリ開発作業の効率改善
アプリ開発作業の効率改善アプリ開発作業の効率改善
アプリ開発作業の効率改善健一 辰濱
 
いまさら聞けないRancherの話
いまさら聞けないRancherの話いまさら聞けないRancherの話
いまさら聞けないRancherの話Ryotaro Kobayashi
 
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいいKenta Kuwata
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア leverages_event
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニアヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニアIsamu Suzuki
 
Introducing Sencha Space
Introducing Sencha SpaceIntroducing Sencha Space
Introducing Sencha Space久司 中村
 
ビジネスの出会い × API が広げるビジネスの可能性
ビジネスの出会い × API が広げるビジネスの可能性ビジネスの出会い × API が広げるビジネスの可能性
ビジネスの出会い × API が広げるビジネスの可能性API Meetup
 
ProductManagement / front-end in Sansan( & remote work)
ProductManagement / front-endin Sansan( & remote work)ProductManagement / front-endin Sansan( & remote work)
ProductManagement / front-end in Sansan( & remote work)Iwashita Hironori
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。Sho Yoshida
 
オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果Masato Kataoka
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト健一 辰濱
 
AWSとSenchaでSecureなモバイルアプリを実現する
AWSとSenchaでSecureなモバイルアプリを実現するAWSとSenchaでSecureなモバイルアプリを実現する
AWSとSenchaでSecureなモバイルアプリを実現する久司 中村
 
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリSatoshi Yokoi
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackMasatomo Ito
 
Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意
Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意
Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意Nobuya Sato
 

Similar to 前任者から引き継いだ Eight Android アプリ内部の改善 (20)

アプリの不具合を少なくするために
アプリの不具合を少なくするためにアプリの不具合を少なくするために
アプリの不具合を少なくするために
 
kintone x Sansan 連携事始め~カスタマイズまで
kintone x Sansan連携事始め~カスタマイズまでkintone x Sansan連携事始め~カスタマイズまで
kintone x Sansan 連携事始め~カスタマイズまで
 
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
 
アプリ開発作業の効率改善
アプリ開発作業の効率改善アプリ開発作業の効率改善
アプリ開発作業の効率改善
 
いまさら聞けないRancherの話
いまさら聞けないRancherの話いまさら聞けないRancherの話
いまさら聞けないRancherの話
 
DevSumi 2014[14-C-5]
DevSumi 2014[14-C-5]DevSumi 2014[14-C-5]
DevSumi 2014[14-C-5]
 
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニアヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
Introducing Sencha Space
Introducing Sencha SpaceIntroducing Sencha Space
Introducing Sencha Space
 
ビジネスの出会い × API が広げるビジネスの可能性
ビジネスの出会い × API が広げるビジネスの可能性ビジネスの出会い × API が広げるビジネスの可能性
ビジネスの出会い × API が広げるビジネスの可能性
 
ProductManagement / front-end in Sansan( & remote work)
ProductManagement / front-endin Sansan( & remote work)ProductManagement / front-endin Sansan( & remote work)
ProductManagement / front-end in Sansan( & remote work)
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
 
オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
 
AWSとSenchaでSecureなモバイルアプリを実現する
AWSとSenchaでSecureなモバイルアプリを実現するAWSとSenchaでSecureなモバイルアプリを実現する
AWSとSenchaでSecureなモバイルアプリを実現する
 
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリ
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stack
 
Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意
Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意
Developers Summit 2014【13-C-3】Smashing Android UI, Androidデザインの極意
 

More from 健一 辰濱

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合健一 辰濱
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン健一 辰濱
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O 健一 辰濱
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について健一 辰濱
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今健一 辰濱
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩健一 辰濱
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える健一 辰濱
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on健一 辰濱
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap健一 辰濱
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話健一 辰濱
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama健一 辰濱
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方健一 辰濱
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法健一 辰濱
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing健一 辰濱
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー健一 辰濱
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ健一 辰濱
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話健一 辰濱
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会健一 辰濱
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る健一 辰濱
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく健一 辰濱
 

More from 健一 辰濱 (20)

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 

前任者から引き継いだ Eight Android アプリ内部の改善

  • 1. 前任者から引き継いだ Eight Android アプリ内部の改善 2017/02/16 Sansan tech meetup #1 モバイルアプリ編 Sansan 株式会社 Eight 事業部 辰濱健一
  • 2. Copyright © 2014 Sansan, Inc. All rights reserved. #Sansan_tech_meetup 1
  • 3. Copyright © 2014 Sansan, Inc. All rights reserved. 2
  • 4. Copyright © 2014 Sansan, Inc. All rights reserved. 3 【公開自粛】
  • 5. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 4 • 辰濱健一 @tatsuhama50 • 徳島生まれ、奈良育ち、徳島県在住 • 2回転職するも、いずれも徳島県内勤務 • Tokushima.app 主催 (徳島でのスマホアプリの勉強会) • Sansan株式会社所属 • 古民家を改修した神山ラボ勤務 • 名刺アプリ Eight Android 版の開発 • Kotlin, RxJava, Realm, … を使ってます • リモートワーク • 趣味は楽器演奏
  • 6. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan神山ラボ 5
  • 7. Copyright © 2014 Sansan, Inc. All rights reserved. > 趣味 6 • 楽器演奏(エレクトーン・トランペット) • 徳島県内のイベントで、ちらほら演奏する機会を頂い てます
  • 8. Copyright © 2014 Sansan, Inc. All rights reserved. Eight Android アプリ関係者の推移 7 #1 #2 #3 #4 #5 #6
  • 9. Copyright © 2014 Sansan, Inc. All rights reserved. Eight Android アプリ関係者の推移 8 #1 #2 #3 #4 #5 #6 前任者 社員 社員 業務委託 社員 内定者
  • 10. Copyright © 2014 Sansan, Inc. All rights reserved. Eight Android アプリ関係者の推移 9 #1 #2 #3 #4 #5 #6 前任者 社員 社員 業務委託 社員 内定者 ・#5前任者 ・#1社員 ・#3業託 ・#1社員 ・#3業託 ・#2社員 ・#1社員 ・#3業託 ・#2社員 ・#6社員
  • 11. Copyright © 2014 Sansan, Inc. All rights reserved. 時代の推移 10 • 前任者時代 • Android エンジニア同士のレビューができない • どうしても個性が出る • マッチョな Activity • バトンタッチ後 • Android エンジニアの複数人体制 • レビューによる議論も盛んに • 技術顧問の招聘 • モダンなライブラリの紹介&ハンズオン • レビューへの参加
  • 12. Copyright © 2014 Sansan, Inc. All rights reserved. バトンタッチ後に導入したライブラリ等 11 • Realm • Dagger2 • RxJava • Kotlin • Retrofit • など…
  • 13. Copyright © 2014 Sansan, Inc. All rights reserved. バトンタッチ後に導入した CI 環境(Jenkins) 12 • 自動ビルド • リリースバイナリ作成 • Fabric beta へのアップロード • Verification • Lint • UnitTest • 関数の UnitTest • AndroidTest • Realm のマイグレーションテスト
  • 14. Copyright © 2014 Sansan, Inc. All rights reserved. 本題へ… 13
  • 15. Copyright © 2014 Sansan, Inc. All rights reserved. 内部設計の改善 14 • レイヤーの整理・分割 • データの流れ、View の更新方法を整理
  • 16. Copyright © 2014 Sansan, Inc. All rights reserved. レイヤーの整理・分割 15 • Before • マッチョな Activity • View の構築 • 通信処理を呼び出す準備のコード • 通信処理のコールバックで DB 書き込み、View 更新 • After • 表示:Presentation Layer に分割 • 操作:UseCase に切り出して呼び出すだけ
  • 17. Copyright © 2014 Sansan, Inc. All rights reserved. Layers 16 Presentation Layer Application Layer Domain Layer Infrastructure Layer View Presenter Activity Entity UseCase DB Network
  • 18. Copyright © 2014 Sansan, Inc. All rights reserved. Layers 17 Presentation Layer Application Layer Domain Layer Infrastructure Layer View Presenter Activity Entity UseCase DB Network マッチョ Activity
  • 19. Copyright © 2014 Sansan, Inc. All rights reserved. データの流れ、View の更新方法を整理 18 • モデルの変更は別スレッドで行う • View はモデル(Store)からの変更通知を受けて 表示を更新する (Action が View を直接編集しない)
  • 20. Copyright © 2014 Sansan, Inc. All rights reserved. 簡単なアプリで考える 19 • 仕様 • サーバ上のデータを TextView に表示する • 処理 • ローカルにキャッシュがあれば、先にそれを表示する • サーバからデータが取得できたら • TextView に反映する • 値をキャッシュしておく
  • 21. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 20
  • 22. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 21 → Presenter に切り出せる
  • 23. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 22 → UseCase に切り出せる
  • 24. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 23 色んな場所で View を更新している!!
  • 25. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 24 Action(UseCase) が 表示を更新している!
  • 26. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 25 色んな場所で View を更新している!!
  • 27. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 26 色んな場所で View を更新している!! モデルの変更通知を 受けて更新すべき
  • 28. Copyright © 2014 Sansan, Inc. All rights reserved. モデルの変更通知を受けて View を更新する… 27 • SharedPreference • OnSharedPreferenceChangeListener • BehaviorSubject • onNext → subscribe • Realm • Finegrained notifications
  • 29. Copyright © 2014 Sansan, Inc. All rights reserved. モデルの変更通知を受けて View を更新する… 28 • SharedPreference • OnSharedPreferenceChangeListener • BehaviorSubject • onNext → subscribe • Realm • Finegrained notifications データの保存場所に依存せず、 View に Entity を提供したい
  • 30. Copyright © 2014 Sansan, Inc. All rights reserved. モデルの変更通知を受けて View を更新する… 29 • SharedPreference • OnSharedPreferenceChangeListener • BehaviorSubject • onNext → subscribe • Realm • Finegrained notifications データの保存場所に依存せず、 View に Entity を提供したい Store の導入
  • 31. Copyright © 2014 Sansan, Inc. All rights reserved. Store 30 • View は Store からの更新を受けて更新するだけ
  • 32. Copyright © 2014 Sansan, Inc. All rights reserved. Store 31 • View は Store からの更新を受けて更新するだけ
  • 33. Copyright © 2014 Sansan, Inc. All rights reserved. ObjectStore を定義 32 • 値を取得する • 値の変更を Observable で受け取る • これらの実装クラスを作成し、 View はこの実装クラスだけを監視して、 更新があったら反映するだけ
  • 34. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 33
  • 35. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 34 Action(UseCase) が 表示を更新している! × 不要
  • 36. Copyright © 2014 Sansan, Inc. All rights reserved. 例) 35 Action(UseCase) が 表示を更新している! × 不要
  • 37. Copyright © 2014 Sansan, Inc. All rights reserved. Before / After 36 TextView Shared Pref. 初期化時に取得・反映 UseCase ※サーバからの取得処理 反映 反映
  • 38. Copyright © 2014 Sansan, Inc. All rights reserved. Before / After 37 TextViewStoreUseCase TextView Shared Pref. 初期化時に取得・反映 UseCase ※サーバからの取得処理 反映 反映 Shared Pref. 反映 反映 監視 反映 監視
  • 39. Copyright © 2014 Sansan, Inc. All rights reserved. 38 スッキリ!
  • 40. Copyright © 2014 Sansan, Inc. All rights reserved. 補足 39 • 更新通知には rx.Observable を使ってます • Kotlin 使うと Rx 周りはとてもシンプルに書けます • 1つの値を保持する ObjectStore だけでなく、集合を 保持する ArrayStore も用意しています • デグレを支えてくれるテストチームさまさまm(__)m
  • 41. Copyright © 2014 Sansan, Inc. All rights reserved. 40 Fin.