SlideShare a Scribd company logo
1 of 98
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 Requests
CONTRIBUTING.md抜粋
開発スタイル
Pull Requests
pull 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
Connect
TestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
Beta配信
bitriseGitHub
iTunes
Connect
TestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
pull request
Beta配信
bitriseGitHub
iTunes
Connect
TestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
push, merge
Beta配信
bitriseGitHub
iTunes
Connect
TestFlight
Crashlytics
Tester
Designer
Others
Developer
hook delivery
pull request
継続的
delivery
対象ブランチは以下
master
qa
qa-xxxx
Beta配信
bitriseGitHub
iTunes
Connect
TestFlight
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

More Related Content

What's hot

「情報」を「書く」ということ(仮) #RedmineJapan
 「情報」を「書く」ということ(仮)  #RedmineJapan 「情報」を「書く」ということ(仮)  #RedmineJapan
「情報」を「書く」ということ(仮) #RedmineJapanKazuhito Miura
 
Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!Kanako Kobayashi
 
ゼロから始めるサブスク生活
ゼロから始めるサブスク生活ゼロから始めるサブスク生活
ゼロから始めるサブスク生活KLab Inc. / Tech
 
ユーザーストーリー駆動の開発で「世界を変える」
ユーザーストーリー駆動の開発で「世界を変える」ユーザーストーリー駆動の開発で「世界を変える」
ユーザーストーリー駆動の開発で「世界を変える」shoji_yamada
 
Appium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストAppium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストMasayuki Wakizaka
 
大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexd大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexdItsuki Kuroda
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術Satoshi Yamafuji
 
クラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねクラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねYoshioSawada
 
インセプションデッキのひな形(PPT形式:ダウンロード用)
インセプションデッキのひな形(PPT形式:ダウンロード用)インセプションデッキのひな形(PPT形式:ダウンロード用)
インセプションデッキのひな形(PPT形式:ダウンロード用)A AOKI
 
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発Developers Summit
 
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Yuya Yamaki
 
現場からみた Azure リファレンスアーキテクチャ答え合わせ
現場からみた Azure リファレンスアーキテクチャ答え合わせ現場からみた Azure リファレンスアーキテクチャ答え合わせ
現場からみた Azure リファレンスアーキテクチャ答え合わせKuniteru Asami
 
MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~
MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~
MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~株式会社MonotaRO Tech Team
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話torisoup
 
UIデザインとUXの超基礎「UI Design & UX for ENGINEER」
UIデザインとUXの超基礎「UI Design & UX for ENGINEER」UIデザインとUXの超基礎「UI Design & UX for ENGINEER」
UIデザインとUXの超基礎「UI Design & UX for ENGINEER」Kazuki Yamashita
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込むYoshiki Hayama
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことgree_tech
 
逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践
逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践
逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践toshihiro ichitani
 

What's hot (20)

「情報」を「書く」ということ(仮) #RedmineJapan
 「情報」を「書く」ということ(仮)  #RedmineJapan 「情報」を「書く」ということ(仮)  #RedmineJapan
「情報」を「書く」ということ(仮) #RedmineJapan
 
Provisioning & Deploy on AWS
Provisioning & Deploy on AWSProvisioning & Deploy on AWS
Provisioning & Deploy on AWS
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!
 
ゼロから始めるサブスク生活
ゼロから始めるサブスク生活ゼロから始めるサブスク生活
ゼロから始めるサブスク生活
 
ユーザーストーリー駆動の開発で「世界を変える」
ユーザーストーリー駆動の開発で「世界を変える」ユーザーストーリー駆動の開発で「世界を変える」
ユーザーストーリー駆動の開発で「世界を変える」
 
Appium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストAppium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテスト
 
大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexd大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexd
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
 
クラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねクラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよね
 
インセプションデッキのひな形(PPT形式:ダウンロード用)
インセプションデッキのひな形(PPT形式:ダウンロード用)インセプションデッキのひな形(PPT形式:ダウンロード用)
インセプションデッキのひな形(PPT形式:ダウンロード用)
 
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
 
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。
 
現場からみた Azure リファレンスアーキテクチャ答え合わせ
現場からみた Azure リファレンスアーキテクチャ答え合わせ現場からみた Azure リファレンスアーキテクチャ答え合わせ
現場からみた Azure リファレンスアーキテクチャ答え合わせ
 
MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~
MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~
MonotaROの基幹システムがこの先生きのこるには 2015.03.20 DevLOVE関西 事業会社の現場を知ろう~モノタロウ編~
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
UIデザインとUXの超基礎「UI Design & UX for ENGINEER」
UIデザインとUXの超基礎「UI Design & UX for ENGINEER」UIデザインとUXの超基礎「UI Design & UX for ENGINEER」
UIデザインとUXの超基礎「UI Design & UX for ENGINEER」
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践
逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践
逆境から新規事業をスタートアップする「仮説検証型アジャイル開発」の実践
 

Viewers also liked

AbemaTV デザインのBefore & After
AbemaTV デザインのBefore & AfterAbemaTV デザインのBefore & After
AbemaTV デザインのBefore & AfterShunsuke Matsumoto
 
最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたものcyberagent
 
アドテクスタジオのデータ分析基盤について
アドテクスタジオのデータ分析基盤についてアドテクスタジオのデータ分析基盤について
アドテクスタジオのデータ分析基盤についてkazuhiro ito
 
マッチングサービスにおけるKPIの話
マッチングサービスにおけるKPIの話マッチングサービスにおけるKPIの話
マッチングサービスにおけるKPIの話cyberagent
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話しますMoriyoshi Koizumi
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介cyberagent
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 

Viewers also liked (7)

AbemaTV デザインのBefore & After
AbemaTV デザインのBefore & AfterAbemaTV デザインのBefore & After
AbemaTV デザインのBefore & After
 
最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの
 
アドテクスタジオのデータ分析基盤について
アドテクスタジオのデータ分析基盤についてアドテクスタジオのデータ分析基盤について
アドテクスタジオのデータ分析基盤について
 
マッチングサービスにおけるKPIの話
マッチングサービスにおけるKPIの話マッチングサービスにおけるKPIの話
マッチングサービスにおけるKPIの話
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 

Similar to AbemaTV モバイルアプリの開発体制と開発プロセスの話

どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio CodeTakashi Okawa
 
イマドキのソフトウェア開発プロジェクトの流れ
イマドキのソフトウェア開発プロジェクトの流れイマドキのソフトウェア開発プロジェクトの流れ
イマドキのソフトウェア開発プロジェクトの流れTakashi Takebayashi
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?Yuta Matsumura
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情Toshiyuki Hirata
 
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi20212021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021Hiroyuki Mori
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜Daiki Kawanuma
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
Cloud Foundry Summit 2017 Recap
Cloud Foundry Summit 2017 RecapCloud Foundry Summit 2017 Recap
Cloud Foundry Summit 2017 RecapShinya Sasaki
 
DevOpsプラクティスをAuth0環境に適応する方法
DevOpsプラクティスをAuth0環境に適応する方法DevOpsプラクティスをAuth0環境に適応する方法
DevOpsプラクティスをAuth0環境に適応する方法Hisashi Yamaguchi
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化Issei Hiraoka
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLINE Corporation
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フローYuki Okada
 
マイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recap
マイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recapマイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recap
マイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 RecapAyako Omori
 
[POST.Dev Japan] VS Code で試みる開発体験の向上
[POST.Dev Japan] VS Code で試みる開発体験の向上[POST.Dev Japan] VS Code で試みる開発体験の向上
[POST.Dev Japan] VS Code で試みる開発体験の向上Tomomi Imura
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーImamura Masayuki
 
Web制作者がandriodのcddを読んでみた version1.1
Web制作者がandriodのcddを読んでみた version1.1Web制作者がandriodのcddを読んでみた version1.1
Web制作者がandriodのcddを読んでみた version1.1Masakazu Muraoka
 
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境bitbank, Inc. Tokyo, Japan
 
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)Keizo Tatsumi
 

Similar to AbemaTV モバイルアプリの開発体制と開発プロセスの話 (20)

どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
イマドキのソフトウェア開発プロジェクトの流れ
イマドキのソフトウェア開発プロジェクトの流れイマドキのソフトウェア開発プロジェクトの流れ
イマドキのソフトウェア開発プロジェクトの流れ
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
 
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi20212021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
Cloud Foundry Summit 2017 Recap
Cloud Foundry Summit 2017 RecapCloud Foundry Summit 2017 Recap
Cloud Foundry Summit 2017 Recap
 
DevOpsプラクティスをAuth0環境に適応する方法
DevOpsプラクティスをAuth0環境に適応する方法DevOpsプラクティスをAuth0環境に適応する方法
DevOpsプラクティスをAuth0環境に適応する方法
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With Kotlin
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
 
マイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recap
マイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recapマイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recap
マイクロソフトの AI プラットフォーム & Cognitive Services 概要 ~ Ignite 2020 Recap
 
[POST.Dev Japan] VS Code で試みる開発体験の向上
[POST.Dev Japan] VS Code で試みる開発体験の向上[POST.Dev Japan] VS Code で試みる開発体験の向上
[POST.Dev Japan] VS Code で試みる開発体験の向上
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
Web制作者がandriodのcddを読んでみた version1.1
Web制作者がandriodのcddを読んでみた version1.1Web制作者がandriodのcddを読んでみた version1.1
Web制作者がandriodのcddを読んでみた version1.1
 
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
 
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
 

More from Yuji Hato

継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」Yuji Hato
 
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ - Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ - Yuji Hato
 
iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術Yuji Hato
 
5分で学ぶ差分更新とRxDataSources
5分で学ぶ差分更新とRxDataSources5分で学ぶ差分更新とRxDataSources
5分で学ぶ差分更新とRxDataSourcesYuji Hato
 
Apple TV tvOS入門 Iosdc2017
Apple TV tvOS入門 Iosdc2017Apple TV tvOS入門 Iosdc2017
Apple TV tvOS入門 Iosdc2017Yuji Hato
 
AbemaTV on tvOS
AbemaTV on tvOSAbemaTV on tvOS
AbemaTV on tvOSYuji Hato
 
Flux with RxSwift
Flux with RxSwiftFlux with RxSwift
Flux with RxSwiftYuji Hato
 
CarPlayの対応方法と日本での現状
CarPlayの対応方法と日本での現状CarPlayの対応方法と日本での現状
CarPlayの対応方法と日本での現状Yuji Hato
 
AWA with Realm
AWA with RealmAWA with Realm
AWA with RealmYuji Hato
 

More from Yuji Hato (9)

継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
 
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ - Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
 
iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術
 
5分で学ぶ差分更新とRxDataSources
5分で学ぶ差分更新とRxDataSources5分で学ぶ差分更新とRxDataSources
5分で学ぶ差分更新とRxDataSources
 
Apple TV tvOS入門 Iosdc2017
Apple TV tvOS入門 Iosdc2017Apple TV tvOS入門 Iosdc2017
Apple TV tvOS入門 Iosdc2017
 
AbemaTV on tvOS
AbemaTV on tvOSAbemaTV on tvOS
AbemaTV on tvOS
 
Flux with RxSwift
Flux with RxSwiftFlux with RxSwift
Flux with RxSwift
 
CarPlayの対応方法と日本での現状
CarPlayの対応方法と日本での現状CarPlayの対応方法と日本での現状
CarPlayの対応方法と日本での現状
 
AWA with Realm
AWA with RealmAWA with Realm
AWA with Realm
 

AbemaTV モバイルアプリの開発体制と開発プロセスの話

Editor's Notes

  1. では早速開発体制についてですが、
  2. ということで早速開発体制についてですが、
  3. 現在AbemaTVの開発局は約50名程度います
  4. えー図にするとこのような感じで、左からDirector, Server Design, Web, iOS, Android, QAといたチームに分かれていて、それぞれのチームの代表でBoardメンバーが構成されています.
  5. 今日はこの中で、iOSチームについての開発体制や開発スタイルについてお話したいと思います。
  6. まずiOSチームの中でもチームが分かれていて ビデオチーム、グロースチーム、本質改善チーム、テレビデバイスチームと大きく4つに分かれていて、その他にどれに属さない案件、プロジェクトなどがあったりします。
  7. iOSチームですが、
  8. 現在10名体制で開発しています。 立ち上げ初期は4名程度だったのでだいぶ大きなチームになりました。
  9. はい、みんなに顔出しOKもらったので載せておきますw
  10. で、具体的には、先程お話したビデオ、グロース、本質改善、テレビデバイスチームはこのような形で分かれていて、その他の案件はケースバイケースでその時の状況で調整して対応しています。
  11. AbemaTVの対応デバイスはPC, iPhone/iPad, Android/タブレット、 AppleTV, AndroidTV, Google Castがあります。
  12. この中でiOSチームはiPhone, iPad, AppleTV, あとGoogle Castはテレビ側のrecieverとクライアント側のsenderがありますが、sender側が担当範囲になります。
  13. iOSチームが管理しているcodebaseですが、
  14. 代表的なレポジトリはiosとtvosの2つになります あとは共通のapiモジュールや あっprotocolBuffer使っているのですが、protoのswiftのレポジトリ 共通のscript郡のcmdshelfレポジトリなどがあります
  15. これはcodeのfile数や行数を出したものですが
  16. iosで約9万行、tvosで27000行、apiで3800行くらいですね
  17. こちらはiosレポジトリのGitHubのinsightsになります
  18. iosのレポジトリだと、これは9月19~ 10月19日の1ヶ月で162個のpull requestがマージされていて、営業で1日平均すると、、だいたい7~8個のpull requestがマージされています、 ちなみに一番右の全然commitしてないのはデザイナーで画像差し替えとか文言変更はデザイナーが対応してくれたりします
  19. こちらはtvOSですが、おもに2人で開発していて
  20. tvosのレポジトリだと、57個のpull requestが1ヶ月でマージされていて、営業で1日平均すると、、だいたい2~3個のpull requestがマージされています
  21. こちらは共通のapiモジュールのレポジトリですが
  22. こちらもちょくちょく変更がはいります
  23. 何が言いたいかといいますと、まぁみんな仕事していますとw もとい毎日大量のコードが変更されていることがわかると思います
  24. では、そういった開発をしているフローはどうなっているかというと、
  25. こちらの図のような感じで、基本はスクラム開発でsprintを2週間に区切って開発しています。
  26. もうちょっと細かくした図ですが、これは少し前に実践していたフローですが、 開発を二週間、QAを1週間で2週間ごとの申請でやっていました。 ただこれでやっていると問題がありまして、
  27. ここの期間ですね。
  28. 開発とQA期間の重複がつらいですと。 QA中にバグ対応などがお主に発生すると、次のsprintへの影響がもろにでてしまうのでこれは無理があるということで、
  29. 改善しました。
  30. 開発期間1週間、QA期間1週間という定義でやることにしました。 今のところこれでスムーズにいっています。
  31. 長い開発はこのような形でsprintを跨いだ開発になります
  32. 厳密に1週間/1週間にはならないときも、もちろんあるので、QA期間中から開発をはじめているものもあります。計画ミーティングごとに何をやるか決めますが、ある程度先のsprintの開発まで決めているのでこういった調整が容易になっています。
  33. ではそもそもタスクはどうやって発生しているのかということですが、
  34. パターン1として、、、、、いわゆるトップダウン的なものですね
  35. パターン2は、、、、、といったボトムアップでタスク化することも多々あります。
  36. ではどうやってタスクを見積もっているかということですが、
  37. 一応タスクにストーリーポイントを付けています。1ポイントが軽微なもの、2ポイントが0.5スプリント、3ポイントが1スプリント、またはそれ以上といった定義しかしていません
  38. ものすごいおおざっぱですねw この数値の付け方はスクラム開発だと変な定義だと思いますが、 AbemaTVは事業の流れによって案件の優先度がけっこう変わるので、ガチガチにポイントつけてSprintを回すのは向いてなくて、一人ひとりが今どれくらい案件を抱えていて、どのくらい重い開発をしているかを見える化する程度にしています。 ただここももう少しちゃんとポイント定義して回せるようにしていきたいと考えています
  39. タスクの優先度定義ですが、
  40. チケットを見ただけでこれは今回マストで入れないといけないのか、次に回してもいいのかエンジニアが判断できるようにしています。こういった共通言語の定義があることで、ディレクターなどとの会話がスムーズにいくといった利点もあります。
  41. あと会議体ですが、
  42. 大きく4つありまして、スプリント計画を行うスプリント計画ミーティング、スプリントの振り返りを行うスプリントレビュー、メンバー各自の案件ごとのミーティングとiOSチームの週一の定例をやっています。毎日の行うようなデイリースクラムはやっていません
  43. あと使っているツールの紹介します
  44. 使っているツールですが、いわゆる一般的なものでチャットツールのSlack、チケット管理にJIRA, ドキュメントツールにConfluenceとesa、ソースコード管理にGitHub、CI用にBitriseと自動化用にJenkinsとcmdshelfなどを使っています。
  45. cmdshlefはオリジナルなので知らない人も多いかと思うので少し紹介すると
  46. リモートリポジトリの実行可能ファイルをローカルファイルのように統合して扱えるようにするもので、iOSチームのトッシーさんという方がつくっていてSwift製です
  47. こちら実際の例になります。
  48. 最初の方でお話しましたが、iOSチームで管理している共通script置き場のcmdshelf-iosというレポジトリがあります
  49. cmdshelfをinstallしてこのレポジトリをaddして、cmdshelf listを実行すると実行できるコマンド郡が表示されるようになります
  50. listで表示されたものをcmdshelf runで実行できるといった形で、リモートのレポジトリのscript郡を手軽に使えてけっこう便利なものになります。
  51. はい、次に開発スタイルですが、
  52. こちらはContributing.mdのPullRequestsについての抜粋ですが、、、 といったルールも定義しています
  53. これはPull Requestsのリストの抜粋ですが、ちょっと多いとか少ないとかの平均はわかりませんが、自分の経験上、けっこう活発なレビュー文化だと思います。
  54. こちらはコーディング規約でGoodな書き方とBadの書き方というのを明示して、なるべくチーム内でコードの統一性を出すようにしています。
  55. こちらはテストの実行結果ですが、現在2009ケースのテストがあり、極力テストは書くという方針ですすめています。ViewやViewControllerのテストはデザインや仕様も頻繁に変わる現状だとコストが大きいのと、ViewとModelを分離する設計にしているので、Viewのテストは書かなくてよい、Model層やロジックはテスト書くようにしましょうといった方針にしています。
  56. 右の図はiOSの週一定例のシートですが、急ぎでないものは各自思いついた時に議題を入れてもらって、定例で結論を出してアクションしていくといったやり方をしています。あとはGitHubやSlack上での議論から開発ルールを更新していっています。
  57. 次にブランチ戦略についてお話します
  58. シンプルにこのような形になります。masterブランチがあってQA期間中はqaブランチを使うといったやり方にしています。
  59. これにsprintの図を当てはめるとこのような感じです 左が仮でスプリント2.2.0、真ん中がスプリント2.3.0、右が2.4.0になります
  60. 真ん中のスプリント2.3.0を例に見てみますと
  61. 2.3.0の開発期間中はmasterブランチからトピックブランチを切ってmsterにプルリクしてmasterにマージします
  62. 2.3.0のQA期間中はqaブランチからトピックブランチを切ってプルリクエスト、qaブランチにマージします
  63. 2.3.0QA期間中のmasterブランチは2.4.0(次のversion)の開発ブランチになります
  64. 2.3.0の申請が終わったらqaブランチをmasterにマージします。 ここは申請というよりは適時マージしているイメージになります
  65. このブランチ戦略の良いところとしては、プルリクエストのmergeができないということがあまり発生しないということと、基本はGitHubフローでシンプルでわかりやすい点です。スクラム開発のsprintサイクルにうまくはまるのではないかと思います。
  66. えー、Beta配信ということで、テスト用アプリの配信の自動化とフローについてです
  67. 図のような感じになります
  68. まず Developerがプルリクエストします。
  69. レビューを通ってmergeされると、bitriseがhookでjobを起動します
  70. 対象ブランチは先程お話したmasterとqaを対象にしていて、Crashlyticsにuploadして、TesterやDesigner、Directorなどがすぐに確認できるようなっています。 あとはmasterとqa以外にqa-xxxxといった名前でブランチを上げると配信するようにしていて、特別なversionで何か確認してもらいたい時などにも配信できるようにしています
  71. あとはQA期間中はTestFlightにも配信して、本番と同じ状態で確認できるようにしています
  72. はい、あとはSlackの通知もいくつか自動化しているものを紹介します
  73. いくつかピックアップしたいと思います
  74. 左上はCocoaPodsのライブラリのアップデートある場合に〜通知しているものです
  75. これは最新のqaビルドが配信されたよ〜といったお知らせで
  76. Crashがけっこう起きてるよ〜といったお知らせ、
  77. これは自前のbotですが、レビューがしばらくされてないプルリクエストがあるよとお知らせしているものです。
  78. あとはp12の証明書が切れそうだよ〜とか
  79. App Storeのレビュー評価
  80. iOS11のbeta10でたよ〜といったAppleのRSSなどをSlackに通知しています。
  81. はい、最後にQAの効率化についての取り組みについてです
  82. 機能が多くなり複雑になってくると、QAの時間も比例して大きくなってきてしまいます。その効率化にも取り組んでいて、デバッグメニューを容易しています 現状のデバッグメニューの機能についていくつかピックアップすると
  83. その他としてカンファレンスへの登壇や、チーム内でのランチ勉強会などを行うことによって直接だけでなく間接的に知見の共有になったりしています
  84. はい、まとめです。AbemaTVは事業的に先を見据えたサービスなので、その場しのぎで開発していると長期的な開発のどこかで破綻してしまう可能性もあると思います。なのでAbemaTVのモバイル開発においても長期的な視点で、開発スピードとアプリの安定性、コードの品質を保った継続的な開発ができるように意欲的に取り組んでいます。 簡単になりますがまとめということで、発表を終わりにしたいと思います