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
680
Safie Viewer for iOS の 技術的負債との付き合い方
Safie
June 06, 2024
Tweet
Share
More Decks by Safie
See All by Safie
2024年技育祭【秋】セーフィー登壇資料
safie
0
690
MLP Can Be A Good Transformer Learner
safie
1
1.6k
Developers Boost2023_Safie
safie
0
380
AWS Summit Tokyo 2023
safie
0
2.6k
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
AndroidXR 開発ツールごとの できることできないこと
donabe3
0
110
バックエンドエンジニアのためのフロントエンド入門 #devsumiC
panda_program
16
6.5k
インフラをつくるとはどういうことなのか、 あるいはPlatform Engineeringについて
nwiizo
5
2.1k
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
730
5分で紹介する生成AIエージェントとAmazon Bedrock Agents / 5-minutes introduction to generative AI agents and Amazon Bedrock Agents
hideakiaoyagi
0
220
アジャイル開発とスクラム
araihara
0
160
君も受託系GISエンジニアにならないか
sudataka
1
370
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
1
1.3k
データの品質が低いと何が困るのか
kzykmyzw
6
1k
FastConnect の冗長性
ocise
1
9.6k
スクラムのイテレーションを導入してチームの雰囲気がより良くなった話
eccyun
0
110
現場で役立つAPIデザイン
nagix
29
10k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Docker and Python
trallard
44
3.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
29
2.2k
Side Projects
sachag
452
42k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Designing Experiences People Love
moore
139
23k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
540
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
セーフィーは日本中、世界中のカメラの映像をクラウド化し 自分のため、社会のために誰もが活用できる映像プラットフォームを提供します。