Submit Search
AbemaTV モバイルアプリの開発体制と開発プロセスの話
•
Download as PPTX, PDF
•
12 likes
•
8,318 views
Yuji Hato
Follow
AbemaTV DEVELOPER CONFERENCE 2017
Read less
Read more
1 of 98
Download now
Downloaded 24 times
More Related Content
AbemaTV モバイルアプリの開発体制と開発プロセスの話
1.
AbemaTV モバイルアプリの開発体制と 開発プロセスの話 Yuji Hato AbemaTV DEVELOPER
CONFERENCE 2017
2.
Yuji Hato CyberAgent, Inc.
/ AbemaTV, Inc. dekatotoro @dekatotoro Contributed services About me
3.
Agenda ざっくりAbemaTV iOSチームってど うやって開発しているの?
4.
開発体制
5.
AbemaTV 開発局 50人〜 開発体制
6.
開発体制 Server Web iOS
AndroidDesignDirector QA Board
7.
開発体制 Server Web iOS
AndroidDesignDirector QA Board
8.
開発体制 iOS AndroidDirector ビデオ グロース 本質改善 テレビデバイス その他案件 A,
B, C..
9.
iOSチーム
10.
iOSチーム 10名
11.
iOSチーム 10名
12.
iOSチーム ビデオ グロース 本質改善
テレビデバイス その他案件 A, B, C..
13.
AbemaTV 対応デバイス PC iPhone /
iPad Android / タブレット Apple TV AndroidTV / Amazon Fire TV Google Cast
14.
AbemaTV 対応デバイス PC iPhone /
iPad Android / タブレット Apple TV AndroidTV / Amazon Fire TV Google Cast iOSチーム
15.
Codebase
16.
Codebase ios … iOSアプリ tvos
… tvOSアプリ api … API周りのモジュール protobuf-swift … proto swift cmdshelf-ios … script郡 etc.. (mock, tool, sample) repositories
17.
ios Codebase tvos api
18.
ios Codebase tvos api
19.
ios Codebase
20.
ios Codebase
21.
tvos Codebase
22.
tvos Codebase
23.
api Codebase
24.
api Codebase
25.
毎日の大量のコードの変 更がされている
26.
開発フロー
27.
開発フロー スプリント スプリント スプリント 2週間 スクラム開発
28.
開発 QA 1週間 1週間 開発 開発
開発 QA QA 申請 申請 申請申請 QA 開発フロー
29.
開発 QA 1週間 1週間 開発 開発
開発 QA QA 申請 申請 申請申請 QA 開発フロー
30.
開発とQA期間の重複がつらい 開発フロー
31.
改善 開発フロー
32.
QA 1週間 1週間 QA QA 申請
申請 申請申請 QA 開発 開発 開発 開発フロー
33.
QA 1週間 1週間 QA QA 申請
申請 申請申請 QA 開発 開発 開発 長い開発 開発フロー
34.
QA 1週間 1週間 QA QA 申請
申請 申請申請 QA 開発 開発 開発 開発フロー フライング開発 できる人だけ
35.
タスク
36.
タスク プロデューサー/プランナーが案件を立案 プロデューサー/プランナーがサービスの理想状態を定 義し、それを実現させるための機能を考える プロデューサー/プランナーとディレクター、エンジニ アで内容すり合わせ。実現可能性を検討など。 ディレクター/エンジニアが細かい仕様に落とし込み案 件化 パターン1
37.
タスク エンジニアがコード品質やパフォーマンス、継続的な 開発のための施策を洗い出してタスク化 エンジニアがモックを作って「どうすか、これ?」 エンジニアが勝手に実装して「これ入れていいですか ?」 パターン2
38.
タスクの見積もり
39.
タスクの見積もり ストーリーポイント 1 … 軽微なもの 2
… 0.5スプリント 3 … 1スプリント、またはそれ以上
40.
ストーリーポイント 1 … 軽微なもの 2
… 0.5スプリント おおざっぱ !? タスクの見積もり 3 … 1スプリント、またはそれ以上
41.
優先度定義
42.
優先度定義 優先度は5段階 S, A,
B C, D スプリント期間に開発完了 / テスト / リリース必 須。定常リリース日に間に合わなければリリース 日を遅らせる判断もする スプリント期間に開発完了 / テスト / リリース必 須ではない。開発着手はするものの、開発締め日 に間に合わなければ次回リリースに回す
43.
会議体
44.
会議体 スプリント計画 スプリントレビュー iOSチーム定例(週一) 各自の案件ごとのミーティング
45.
ツール
46.
ツール Slack JIRA Confluence esa GitHub Jenkins etc.. cmdshelf Bitrise
47.
ツール Slack JIRA Confluence esa GitHub Jenkins etc.. cmdshelf Bitrise
48.
ツール リモートリポジトリの実行可能 ファイルをローカルファイルの ように統合して扱える https://github.com/toshi0383/cmdshelf Swift製
49.
ツール cmdshelf-ios repository
50.
ツール cmdshelf-ios repository
51.
ツール cmdshelf-ios repository
52.
ツール cmdshelf-ios repository
53.
開発スタイル
54.
Pull Requests CONTRIBUTING.md抜粋 開発スタイル
55.
Pull Requests pull request
抜粋 活発なレビュー文化 開発スタイル
56.
コーディング規約 CONTRIBUTING.md抜粋 開発スタイル
57.
テスト Executed 2009 tests,
with 0 failures (0 unexpected) in 20.517 (21.345) seconds テスト極力書く! 2017/10/19 開発スタイル
58.
週一の定例やGitHub、 Slack上での議論から随時 開発ルールを更新 開発スタイル iOS定例シート
59.
ブランチ戦略
60.
ブランチ戦略 基本はGitHub Flow 各自トピックブランチをmaster /
qaから 作って作業 開発用のmasterブランチとQA用のqaブランチ
61.
ブランチ戦略 qa master qa merge merge
62.
ブランチ戦略 master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge
63.
master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge ブランチ戦略 スプリント2.3.0
64.
master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge ブランチ戦略 2.3.0 開発期間中 はmaster
65.
master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge ブランチ戦略 2.3.0 QA期間中 はqa
66.
master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge ブランチ戦略 2.3.0 QA期間中の masterは2.4.0開発 (できる人だけ)
67.
master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge ブランチ戦略 2.3.0申請後 qa -> masterにmerge (適時mergeしてる)
68.
ブランチ戦略 master 2.3.0 開発
master 2.4.0 開発 tag 2.2.0 申請 qa master qa 2.2.0 QA qa 2.3.0 QA スプリント2.3.0 qa スプリント2.2.0 スプリント2.4.0 tag 2.3.0 申請 merge merge
69.
Beta配信
70.
Beta配信 bitriseGitHub iTunes Connect TestFlight Crashlytics Tester Designer Others Developer hook delivery pull request
71.
Beta配信 bitriseGitHub iTunes Connect TestFlight Crashlytics Tester Designer Others Developer hook delivery pull request pull
request
72.
Beta配信 bitriseGitHub iTunes Connect TestFlight Crashlytics Tester Designer Others Developer hook delivery pull request push,
merge
73.
Beta配信 bitriseGitHub iTunes Connect TestFlight Crashlytics Tester Designer Others Developer hook delivery pull request 継続的 delivery 対象ブランチは以下 master qa qa-xxxx
74.
Beta配信 bitriseGitHub iTunes Connect TestFlight Crashlytics Tester Designer Others Developer hook delivery pull request QA期間中delivery
75.
Slack通知
76.
Slack通知
77.
Slack通知
78.
Slack通知
79.
Slack通知
80.
Slack通知
81.
Slack通知
82.
Slack通知
83.
Slack通知
84.
QA効率化
85.
QA効率化 QAやデバッグ用に様々なデバ ッグメニューを用意
86.
CPU, メモリ使用率表示 QA効率化
87.
リモート、ローカル通知のシ ミュレート QA効率化
88.
UserDefaults, Keychain, DB, 画像キャッシュの削除 QA効率化
89.
1週間に何回起動したなどの サービスユーザ区分ステータ スを変更 QA効率化
90.
アニメーション速度の変更 QA効率化
91.
再生動画のbitrateやresolution, segmentファイルの転送時間 などAVPlayerから取得できる 情報を全て動画上にoverlay QA効率化
92.
ログ出力確認 QAチームでは「iOS Console 」というツールで実機をつな いで確認 QA効率化
93.
その他
94.
チーム内ランチ勉強会(隔週)カンファレンス登壇
95.
まとめ
96.
まとめ 開発スピードとアプリの安定性、 コード品質を保った継続的な開発 に取り組んでいます
97.
Thank you
98.
We’re hiring! https://abe.ma/2gnzras
Editor's Notes
では早速開発体制についてですが、
ということで早速開発体制についてですが、
現在AbemaTVの開発局は約50名程度います
えー図にするとこのような感じで、左からDirector, Server Design, Web, iOS, Android, QAといたチームに分かれていて、それぞれのチームの代表でBoardメンバーが構成されています.
今日はこの中で、iOSチームについての開発体制や開発スタイルについてお話したいと思います。
まずiOSチームの中でもチームが分かれていて ビデオチーム、グロースチーム、本質改善チーム、テレビデバイスチームと大きく4つに分かれていて、その他にどれに属さない案件、プロジェクトなどがあったりします。
iOSチームですが、
現在10名体制で開発しています。 立ち上げ初期は4名程度だったのでだいぶ大きなチームになりました。
はい、みんなに顔出しOKもらったので載せておきますw
で、具体的には、先程お話したビデオ、グロース、本質改善、テレビデバイスチームはこのような形で分かれていて、その他の案件はケースバイケースでその時の状況で調整して対応しています。
AbemaTVの対応デバイスはPC, iPhone/iPad, Android/タブレット、 AppleTV, AndroidTV, Google Castがあります。
この中でiOSチームはiPhone, iPad, AppleTV, あとGoogle Castはテレビ側のrecieverとクライアント側のsenderがありますが、sender側が担当範囲になります。
iOSチームが管理しているcodebaseですが、
代表的なレポジトリはiosとtvosの2つになります あとは共通のapiモジュールや あっprotocolBuffer使っているのですが、protoのswiftのレポジトリ 共通のscript郡のcmdshelfレポジトリなどがあります
これはcodeのfile数や行数を出したものですが
iosで約9万行、tvosで27000行、apiで3800行くらいですね
こちらはiosレポジトリのGitHubのinsightsになります
iosのレポジトリだと、これは9月19~ 10月19日の1ヶ月で162個のpull requestがマージされていて、営業で1日平均すると、、だいたい7~8個のpull requestがマージされています、 ちなみに一番右の全然commitしてないのはデザイナーで画像差し替えとか文言変更はデザイナーが対応してくれたりします
こちらはtvOSですが、おもに2人で開発していて
tvosのレポジトリだと、57個のpull requestが1ヶ月でマージされていて、営業で1日平均すると、、だいたい2~3個のpull requestがマージされています
こちらは共通のapiモジュールのレポジトリですが
こちらもちょくちょく変更がはいります
何が言いたいかといいますと、まぁみんな仕事していますとw もとい毎日大量のコードが変更されていることがわかると思います
では、そういった開発をしているフローはどうなっているかというと、
こちらの図のような感じで、基本はスクラム開発でsprintを2週間に区切って開発しています。
もうちょっと細かくした図ですが、これは少し前に実践していたフローですが、 開発を二週間、QAを1週間で2週間ごとの申請でやっていました。 ただこれでやっていると問題がありまして、
ここの期間ですね。
開発とQA期間の重複がつらいですと。 QA中にバグ対応などがお主に発生すると、次のsprintへの影響がもろにでてしまうのでこれは無理があるということで、
改善しました。
開発期間1週間、QA期間1週間という定義でやることにしました。 今のところこれでスムーズにいっています。
長い開発はこのような形でsprintを跨いだ開発になります
厳密に1週間/1週間にはならないときも、もちろんあるので、QA期間中から開発をはじめているものもあります。計画ミーティングごとに何をやるか決めますが、ある程度先のsprintの開発まで決めているのでこういった調整が容易になっています。
ではそもそもタスクはどうやって発生しているのかということですが、
パターン1として、、、、、いわゆるトップダウン的なものですね
パターン2は、、、、、といったボトムアップでタスク化することも多々あります。
ではどうやってタスクを見積もっているかということですが、
一応タスクにストーリーポイントを付けています。1ポイントが軽微なもの、2ポイントが0.5スプリント、3ポイントが1スプリント、またはそれ以上といった定義しかしていません
ものすごいおおざっぱですねw この数値の付け方はスクラム開発だと変な定義だと思いますが、 AbemaTVは事業の流れによって案件の優先度がけっこう変わるので、ガチガチにポイントつけてSprintを回すのは向いてなくて、一人ひとりが今どれくらい案件を抱えていて、どのくらい重い開発をしているかを見える化する程度にしています。 ただここももう少しちゃんとポイント定義して回せるようにしていきたいと考えています
タスクの優先度定義ですが、
チケットを見ただけでこれは今回マストで入れないといけないのか、次に回してもいいのかエンジニアが判断できるようにしています。こういった共通言語の定義があることで、ディレクターなどとの会話がスムーズにいくといった利点もあります。
あと会議体ですが、
大きく4つありまして、スプリント計画を行うスプリント計画ミーティング、スプリントの振り返りを行うスプリントレビュー、メンバー各自の案件ごとのミーティングとiOSチームの週一の定例をやっています。毎日の行うようなデイリースクラムはやっていません
あと使っているツールの紹介します
使っているツールですが、いわゆる一般的なものでチャットツールのSlack、チケット管理にJIRA, ドキュメントツールにConfluenceとesa、ソースコード管理にGitHub、CI用にBitriseと自動化用にJenkinsとcmdshelfなどを使っています。
cmdshlefはオリジナルなので知らない人も多いかと思うので少し紹介すると
リモートリポジトリの実行可能ファイルをローカルファイルのように統合して扱えるようにするもので、iOSチームのトッシーさんという方がつくっていてSwift製です
こちら実際の例になります。
最初の方でお話しましたが、iOSチームで管理している共通script置き場のcmdshelf-iosというレポジトリがあります
cmdshelfをinstallしてこのレポジトリをaddして、cmdshelf listを実行すると実行できるコマンド郡が表示されるようになります
listで表示されたものをcmdshelf runで実行できるといった形で、リモートのレポジトリのscript郡を手軽に使えてけっこう便利なものになります。
はい、次に開発スタイルですが、
こちらはContributing.mdのPullRequestsについての抜粋ですが、、、 といったルールも定義しています
これはPull Requestsのリストの抜粋ですが、ちょっと多いとか少ないとかの平均はわかりませんが、自分の経験上、けっこう活発なレビュー文化だと思います。
こちらはコーディング規約でGoodな書き方とBadの書き方というのを明示して、なるべくチーム内でコードの統一性を出すようにしています。
こちらはテストの実行結果ですが、現在2009ケースのテストがあり、極力テストは書くという方針ですすめています。ViewやViewControllerのテストはデザインや仕様も頻繁に変わる現状だとコストが大きいのと、ViewとModelを分離する設計にしているので、Viewのテストは書かなくてよい、Model層やロジックはテスト書くようにしましょうといった方針にしています。
右の図はiOSの週一定例のシートですが、急ぎでないものは各自思いついた時に議題を入れてもらって、定例で結論を出してアクションしていくといったやり方をしています。あとはGitHubやSlack上での議論から開発ルールを更新していっています。
次にブランチ戦略についてお話します
シンプルにこのような形になります。masterブランチがあってQA期間中はqaブランチを使うといったやり方にしています。
これにsprintの図を当てはめるとこのような感じです 左が仮でスプリント2.2.0、真ん中がスプリント2.3.0、右が2.4.0になります
真ん中のスプリント2.3.0を例に見てみますと
2.3.0の開発期間中はmasterブランチからトピックブランチを切ってmsterにプルリクしてmasterにマージします
2.3.0のQA期間中はqaブランチからトピックブランチを切ってプルリクエスト、qaブランチにマージします
2.3.0QA期間中のmasterブランチは2.4.0(次のversion)の開発ブランチになります
2.3.0の申請が終わったらqaブランチをmasterにマージします。 ここは申請というよりは適時マージしているイメージになります
このブランチ戦略の良いところとしては、プルリクエストのmergeができないということがあまり発生しないということと、基本はGitHubフローでシンプルでわかりやすい点です。スクラム開発のsprintサイクルにうまくはまるのではないかと思います。
えー、Beta配信ということで、テスト用アプリの配信の自動化とフローについてです
図のような感じになります
まず Developerがプルリクエストします。
レビューを通ってmergeされると、bitriseがhookでjobを起動します
対象ブランチは先程お話したmasterとqaを対象にしていて、Crashlyticsにuploadして、TesterやDesigner、Directorなどがすぐに確認できるようなっています。 あとはmasterとqa以外にqa-xxxxといった名前でブランチを上げると配信するようにしていて、特別なversionで何か確認してもらいたい時などにも配信できるようにしています
あとはQA期間中はTestFlightにも配信して、本番と同じ状態で確認できるようにしています
はい、あとはSlackの通知もいくつか自動化しているものを紹介します
いくつかピックアップしたいと思います
左上はCocoaPodsのライブラリのアップデートある場合に〜通知しているものです
これは最新のqaビルドが配信されたよ〜といったお知らせで
Crashがけっこう起きてるよ〜といったお知らせ、
これは自前のbotですが、レビューがしばらくされてないプルリクエストがあるよとお知らせしているものです。
あとはp12の証明書が切れそうだよ〜とか
App Storeのレビュー評価
iOS11のbeta10でたよ〜といったAppleのRSSなどをSlackに通知しています。
はい、最後にQAの効率化についての取り組みについてです
機能が多くなり複雑になってくると、QAの時間も比例して大きくなってきてしまいます。その効率化にも取り組んでいて、デバッグメニューを容易しています 現状のデバッグメニューの機能についていくつかピックアップすると
その他としてカンファレンスへの登壇や、チーム内でのランチ勉強会などを行うことによって直接だけでなく間接的に知見の共有になったりしています
はい、まとめです。AbemaTVは事業的に先を見据えたサービスなので、その場しのぎで開発していると長期的な開発のどこかで破綻してしまう可能性もあると思います。なのでAbemaTVのモバイル開発においても長期的な視点で、開発スピードとアプリの安定性、コードの品質を保った継続的な開発ができるように意欲的に取り組んでいます。 簡単になりますがまとめということで、発表を終わりにしたいと思います
Download