Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「JapanTaxi」iOS アプリを継続的かつ安定してリリースするための取り組み

63bf22db8ab8da3851da34d2e0cb0c69?s=47 Yosuke Imairi
January 27, 2020

「JapanTaxi」iOS アプリを継続的かつ安定してリリースするための取り組み

How to release JapanTaxi iOS app stably and continuously ? Introduced our team development.

References:
- Unit Test for RIBs architecture
https://blog.japantaxi.co.jp/2019/12/25/6656
-> https://web.archive.org/web/20200330025325/https://blog.japantaxi.co.jp/2019/12/25/6656
- Bitrise workflow for code freeze operation
https://blog.japantaxi.co.jp/2019/12/18/6190

63bf22db8ab8da3851da34d2e0cb0c69?s=128

Yosuke Imairi

January 27, 2020
Tweet

More Decks by Yosuke Imairi

Other Decks in Technology

Transcript

  1. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 「JapanTaxi」iOS

    アプリを 継続的かつ安定してリリースするための取り組み
  2. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⾃⼰紹介

    2 Yosuke Imairi • JapanTaxi (2017.5 -) • iOS app Developer
  3. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 3

    「JapanTaxi」アプリの開発体制 & iOS ユニットの複数⼈開発における取り組み
  4. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 「JapanTaxi」アプリを⽀えるチーム/ユニット

    4 Server iOS Android ユニット
  5. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 「JapanTaxi」アプリを⽀えるチーム/ユニット

    5 Server iOS Android チーム
  6. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 「JapanTaxi」アプリを⽀えるチーム/ユニット

    6 Server iOS Android PM
  7. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved LeSS

    (Large-Scale Scrum) 7
  8. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 「JapanTaxi」アプリを⽀えるチーム/ユニット

    8 Server iOS Android PM プロジェクト A プロジェクト B
  9. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 9

    iOS ユニットとして 安定してアプリを継続的にリリースするにはどうすればよいか
  10. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 安定して継続的なリリースを⾏うために

    10 - 1.コードの品質を保つ - アーキテクチャやコーディング規約に沿った設計や実装 - バグが⽣まれにくいようにする - 提供したい機能の開発が遅れることを防ぐ - 2.効率よく複数⼈開発する - 迅速なコードレビューの意識付け - 共通作業の⾃動化 - 3.リリースサイクルの明確化
  11. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 1.コードの品質を保つ

    11
  12. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved SwiftLint

    12 - 基本的に //swiftlint:disable は禁⽌ - 乱⽤すると SwiftLint を導⼊した意味がなくなるから - すべてのルールを有効後、無効にすべきルールを絞る - 無効にしたルールは理由を記述する
  13. - 既存のビジネスロジックが壊れないようにするための担保 - なるべく実装時に書くように⼼がける(仕様を忘れないように) - 複数⼈開発では、誰がどの機能を修正するか分からない - QA での⼿戻りを少なくするため -

    QA チームの負担を軽減 - バグ修正の時間を減らして、本来の開発に集中する Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Unit Test 13
  14. - Unit Test のテンプレート(Quick/Nimble, Mockの定義) - モックの⾃動⽣成 - Unit Test

    を書ける状態を保つ(DI etc..) - ⽇頃の開発時に⼼がける必要あり Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Unit Test を書くにあたっての⼼理的障壁を下げる 14
  15. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 15

    https://blog.japantaxi.co.jp/2019/12/25/6656 JapanTaxi iOS UnitTest
  16. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 2.効率よく複数⼈開発する

    16 (コードレビュー)
  17. - コードの品質を保つためにコードレビューを⽇々⾏っている - コードに対するコミュニケーションの場 - コードの誤りの指摘以外にも、気になったことは気軽にコメント Proprietary and Confidential ©2017

    JapanTaxi, Inc. All Rights Reserved コードレビュー 17
  18. - 対応したこと - 対応していないこと - 対応すべき範疇を超えているもの - 別の Pull Request

    で対応するもの - スクリーンショットなどで修正差分を提⽰ - 微妙な実装になったところ、懸念点 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Pull Request の Description 18 レビュアーとの円滑なコミュニケーションを図る
  19. - ( ´-`).。oO (みんな忙しくてレビューしてくれない…) - Pull Request を⻑時間放置することは危険 - マージ先とのコンフリクト解消コスト

    - 何を修正したか⾃分が忘れる - 途中でレビュアーが交代 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Pull Request が溜まりがち問題 19
  20. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Pull

    Request が溜まりがち問題 20 Pull Panda ͷ׆༻ͯ͠ίʔυϨϏϡʔ΁ͷҙࣝ෇͚
  21. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Pull

    Assigner 21 - Pull Assigner でレビュアーの⾃動アサイン - レビューの負担を均⼀化 - レビュアーは 1 ⼈を選定し明確化する
  22. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Pull

    Analytics 22 - 24時間以内にレビューがされたかどうかの確認 - iOS ユニットの定例 MTG で毎週確認(⽬標: 90% )
  23. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved Pull

    Reminder 23 - 朝とお昼に Slack のチャンネルにリマインドを投稿 - 送りすぎると耐性がつくので注意
  24. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⾃動レビュー

    24 - 機械的にレビューできることは Bot で(レビュアーの負担軽減) - SwiftLint の警告をコメント - 使われていない定義を指摘 - Ruby スクリプトで未使⽤のメソッドやプロパティやクラスを 精査し、Danger を利⽤してコメント
  25. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 2.効率よく複数⼈開発する

    25 (⾃動化)
  26. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 共通の作業を⾃動化

    26 - ユニットメンバの共通作業を make コマンドで統⼀ - 環境構築 - ライブラリの導⼊ - テンプレートの導⼊ - モック⽣成 - GraphQL の schema 更新や API.swift の⽣成 - Bitrise のワークフローを作成し、様々な作業を⾃動化 誰でも安⼼して同じ作業が⾏える仕組みの構築 CIの活⽤で開発作業時間を確保
  27. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved リリースまわりの作業を⾃動化

    27 - Slack から TestFlight へのアップロード - DEV, STG, PROD /japantaxi-passenger-ios b:release/4.4.15|w:testflight - Slack から コードフリーズ作業 - リリースブランチ作成 - バージョン更新 - Branch protection rules 追加 - Beta で配信 /japantaxi-passenger-ios b:master|w:code-freeze|ENV[RELEASE_APP_VERSIION]:4.4.16
  28. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 28

    https://blog.japantaxi.co.jp/2019/12/18/6190 JapanTaxi iOS Bitrise
  29. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 3.リリースサイクルの明確化

    29
  30. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved リリースサイクル

    30 - 開発したものは素早くユーザに届けたい - 安⼼してリリースしたい - 無理なくリリースできるサイクル - 曜⽇を固定化すると他部署と調整がしやすい - 予定された⽇に間に合わなかった場合は次のリリースに持ち越し
  31. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 毎週⾦曜⽇にコードフリーズ

    (※) 31 (※) QAに提出するバイナリの作成 コードフリーズ
  32. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved コードフリーズの翌週にQA

    32 コードフリーズ QA
  33. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 毎週⾦曜⽇に審査提出

    33 コードフリーズ QA 審査提出
  34. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 毎週⽔曜⽇にリリース

    34 コードフリーズ QA 審査提出 リリース
  35. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 毎週⽔曜⽇にリリース

    35
  36. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved このような取り組みの結果…

    36
  37. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 安定して継続的なリリース

    37 - バグ修正や機能改善、新機能などを毎週リリース - 2019 年は合計 41 回リリース - バグによる Hotfix は 2 回 - 複数チームでプロジェクトを進める - 数ヶ⽉かかる⼤規模な開発と並⾏して、細かな改 善も継続的に⾏えた - リリースサイクルの明確化
  38. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 2020年もがんばります

    38
  39. จষɾը૾౳ͷ಺༰ͷແஅసࡌٴͼෳ੡౳ͷߦҝ͸͝ԕྀ͍ͩ͘͞ɻ Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved

    ˟102-0094ɹ౦ژ౎ઍ୅ా۠لඌҪொ3-12 3-12 Kioicho Chiyoda-ku, Tokyo 102-0094 Japan TEL 03-6265-6265ɹFAX 03-3239-8115 www.japantaxi.co.jp