Slide 1

Slide 1 text

NEWTにおけるiOS18対応の進め⽅ 2024.9.30 【GO/note/令和トラベル】After iOSDC & DroidKaigi 2024 Rick

Slide 2

Slide 2 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 2
 Rick @ryu1sazae Reiwa Travel, inc iOS Engineer ☕ 🎧 🛩

Slide 3

Slide 3 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 NEWTの開発環境 3
 ● Xcode 15.4, Swift 5.10 → Xcode 16.0 Swift 6.0 ● サポートOS : iOS16~ ● パッケージマネージャー : SPM ● フレームワーク : TCA ● iOSエンジニア : 2名

Slide 4

Slide 4 text

AGENDA
 CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 4
 1. 事業要求‧品質‧最新技術追従のバランスを重視 2. 段階的なSwift6対応で備える 3. iOS18対応のスケジュール 4. まとめ

Slide 5

Slide 5 text

AGENDA
 CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 1. 事業要求‧品質‧最新技術追従のバランスを重視 2. 段階的なSwift6対応で備える 3. iOS18対応のスケジュール 4. まとめ 5


Slide 6

Slide 6 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 ‧‧‧ 急激に成⻑するサービスに対する事業の要求に応える 6
 8‧9⽉だけでも多くの施策をリリース これらを、iOSエンジニア2名で開発する必要があった

Slide 7

Slide 7 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 カスタマーにとっての品質‧安定性 > 魅⼒的な技術 海外旅⾏は多くて年⼀回という⽅がほとんど 貴重な体験を最⼤限素敵なものにしてもらうために、最⾼の品質 をカスタマーに届ける必要があり、それを保証する必要がある 品質保証のために魅⼒的な技術の選択を犠牲にすることもある 7


Slide 8

Slide 8 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 最新の技術に追従するメリット 8
 ● 会社のプロダクト規模で新しい技術を使う楽しさ ● プロダクトとしての表現幅の向上 ● 実装容易性の向上 ● 世で進化する技術とのギャップを埋めることによる負債解消

Slide 9

Slide 9 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 ● 機能開発のスピードはなるべく通常通りを維持したいという事業⽬線での要求 ● iOS18リリース直後でも品質は担保必須 ● 新OS対応時は、QAチームによるテストを⼿厚めに実施するため、このタイミ ングで可能な限りSwift6の対応を進めておきたいというエンジニアの願望 事業要求‧品質‧最新技術追従のバランスが必要 9


Slide 10

Slide 10 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 これらのバランスを獲得するためには、 どのような⼿順‧スケジュールで対応を進めればよいか? 💭 iOS18をサポートするXcode16にて、 Swift6が正式に利⽤可能になった。 幸いSwift6への対応は”段階的”に実施することが可能 🥳 事業要求‧品質‧最新技術追従のバランスを叶えるための⼿段とは? 10


Slide 11

Slide 11 text

AGENDA
 CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 11
 1. 品質と最新技術追従のバランスを重視 2. 段階的なSwift6対応で備える 3. iOS18対応のスケジュール 4. まとめ

Slide 12

Slide 12 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 Swift6対応終わってる⽅〜?󰢨

Slide 13

Slide 13 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 NEWTアプリは‧‧‧?

Slide 14

Slide 14 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 48 / 57 target完了済み 🔥 (9/27時点)

Slide 15

Slide 15 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 段階的なSwift6対応を実施するためのフラグ 15
 enableUpcomingFeature(_:_:) enableExperimentalFeature(_:_:) 利用可能Swift version 5.8~ 5.8~ 用途 次のメジャーバージョンで 導入が決定されている機能を 使用可能 文字通り、実験中の機能を 使用可能 各フラグで有効にできる 機能の確認方法 https://github.com/swiftlang/swift/blob/release/x.y.z/include/swift/Basi c/Features.def Xcode16の登場時になるべく多くのTargetでSwift6モードを使⽤したい → Xcode15.xの利⽤時から、個々のTargetに対して可能な限りSwift6以降の機能を有効化 🔥

Slide 16

Slide 16 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 部分的にSwift6の利⽤開始を遅らせるためのMode指定 16
 swiftLanguageMode(SE-0435) 利用可能Swift version 6.0~ 用途 Target毎にSwiftのversionを指定 e.g. 一度にSwift6への移行が難しいTargetでは過去のversionを指定

Slide 17

Slide 17 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 ● Feature target 画⾯単位のUI‧TCAのReducer サービス内のコンテキスト単位 ● Dependency target(e.g. ApiClient) 副作⽤(e.g. API通信, ログ送信, etc...) ● その他のTarget 共通コンポーネント, モデル, リソース, etc... NEWTのPackage構成(簡易版) 17


Slide 18

Slide 18 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 以下の懸念から、UI‧TCAのReducerを含むFeature TargetはSwift6モードの利⽤を、iOS18対応版リ リース後に遅らせた。 ① UI周りは、新OS‧Xcode登場直後に不具合発⽣が予想されやすく‧対応に時間もかかり得る iOSエンジニア2名で機能開発も並⾏して⾏うために、避けられる⼯数をなるべく避けたい。beta環境で の開発だと尚更。 ② TCAへの依存から⽣じるコストの最⼩化 2024/09前半時点では、Concurrency周りのwarningやerror対応、今後の⽅針に対するdiscussionが活 発に⾏われていた。この状況下でStrictConcurrencyの対応を完了させるよりも、それらが落ち着いたタ イミング、または予定されているTCA v2.0の⽅針がもう少し固まってからの⽅が、ライブラリに依存す るコストを最⼩化できると判断。 Feature targetに対するSwift6利⽤を戦略的に遅らせる 18


Slide 19

Slide 19 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 以下の懸念から、UI‧TCAのReducerを含むTargetはSwift6モードの利⽤を、iOS18対応版リリース後に 遅らせた。 ① UI周りは、新OS‧Xcode登場直後直後に不具合発⽣が予想されやすく‧対応に時間もかかり得る iOSエンジニア2名で機能開発も並⾏して⾏うために、避けられる⼯数をなるべく避けたかった(beta環 境での開発だと尚更) ② TCAへの依存から⽣じる得るリスク / コストの最⼩化 2024/09前半時点では、Concurrency周りのwarningやerror対応、今後の⽅針に対するdiscussionが活 発に⾏われていた。この状況下でStrictConcurrencyの対応を完了させるよりも、それらが落ち着いたタ イミング、または予定されているTCA v2.0の⽅針がもう少し固まってからの⽅が、ライブラリに依存す ることで発⽣し得るリスク / コストを最⼩化できると判断。 Feature targetに対するSwift6利⽤を戦略的に遅らせる 19


Slide 20

Slide 20 text

AGENDA
 CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 20
 1. 事業要求‧品質‧最新技術追従のバランスを重視 2. 段階的なSwift6対応で備える 3. iOS18対応のスケジュール 4. まとめ

Slide 21

Slide 21 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 Xcode16 betaでもスムーズにSwift6モードを有効化完了 21
 Flagを使って事前に 備えていたため、 余裕を持って対応完了 🥳

Slide 22

Slide 22 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 簡易版QAでリリース直前のリスクを軽減 22
 簡易版QAで備えていた ため、Xcode RCでのQAも 不具合なく完了 🥳 9/10のApple Event直後に 正式リリースだと予測し、前 もって簡易版QAを実施

Slide 23

Slide 23 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 品質と最新技術追従の両⽴に成功 23
 遅らせていたFeature target のSwift6対応も完了 🥳

Slide 24

Slide 24 text

AGENDA
 CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 24
 1. 事業要求‧品質‧最新技術追従のバランスを重視 2. 段階的なSwift6対応で備える 3. iOS18対応のスケジュール 4. まとめ

Slide 25

Slide 25 text

CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 Appleが提供してくれた仕組みを活⽤し、事業要求‧品質‧最新技術追従を全て叶える 25
 ● 段階的にSwift6対応を⾏うことで、事業要求‧品質とのトレード オフ関係を断ち切る ● ⾃⼰解決の難易度が⾼いUI‧ライブラリ依存箇所はリスクヘッジ を図りながら進める ● 品質を向上させながら、事業に貢献するために、技術を活⽤する

Slide 26

Slide 26 text

Thank you!
 CONFIDENTIAL
 © 2023 Reiwa Travel, Inc.
 26