Slide 1

Slide 1 text

既存プロジェクトへCI/CDをどう導入 するか?
 ZOZOTOWN AndroidへのCI/CDの導入
 株式会社ZOZOテクノロジーズ
 開発部
 堀江 亮介 Copyright © ZOZO Technologies, Inc.

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 自己紹介
 2 ZOZOテクノロジーズ 開発部 Androidエンジニア Tech Lead 堀江 亮介 Ryosuke Horie ・自動化とビールが好き ・ @Horie1024

Slide 3

Slide 3 text

© ZOZO Technologies, Inc. https://zozo.jp/
 ● 日本最大級のファッション通販サイト
 ● 1,200以上のショップ、7,300以上のブランドの取り扱い(ともに2019年6 月末時点)
 ● 常時73万点以上の商品アイテム数と毎日平均3,200点以上の新着 商 品を掲載
 ● 即日配送サービス
 ● ギフトラッピングサービス
 ● ツケ払い など
 3

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. ● 導入の経緯
 ● なぜCI/CDを導入するのか?
 ● 導入の流れ
 ○ 導入計画の策定
 ○ 導入計画の実施
 ● 継続的なCI/CD機能のアップデート
 今日話す内容
 4

Slide 5

Slide 5 text

© ZOZO Technologies, Inc. 導入の経緯
 5

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. ZOZOTOWN Android
 6 ● 2012年5月リリース
 ● 長い運用期間
 ● それなりの規模のアプリ
 ○ Activity: 8, Fragment: 94
 ○ (ほぼ)Single Activity App


Slide 7

Slide 7 text

© ZOZO Technologies, Inc. ZOZOTOWN Android 2019年4月〜
 7 ● メンバーが増える 3 → 8 (自分もこのタイミングで参加)


Slide 8

Slide 8 text

© ZOZO Technologies, Inc. ZOZOTOWN Android 2019年4月〜
 8 ● メンバーが増える 3 → 8 (自分もこのタイミングで参加)
 ● 高い品質で素早く開発できるチームづくりを求められる


Slide 9

Slide 9 text

© ZOZO Technologies, Inc. ZOZOTOWN Android 2019年4月〜
 9 ● メンバーが増える 3 → 8 (自分もこのタイミングで参加)
 ● 高い品質で素早く開発できるチームづくりを求められる
 ● 2つの軸でアプローチ
 ○ アジャイルな開発フローの導入
 ○ CI/CDの導入


Slide 10

Slide 10 text

© ZOZO Technologies, Inc. ZOZOTOWN Android 2019年4月〜
 10 ● メンバーが増える 3 → 8 (自分もこのタイミングで参加)
 ● 高い品質で素早く開発できるチームづくりを求められる
 ● 2つの軸でアプローチ
 ○ アジャイルな開発フローの導入
 ○ CI/CDの導入


Slide 11

Slide 11 text

© ZOZO Technologies, Inc. なぜCI/CDを導入するのか?
 11

Slide 12

Slide 12 text

© ZOZO Technologies, Inc. ユーザーに価値を素早く届ける
 12 ● 品質の向上
 ● 開発フローの効率化
 ● リリースフローの効率化


Slide 13

Slide 13 text

© ZOZO Technologies, Inc. CI/CD導入でチームに良い影響を与える
 13 ● 単に技術の導入にとどまらない


Slide 14

Slide 14 text

© ZOZO Technologies, Inc. CI/CD導入でチームに良い影響を与える
 14 ● 単に技術の導入にとどまらない
 ● 組織や組織文化にも影響を与える


Slide 15

Slide 15 text

© ZOZO Technologies, Inc. CI/CD導入でチームに良い影響を与える
 15 ● 単に技術の導入にとどまらない
 ● 組織や組織文化にも影響を与える
 ● 文化を変えることも目的
 ○ アジャイルな開発への移行を促す
 ○ ハイパフォーマンスなチームを目指す
 ■ 書籍「LeanとDevOpsの科学」が参考になる


Slide 16

Slide 16 text

© ZOZO Technologies, Inc. CI/CD導入の流れ
 16

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. CI/CD導入の流れ
 
 
 17 ● 導入計画の決定
 ● 導入計画の実施
 ● 継続的なCI/CD機能のアップデート


Slide 18

Slide 18 text

© ZOZO Technologies, Inc. CI/CD導入の流れ
 
 
 18 ● 導入計画の決定
 ○ CI/CDをどう導入していくか
 ● 導入計画の実施
 ○ プロジェクトへ実際に導入する
 ● 継続的なCI/CD機能のアップデート
 ○ チームの状況に応じてCI/CDの機能をアップデート


Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 導入計画の決定
 19

Slide 20

Slide 20 text

© ZOZO Technologies, Inc. 段階的な導入
 20 ● 一度に多くを変えるとチームへの負担が増す
 ● CI/CDの機能のうち「どの機能」を「どの順番」で導入していくか
 ● 最初からフル機能のCI/CDを実現しようとしない


Slide 21

Slide 21 text

© ZOZO Technologies, Inc. CI/CDの機能
 21 ● どの機能から導入を始めるか?
 ○ ビルド
 ○ 静的解析(Android Lintなど)
 ○ テスト(Local Unit Test、Instrumentation Test)
 ○ デリバリー(開発版の配布、リリース自動化)


Slide 22

Slide 22 text

© ZOZO Technologies, Inc. 導入する機能をどう決めるか?
 22 ● 導入による効果が高いものから導入する


Slide 23

Slide 23 text

© ZOZO Technologies, Inc. 導入する機能をどう決めるか?
 23 ● 導入による効果が高いものから導入する
 ● プロジェクトの状況把握
 ○ チームメンバーからのヒアリング
 ■ 開発・リリースフローの課題
 ○ コードを読む
 ■ テストコードの有無
 ■ Android Lintの結果


Slide 24

Slide 24 text

© ZOZO Technologies, Inc. ZOZOTOWN Androidの状況
 24 ● 開発・リリースフローの課題
 ○ 手動でのビルドとQA-SETチームへの配布が煩雑


Slide 25

Slide 25 text

© ZOZO Technologies, Inc. ZOZOTOWN Androidの状況
 25 ● 開発・リリースフローの課題
 ○ 手動でのビルドとQA-SETチームへの配布が煩雑
 ● テストコードの有無
 ○ テストコード有り
 ■ Local Unit Test: 有り
 ● カバレッジが低く、数も少ない
 ■ Instrumentation Test: 無し


Slide 26

Slide 26 text

© ZOZO Technologies, Inc. ZOZOTOWN Androidの状況
 26 ● 開発・リリースフローの課題
 ○ 手動でのビルドとQA-SETチームへの配布が煩雑
 ● テストコードの有無
 ○ テストコード有り
 ■ Local Unit Test: 有り
 ● カバレッジが低く、数も少ない
 ■ Instrumentation Test: 無し
 ● Android Lintの結果
 ○ 膨大な指摘数、特に対策が行われていない


Slide 27

Slide 27 text

© ZOZO Technologies, Inc. 導入計画
 27 次の順番で導入
 1. アプリのビルドと社内への配布
 2. 静的解析(Android Lint)
 3. テスト(Local Unit Test)
 
 計画に含めず必要になったタイミングで導入
 ● テスト(Instrumentation Test)
 ● デリバリー(リリース自動化)


Slide 28

Slide 28 text

© ZOZO Technologies, Inc. 導入計画の実施
 28

Slide 29

Slide 29 text

© ZOZO Technologies, Inc. 導入計画の実施
 29 ● 決定した計画に沿って実際にCI/CDの機能を導入していく
 ● 導入しただけでは十分な効果が出ない場合がある
 ● チームが効果的にCI/CDのプラクティスを行えるようフォロー


Slide 30

Slide 30 text

© ZOZO Technologies, Inc. 導入計画
 30 1. アプリのビルドと社内への配布
 2. 静的解析(Android Lint)
 3. テスト(Local Unit Test)
 


Slide 31

Slide 31 text

© ZOZO Technologies, Inc. アプリのビルドと社内への配布
 31 ● 既存の開発・リリースフローを確認し置き換える
 ○ APK生成しS3にアップロード
 ○ QA-SETチームがダウンロードして使用
 S3 QA-SETチーム

Slide 32

Slide 32 text

© ZOZO Technologies, Inc. アプリのビルドと社内への配布
 32 ● 既存の開発・リリースフローの確認し置き換える
 ○ Bitrise + DeployGateの構成
 ○ developブランチへのマージで配布
 QA-SETチーム

Slide 33

Slide 33 text

© ZOZO Technologies, Inc. 導入開始後: オールグリーンを保つ
 33 ● ビルドをオールグリーンで保つのはCIの重要なプラクティス
 ● チームの文化として根付かせる
 ○ CIが通ったらマージを言い続ける 
 ○ Require status checks to pass before mergingを有効化するのも良い


Slide 34

Slide 34 text

© ZOZO Technologies, Inc. 導入計画
 34 1. アプリのビルドと社内への配布
 2. 静的解析(Android Lint)
 3. テスト(Local Unit Test)
 


Slide 35

Slide 35 text

© ZOZO Technologies, Inc. 静的解析(Android Lint)
 35 ● コミット単位での実行
 ○ 常に検査する状況を作る
 ● ただ導入しただけではLintの指摘に気づかない問題
 ○ Dangerを導入する
 ■ Dangerの指摘に対応して貰えるようレビューでコメント
 ■ チームの文化として根付かせる


Slide 36

Slide 36 text

© ZOZO Technologies, Inc. 導入計画
 36 1. アプリのビルドと社内への配布
 2. 静的解析(Android Lint)
 3. テスト(Local Unit Test)
 


Slide 37

Slide 37 text

© ZOZO Technologies, Inc. テスト(Local Unit Test)
 37 ● コミット単位での実行
 ● 導入した効果を高めるにはテストコードを増やすことが不可欠
 ○ テストが書きやすい設計・アーキテクチャの整備
 ○ チーム全員で学習する機会を作る
 ■ 設計・アーキテクチャの共有
 ■ Codelab会


Slide 38

Slide 38 text

© ZOZO Technologies, Inc. 設計・アーキテクチャの整備と共有
 38 ● ドキュメント化
 ● チーム内で共有
 ● チーム全員で共通認識を持つ


Slide 39

Slide 39 text

© ZOZO Technologies, Inc. 設計・アーキテクチャの整備と共有
 39 ● Jetpackの標準アーキテクチャ + UseCase層
 ● AAC ViewModel + Coroutine


Slide 40

Slide 40 text

© ZOZO Technologies, Inc. Codelab会
 
 
 40 ● チーム全員でCodelabを実施
 ● 予め決めた担当がナビゲーターとして進める
 ● 今までやってみたCodelabの例
 ○ Using Kotlin Coroutines in your Android App
 ○ Android Room with a View - Kotlin
 ○ Using Dagger in your Android app
 ○ Jetpack Compose Basic


Slide 41

Slide 41 text

© ZOZO Technologies, Inc. 継続的なCI/CD機能のアップデート
 41

Slide 42

Slide 42 text

© ZOZO Technologies, Inc. 必要に応じてCI/CDの機能を追加していく
 42 ● チームの活動や振り返りを通して課題を探す


Slide 43

Slide 43 text

© ZOZO Technologies, Inc. 必要に応じてCI/CDの機能を追加していく
 43 ● チームの活動や振り返りを通して課題を探す
 ● ZOZOTOWN Androidチーム
 ○ スクラムのプラクティスを取り入れた開発フロー
 ■ スプリント
 ■ スプリント計画・レビュー
 ■ レトロスペクティブ(振り返り)
 ○ 週次の振り返りで課題を把握
 ○ CI/CDで解決できることなら機能を追加して対応


Slide 44

Slide 44 text

© ZOZO Technologies, Inc. 機能の追加例
 44

Slide 45

Slide 45 text

© ZOZO Technologies, Inc. 例: デザイン確認の効率化
 45 ● 課題
 ○ 都度APKをGoogleドライブ経由でデザイナーへ配布
 ○ 確認用APKのビルドと配布の効率化
 ● 解決策
 ○ PR単位でのDeployGateによるアプリ配布をCI/CDの機能に追加
 ○ 「GitHub Actionsを用いたDeployGateアプリ配布の自動化」としてスライドにまとめて います


Slide 46

Slide 46 text

© ZOZO Technologies, Inc. 例: Roomの導入
 46 ● 課題
 ○ GreenDAOからRoomへの置き換えを推進
 ○ Local Unit Test非推奨
 ■ https://developer.android.com/training/data-storage/room/testing-db#host-machine
 ○ Local Unit TestとInstrumentation Testの両方で実行したい
 ● 解決策
 ○ Shared Testを導入
 ○ テスト(Instrumentation Test)をCI/CDの機能に追加


Slide 47

Slide 47 text

© ZOZO Technologies, Inc. Shared Test
 47 ● MigrationのテストはInstrumentation Testとして配置
 ● 通常のRoomのテストはShared Testとして配置
 ○ 開発中、コミット単位ではLocal Unit Testを実行
 ○ PRのタイミングでInstrumentation Testを実行


Slide 48

Slide 48 text

© ZOZO Technologies, Inc. Instrumentation Test
 48 ● BitriseのVirtual Device Testingを利用
 ● BitriseとGitHub Actionsの併用
 ○ PR関連のタスクをGitHub Actionsへ移行し検証
 ○ 試行錯誤


Slide 49

Slide 49 text

© ZOZO Technologies, Inc. 例: AAB対応
 49 ● 課題
 ○ AAB対応をする上で既存のリリースフローの変更が必要
 ● 解決策
 ○ リリースフローの洗い出しと再検討
 ○ デリバリー(リリース自動化)をCI/CDの機能に追加
 ■ 公開までの自動化はしない
 ■ Play Consoleへのaabファイルのアップロードまでを自動化


Slide 50

Slide 50 text

© ZOZO Technologies, Inc. まとめ
 50

Slide 51

Slide 51 text

© ZOZO Technologies, Inc. まとめ
 51 ● CI/CDはプロジェクトの状況に合わせて段階的に導入
 ● 導入後CI/CDがチームに根付くようフォロー
 ● 継続的な機能アップデートでより良い環境・チームを作っていきたい


Slide 52

Slide 52 text

No content