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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Yosuke Imairi 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

Avatar for Yosuke Imairi

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 9

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

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

    12 - 基本的に //swiftlint:disable は禁⽌ - 乱⽤すると SwiftLint を導⼊した意味がなくなるから - すべてのルールを有効後、無効にすべきルールを絞る - 無効にしたルールは理由を記述する
  7. - Unit Test のテンプレート(Quick/Nimble, Mockの定義) - モックの⾃動⽣成 - Unit Test

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

    https://blog.japantaxi.co.jp/2019/12/25/6656 JapanTaxi iOS UnitTest
  9. - 対応したこと - 対応していないこと - 対応すべき範疇を超えているもの - 別の Pull Request

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

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

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

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

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

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

    24 - 機械的にレビューできることは Bot で(レビュアーの負担軽減) - SwiftLint の警告をコメント - 使われていない定義を指摘 - Ruby スクリプトで未使⽤のメソッドやプロパティやクラスを 精査し、Danger を利⽤してコメント
  16. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 共通の作業を⾃動化

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

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

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

    (※) 31 (※) QAに提出するバイナリの作成 コードフリーズ
  21. Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 安定して継続的なリリース

    37 - バグ修正や機能改善、新機能などを毎週リリース - 2019 年は合計 41 回リリース - バグによる Hotfix は 2 回 - 複数チームでプロジェクトを進める - 数ヶ⽉かかる⼤規模な開発と並⾏して、細かな改 善も継続的に⾏えた - リリースサイクルの明確化
  22. จষɾը૾౳ͷ಺༰ͷແஅసࡌٴͼෳ੡౳ͷߦҝ͸͝ԕྀ͍ͩ͘͞ɻ 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