26
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. CAMPFIRE iOS #01 作井 吉満 Yahoo! JAPAN アプリという 大規模アプリの設計と開発 2017年3月16日

Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

  • Upload
    yahoo

  • View
    702

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

CAMPFIRE iOS #01

作井 吉満

Yahoo! JAPAN アプリという

大規模アプリの設計と開発

2017年3月16日

Page 2: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

About me

2

• 作井吉満

• 2009年新卒入社

• フロントエンド開発を経て、2012年からアプリ開発

Page 3: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Yahoo! JAPAN アプリについて

Page 4: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Yahoo! JAPAN アプリ

4

Page 5: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

今日話したいこと

Page 6: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

話したいこと

6

開発体制は事業戦略やプロダクトの成長によって変わる

その変化の中で、開発や設計にどう取り組んでいくか

Page 7: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

現在の体制

Page 8: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

エンジニア

8

専属のiOSエンジニア 10数名

サービス連携などによる一時的ジョイン 数名

Page 9: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

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

Page 10: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

同時に開発している案件

10

20以上の施策

• 大(数ヶ月)、小(数日程度)の案件

• 社内サービスとの連携

• ユーザービリティ改善(ABテスト)

• 技術推進(Swift3対応、新OS対応など)

Page 11: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

開発フローとリリースサイクル

11

2週間に1度仕様検討 プロト開発

設計レビュー

事前テスト PullRequestコードレビュー

結合テスト Submit

Page 12: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

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

Page 13: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

開発体制の変化

Page 14: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

きっかけ

14

約1年前に、これからの開発をよりスケールさせるためにフルスクラッチでコードの刷新を実施

• Swiftへの移行

• レガシーコードの撤廃

• 全体的な仕様の見直し

• パフォーマンス改善

Page 15: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

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名

移行期間

Page 16: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

10人以上になって起きた課題

Page 17: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

10人以上になって起きた課題

17

• 全員で集まることが難しい(所属組織も拠点も違う)

• こまかな仕様や、詳細な設計の共有が困難になっていく

• 誰が何をやっているかわからない

• 修正箇所のコンフリクトが増える

• 知らないところで案件がうまれ、仕様が決まり、実装が進む

• すべてをコードレビューすることも、量が多く困難

• 曖昧な設計であるため、コードの統一性は失われていく

Page 18: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

学んだこと

Page 19: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

学んだこと

19

開発体制は事業戦略やプロダクトの成長によって変わる

その変化に素早く対応できるようにしておかなければいけない

Page 20: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

設計の改善に着手

20

同じ思想、パターンで並行開発できる設計が必要

設計を改善していく取り組みを開始

Page 21: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

どこから手をつけるべきか?

Page 22: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Viewとロジックを分離する

22

• Viewの操作はPresenterで行う

• ビジネスロジックはUseCaseに集約する

• 新メンバーが入ってもスムーズに開発できるような状態にしておく

• 最初はUIの修正や追加から入ってもらうケースが多い

View Presenter UseCase

Page 23: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

View同士の依存性をなくす

23

View Presenter UseCase

Router

• 画面遷移はRouterを介して行う

• ABテストや仕様変更による画面遷移の変更に対応できるようにしておく

Page 24: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

役割を明確にして疎結合にする

24

• 役割を明確に定義したレイヤーに分割する

• レイヤー間のインターフェースはプロトコルを定義

• それぞれが差し替えられる疎結合な作りにする

• 仕様変更に素早く対応できるようにしておく

Page 25: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

まとめ

25

• 開発体制は事業戦略やプロダクトの成長によって変わる

• メンバーの増加や役割の変更など

• 変化に素早く対応していくため、同じ思想で開発できる設計が必要

• プロダクトにとって効果の大きいところから改善する

Page 26: Yahoo! JAPAN アプリという 大規模アプリの設計と開発 #yjcamp

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/