$30 off During Our Annual Pro Sale. View Details »

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

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

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