Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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