Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Safie Viewer for iOS の 技術的負債との付き合い方
Search
Safie
June 06, 2024
Technology
0
640
Safie Viewer for iOS の 技術的負債との付き合い方
Safie
June 06, 2024
Tweet
Share
More Decks by Safie
See All by Safie
2024年技育祭【秋】セーフィー登壇資料
safie
0
660
MLP Can Be A Good Transformer Learner
safie
1
1.6k
Developers Boost2023_Safie
safie
0
370
AWS Summit Tokyo 2023
safie
0
2.5k
AWS IoT@Loft#9
safie
0
2.6k
ng-japan2019_Safie Sponsored LT Session
safie
0
410
Other Decks in Technology
See All in Technology
Goで実践するBFP
hiroyaterui
1
120
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
12k
GoogleのAIエージェント論 Authors: Julia Wiesinger, Patrick Marlow and Vladimir Vuskovic
customercloud
PRO
0
160
東京Ruby会議12 Ruby と Rust と私 / Tokyo RubyKaigi 12 Ruby, Rust and me
eagletmt
3
870
生成AIのビジネス活用
seosoft
0
110
今年一年で頑張ること / What I will do my best this year
pauli
1
220
FODにおけるホーム画面編成のレコメンド
watarukudo
PRO
2
280
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
370
カップ麺の待ち時間(3分)でわかるPartyRockアップデート
ryutakondo
0
140
2025年のARグラスの潮流
kotauchisunsun
0
790
【JAWS-UG大阪 reInvent reCap LT大会 サンバが始まったら強制終了】“1分”で初めてのソロ参戦reInventを数字で振り返りながら反省する
ttelltte
0
140
ABWGのRe:Cap!
hm5ug
1
120
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
460
33k
We Have a Design System, Now What?
morganepeng
51
7.3k
Statistics for Hackers
jakevdp
797
220k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Adopting Sorbet at Scale
ufuk
74
9.2k
Facilitating Awesome Meetings
lara
51
6.2k
The Language of Interfaces
destraynor
155
24k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Making the Leap to Tech Lead
cromwellryan
133
9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
Documentation Writing (for coders)
carmenintech
67
4.5k
Transcript
May 23, 2024 TechBrew in 東京 ~モバイルアプリの技術的負債に向き合う~ Safie Viewer for
iOS の 技術的負債との付き合い方
© Safie Inc.| 本日の発表について • iOS アプリに関する内容です • 直近 1
年ほどの話がメインとなります • こんなことを考えている、実施しているといった紹介になります • 技術面での深掘りはしません 2
© Safie Inc.| 各種紹介 3
© Safie Inc.| 自己紹介 鞆 翔太郎 (とも しょうたろう) • 2023
年 3 月 セーフィー入社 • iOS テックリード • 〜前職までモバイル開発メイン • 最近は WebRTC と戦っています 4 @hugehoge @hugehoge
© Safie Inc.| 会社紹介 セーフィー株式会社 (Safie Inc.) • 事業内容 ◦
クラウド録画型映像プラットフォーム「Safie」の開発・運営および関連 サービスの提供 • 創立年月 ◦ 2014 年 10 月 23 日 • 所在地 ◦ 東京都品川区西品川一丁目1-1 住友不動産大崎ガーデンタワー 5
© Safie Inc.| Safie のサービス/プロダクト紹介 6
© Safie Inc.| Safie のサービス/プロダクト紹介 7
© Safie Inc.| Safie Viewer for iOS の紹介 Safie Viewer
for iOS • DAU 25,000前後 • ストア評価 4.2 • iOS 15.0+ ◦ 直近の 3 バージョンサポート • 日本語/英語/タイ語/ベトナム語 対応 8
© Safie Inc.| Safie Viewer for iOS の歴史/開発体制 • 2015
年 4 月にストア公開 • 直近のメジャーアップデートは 2023 年 4 月の ver4.0.0 ◦ 動画再生画面のリニューアルがメイン • 現在の開発体制 ◦ 2 週間のスプリント期間 ◦ 月に 1 回の頻度で定期リリース ◦ iOS 開発チームとしては直接開発に携わるエンジニアが 3 〜 4 名 ▪ 最古参でも 2.5 年ほど 9
© Safie Inc.| 技術的負債解消への取り組み 10
© Safie Inc.| 技術的負債解消への取り組み • Safie Viewer for iOS は辛いところが多い
◦ 10 年近 続いているアプリ × メンバーの社歴が短い ◦ 開発者の入れ替わり等も激しい時期があった • 特に問題に感じるところ ◦ ソースコードの可読性 ◦ 採用技術のレガシー化 ◦ アーキテクチャの薄さ • 技術的負債が溜まっている状態ではある 11
© Safie Inc.| 技術的負債解消への取り組み 最終的にはリアーキテクチャ等で抜本的に改善したい! 12
© Safie Inc.| 技術的負債解消への取り組み • 一方、現状が致命的かと言われるとそうでもない ◦ 具体的に大きな問題として顕在化していない ◦ 開発速度が落ちている部分はあるが、全社的なスケジュールに影響はない
◦ 許容できる範囲 • 直近 1 年においても比較的活発にリリースはできている 13
© Safie Inc.| 直近 1 年での機能リリース • 動画再生画面のリニューアル • ストアレビュー依頼ダイアログの表示
• 英語タイ語ベトナム語対応 • 動画再生画面のチュートリアル • iPad の縦画面対応 • ハイブリッドプラン対応 (新しい WebRTC での接続方式) • PTZ 操作画面の改善 • マップビューアー • 半天球カメラの 3D デワープ対応 • バックエンドのシステム改修への追従 etc... 14
© Safie Inc.| 技術的負債解消への取り組み 「◯ヶ月開発を止めてリファクタリングに専念させて ださい」 15
© Safie Inc.| 技術的負債解消への取り組み 「◯ヶ月開発を止めてリファクタリングに専念させて ださい」 とまでは言わな ても良さそう 16
© Safie Inc.| 技術的負債解消への取り組み ではどうするか? • す にできる漸進的な改善 • 腰を据えての大規模リファクタリング/リアーキテクチャの検討
に分 て考える 17
© Safie Inc.| 技術的負債解消への取り組み • す にできる漸進的な改善 ◦ 技術的負債の増加を抑える ◦
機能開発と並行して実施する • 腰を据えての大規模リファクタリング/リアーキテクチャの検討 ◦ 技術的負債の大幅な返済を狙う ◦ 短期間での実施は難しい ◦ 最適解、ゴールについても不透明な部分がある ◦ ひとまずは具体的に「検討」 18
© Safie Inc.| すぐにできる漸進的な改善 19
© Safie Inc.| Xcode / iOS SDK の早期アップデート • 毎年
9 月に Xcode のメジャーアップデート • AppStore の制限によって、翌年 4 月までのアップデート対応が必須 • Safie Viewer for iOS では... ◦ Xcode 13 → 14 ▪ 2023 年 4 月に対応版アプリをリリース ▪ リリースまで約 7 ヶ月 ◦ Xcode 14 → 15 ▪ 2023 年 11 月に対応版アプリをリリース ▪ リリースまで約 2 ヶ月 20
© Safie Inc.| Xcode / iOS SDK の早期アップデート • なぜ早期にアップデートしたいのか
◦ Swift バージョン更新、新 API の登場で従来のコードが古 なる • 具体例 ◦ ViewBuilder.buildBlock(_:) ▪ Swift UI での子 View を並べる処理 ▪ Xcode 15.0 (Swift 5.9) にて 10 個までしか並べられない制限が消えた ◦ if 式/switch 式 ▪ Swift 5.9 にて if/switch を式として扱えるようになった ▪ 条件に応じて初期値が変わる場合の変数宣言がよりリーダブルに 21
© Safie Inc.| Xcode / iOS SDK の早期アップデート 22 新
Xcode 旧 Xcode 9月 4月 新 Xcode 旧 Xcode 約半年
© Safie Inc.| Danger による自動レビュー • Safie Viewer for iOS
のソースコードは可読性が低い ◦ 規律のないコードスタイル ◦ 1 行に際限な 詰め込まれる文字 ◦ 放置されるデッドコード ◦ etc... • SwiftLint を導入しているが、あまり効果的ではなかった ◦ ローカルでの Warning 表示 ◦ 開発者が気づかない場合、そのままメインブランチに取り込まれてしまう 23
© Safie Inc.| Danger による自動レビュー • Danger の導入 ◦ CI
プロセスへの組み込みを想定 されたタスクランナー ◦ GitHub と連携可能 • Danger による自動レビュー ◦ danger-swiftlint プラグインを利用 ◦ SwiftLint の Warning をインラ インでコメント 24 https://danger.systems/ruby/
© Safie Inc.| Danger による自動レビュー 25
© Safie Inc.| 大規模リファクタリング/ リアーキテクチャの検討 27
© Safie Inc.| 大規模リファクタリング/リアーキテクチャの検討 • 現在の Safie Viewer for iOS
の作りは MVC / MVP ◦ 古 から存在する画面では ViewController + Model ◦ 1 年ほど前に ViewModel を導入 ▪ 実態としては Presenter に近い ▪ ViewModel の変更に対して View を更新する処理を手続き的に記述している • 非同期処理に関してもクロージャベースでの実装 ◦ ネストが深 、実行スレッドの制御に難あり ◦ completion handler の呼び出し漏れ等も発生 • レイアウトは UIKit ベース 28
© Safie Inc.| 大規模リファクタリング/リアーキテクチャの検討 • この状態から大規模なリファクタリング/リアーキテクチャを実施する のはリスキー ◦ 対象となるコードベースの量 ◦
そもそもどういったアーキテクチャを選定すべきか ◦ チームの新アーキテクチャの習熟 • 新規の機能開発に合わせてこれらを進めてい ◦ 機能開発タイミングでリアーキテクチャで利用できそうな要素技術を採 用、評価してい ◦ チームとしての習熟度を高める 29
© Safie Inc.| 言語設定画面の作成 • 簡単な画面だが最低限の要素が 詰まっている ◦ リスト表示 ◦
API を利用してのデータ取得と 更新 ◦ エラーハンドリング • 新しい技術を採用してもリスク が少な 評価もしやすい 30
© Safie Inc.| 言語設定画面の作成 • 既存の UIKit ベースのナビゲーションは維持 • 以下の要素技術を採用、検証
◦ Swift UI による画面レイアウト ◦ リアクティブな処理が可能な ViewModel ◦ API 呼び出しについて Swift Concurrency 化 31
© Safie Inc.| 言語設定画面の作成 32
© Safie Inc.| 大規模リファクタリング/リアーキテクチャの検討 • まずは手札を揃える • 具体的なスケジュールも検討する必要はある • ゲームチェンジャーとなりそうな要素技術
◦ Observation ▪ iOS 17.0+ ▪ 直近 3 バージョンサポートとすると、 iOS 19 リリースで本格的に利用できる ◦ Typed throws ▪ Swift 6.0 ? • 来年あたりが勝負となりそう 33
© Safie Inc.| まとめ • す にできる漸進的な改善 • 腰を据えての大規模リファクタリング/リアーキテクチャの検討 の
2 パターンで技術的負債の解消に向 て動いてます! 34
セーフィーは日本中、世界中のカメラの映像をクラウド化し 自分のため、社会のために誰もが活用できる映像プラットフォームを提供します。