abematv モバイルアプリの開発体制と開発プロセスの話
TRANSCRIPT
AbemaTVモバイルアプリの開発体制と
開発プロセスの話
Yuji Hato
AbemaTV DEVELOPER CONFERENCE 2017
Yuji Hato
CyberAgent, Inc. / AbemaTV, Inc.
dekatotoro
@dekatotoro
Contributed services
About me
Agenda
ざっくりAbemaTV iOSチームってどうやって開発しているの?
開発体制
AbemaTV 開発局 50人〜
開発体制
開発体制
Server Web iOS AndroidDesignDirector QA
Board
開発体制
Server Web iOS AndroidDesignDirector QA
Board
開発体制
iOS AndroidDirector
ビデオ
グロース
本質改善
テレビデバイス
その他案件 A, B, C..
iOSチーム
iOSチーム 10名
iOSチーム 10名
iOSチーム
ビデオ グロース 本質改善 テレビデバイス
その他案件 A, B, C..
AbemaTV 対応デバイス
PC
iPhone / iPad
Android / タブレットApple TV
AndroidTV / Amazon Fire TV
Google Cast
AbemaTV 対応デバイス
PC
iPhone / iPad
Android / タブレットApple TV
AndroidTV / Amazon Fire TV
Google Cast
iOSチーム
Codebase
Codebase
ios … iOSアプリ
tvos … tvOSアプリ
api … API周りのモジュール
protobuf-swift … proto swift
cmdshelf-ios … script郡
etc.. (mock, tool, sample)
repositories
ios
Codebase
tvos
api
ios
Codebase
tvos
api
ios
Codebase
ios
Codebase
tvos
Codebase
tvos
Codebase
api
Codebase
api
Codebase
毎日の大量のコードの変更がされている
開発フロー
開発フロー
スプリント スプリント スプリント
2週間
スクラム開発
開発
QA
1週間 1週間
開発 開発 開発
QA QA
申請 申請 申請申請
QA
開発フロー
開発
QA
1週間 1週間
開発 開発 開発
QA QA
申請 申請 申請申請
QA
開発フロー
開発とQA期間の重複がつらい
開発フロー
改善
開発フロー
QA
1週間 1週間
QA QA
申請 申請 申請申請
QA 開発 開発 開発
開発フロー
QA
1週間 1週間
QA QA
申請 申請 申請申請
QA 開発 開発 開発
長い開発
開発フロー
QA
1週間 1週間
QA QA
申請 申請 申請申請
QA 開発 開発 開発
開発フロー
フライング開発できる人だけ
タスク
タスク
プロデューサー/プランナーが案件を立案
プロデューサー/プランナーがサービスの理想状態を定義し、それを実現させるための機能を考える
プロデューサー/プランナーとディレクター、エンジニアで内容すり合わせ。実現可能性を検討など。
ディレクター/エンジニアが細かい仕様に落とし込み案件化
パターン1
タスク
エンジニアがコード品質やパフォーマンス、継続的な開発のための施策を洗い出してタスク化
エンジニアがモックを作って「どうすか、これ?」
エンジニアが勝手に実装して「これ入れていいですか?」
パターン2
タスクの見積もり
タスクの見積もり
ストーリーポイント
1 … 軽微なもの
2 … 0.5スプリント
3 … 1スプリント、またはそれ以上
ストーリーポイント
1 … 軽微なもの
2 … 0.5スプリント
おおざっぱ !?
タスクの見積もり
3 … 1スプリント、またはそれ以上
優先度定義
優先度定義
優先度は5段階 S, A, B C, D
スプリント期間に開発完了 / テスト / リリース必須。定常リリース日に間に合わなければリリース日を遅らせる判断もする
スプリント期間に開発完了 / テスト / リリース必
須ではない。開発着手はするものの、開発締め日に間に合わなければ次回リリースに回す
会議体
会議体
スプリント計画
スプリントレビュー
iOSチーム定例(週一)
各自の案件ごとのミーティング
ツール
ツール
Slack
JIRA
Confluence
esa
GitHub
Jenkins
etc..
cmdshelf
Bitrise
ツール
Slack
JIRA
Confluence
esa
GitHub
Jenkins
etc..
cmdshelf
Bitrise
ツール
リモートリポジトリの実行可能ファイルをローカルファイルのように統合して扱える
https://github.com/toshi0383/cmdshelf
Swift製
ツールcmdshelf-ios repository
ツールcmdshelf-ios repository
ツールcmdshelf-ios repository
ツールcmdshelf-ios repository
開発スタイル
Pull RequestsCONTRIBUTING.md抜粋
開発スタイル
Pull Requestspull request 抜粋
活発なレビュー文化
開発スタイル
コーディング規約CONTRIBUTING.md抜粋
開発スタイル
テスト
Executed 2009 tests, with 0 failures (0 unexpected) in 20.517
(21.345) seconds
テスト極力書く!
2017/10/19
開発スタイル
週一の定例やGitHub、Slack上での議論から随時開発ルールを更新
開発スタイル
iOS定例シート
ブランチ戦略
ブランチ戦略
基本はGitHub Flow
各自トピックブランチをmaster / qaから作って作業
開発用のmasterブランチとQA用のqaブランチ
ブランチ戦略
qa
master
qa
merge merge
ブランチ戦略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
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 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
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
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開発
(できる人だけ)
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してる)
ブランチ戦略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
Beta配信
Beta配信
bitriseGitHub
iTunes
ConnectTestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
Beta配信
bitriseGitHub
iTunes
ConnectTestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull requestpull request
Beta配信
bitriseGitHub
iTunes
ConnectTestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
push, merge
Beta配信
bitriseGitHub
iTunes
ConnectTestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
継続的delivery
対象ブランチは以下master
qa
qa-xxxx
Beta配信
bitriseGitHub
iTunes
ConnectTestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
QA期間中delivery
Slack通知
Slack通知
Slack通知
Slack通知
Slack通知
Slack通知
Slack通知
Slack通知
Slack通知
QA効率化
QA効率化
QAやデバッグ用に様々なデバッグメニューを用意
CPU, メモリ使用率表示
QA効率化
リモート、ローカル通知のシミュレート
QA効率化
UserDefaults, Keychain, DB,
画像キャッシュの削除
QA効率化
1週間に何回起動したなどのサービスユーザ区分ステータスを変更
QA効率化
アニメーション速度の変更
QA効率化
再生動画のbitrateやresolution,
segmentファイルの転送時間などAVPlayerから取得できる情報を全て動画上にoverlay
QA効率化
ログ出力確認QAチームでは「iOS Console
」というツールで実機をつないで確認
QA効率化
その他
チーム内ランチ勉強会(隔週)カンファレンス登壇
まとめ
まとめ
開発スピードとアプリの安定性、コード品質を保った継続的な開発に取り組んでいます
Thank you
We’re hiring!
https://abe.ma/2gnzras