Post on 21-Mar-2017
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
CAMPFIRE iOS #01
作井 吉満
Yahoo! JAPAN アプリという
大規模アプリの設計と開発
2017年3月16日
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
About me
2
• 作井吉満
• 2009年新卒入社
• フロントエンド開発を経て、2012年からアプリ開発
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Yahoo! JAPAN アプリについて
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Yahoo! JAPAN アプリ
4
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
今日話したいこと
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
話したいこと
6
開発体制は事業戦略やプロダクトの成長によって変わる
その変化の中で、開発や設計にどう取り組んでいくか
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
現在の体制
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
エンジニア
8
専属のiOSエンジニア 10数名
サービス連携などによる一時的ジョイン 数名
…
…
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Yahoo! JAPAN の特徴
9
• 異動こそ最大の人材育成
• http://business.nikkeibp.co.jp/article/report/20131129/256491/?rt=nocnt
• 越境して、自己主張し、課題解決して感謝される──特殊部隊「SWAT」で学んだこと
• http://linotice.tumblr.com/post/153250089339/20161116
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
同時に開発している案件
10
20以上の施策
• 大(数ヶ月)、小(数日程度)の案件
• 社内サービスとの連携
• ユーザービリティ改善(ABテスト)
• 技術推進(Swift3対応、新OS対応など)
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
開発フローとリリースサイクル
11
2週間に1度仕様検討 プロト開発
設計レビュー
事前テスト PullRequestコードレビュー
結合テスト Submit
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
現在の設計
12
View
ViewController
Multi
DataFetcher
DataFetcher
HogeManager
API
Cache
UI layer Domain layer Data layer
Application layer
Entity
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
開発体制の変化
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
きっかけ
14
約1年前に、これからの開発をよりスケールさせるためにフルスクラッチでコードの刷新を実施
• Swiftへの移行
• レガシーコードの撤廃
• 全体的な仕様の見直し
• パフォーマンス改善
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
どう変化していったか
15
既存版
Swift版
2016.01 2016.06 2016.08 2017.02
約10名
2名
案件ストップ
既存版のタスクが終わったメンバーから順次移動
5名 8名 12名 10名超10名
移行期間
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
10人以上になって起きた課題
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
10人以上になって起きた課題
17
• 全員で集まることが難しい(所属組織も拠点も違う)
• こまかな仕様や、詳細な設計の共有が困難になっていく
• 誰が何をやっているかわからない
• 修正箇所のコンフリクトが増える
• 知らないところで案件がうまれ、仕様が決まり、実装が進む
• すべてをコードレビューすることも、量が多く困難
• 曖昧な設計であるため、コードの統一性は失われていく
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
学んだこと
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
学んだこと
19
開発体制は事業戦略やプロダクトの成長によって変わる
その変化に素早く対応できるようにしておかなければいけない
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
設計の改善に着手
20
同じ思想、パターンで並行開発できる設計が必要
設計を改善していく取り組みを開始
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
どこから手をつけるべきか?
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Viewとロジックを分離する
22
• Viewの操作はPresenterで行う
• ビジネスロジックはUseCaseに集約する
• 新メンバーが入ってもスムーズに開発できるような状態にしておく
• 最初はUIの修正や追加から入ってもらうケースが多い
View Presenter UseCase
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
View同士の依存性をなくす
23
View Presenter UseCase
Router
• 画面遷移はRouterを介して行う
• ABテストや仕様変更による画面遷移の変更に対応できるようにしておく
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
役割を明確にして疎結合にする
24
• 役割を明確に定義したレイヤーに分割する
• レイヤー間のインターフェースはプロトコルを定義
• それぞれが差し替えられる疎結合な作りにする
• 仕様変更に素早く対応できるようにしておく
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
まとめ
25
• 開発体制は事業戦略やプロダクトの成長によって変わる
• メンバーの増加や役割の変更など
• 変化に素早く対応していくため、同じ思想で開発できる設計が必要
• プロダクトにとって効果の大きいところから改善する
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
ご清聴ありがとうございました
Connpassのフォローお願いします!https://yj-meetup.connpass.com/