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
1.1k
Safie Viewer for iOS の 技術的負債との付き合い方
Safie
June 06, 2024
Tweet
Share
More Decks by Safie
See All by Safie
2024年技育祭【秋】セーフィー登壇資料
safie
0
960
MLP Can Be A Good Transformer Learner
safie
1
1.6k
Developers Boost2023_Safie
safie
0
580
AWS Summit Tokyo 2023
safie
0
2.9k
AWS IoT@Loft#9
safie
0
2.8k
ng-japan2019_Safie Sponsored LT Session
safie
0
430
Other Decks in Technology
See All in Technology
【Oracle Cloud ウェビナー】クラウド導入に「専用クラウド」という選択肢、Oracle AlloyとOCI Dedicated Region とは
oracle4engineer
PRO
3
130
Escaping_the_Kraken_-_October_2025.pdf
mdalmijn
0
160
新規事業におけるGORM+SQLx併用アーキテクチャ
hacomono
PRO
0
130
英語は話せません!それでも海外チームと信頼関係を作るため、対話を重ねた2ヶ月間のまなび
niioka_97
0
130
後進育成のしくじり〜任せるスキルとリーダーシップの両立〜
matsu0228
7
3.2k
空間を設計する力を考える / 20251004 Naoki Takahashi
shift_evolve
PRO
4
460
M5製品で作るポン置きセルラー対応カメラ
sayacom
0
170
Shirankedo NOCで見えてきたeduroam/OpenRoaming運用ノウハウと課題 - BAKUCHIKU BANBAN #2
marokiki
0
180
「使い方教えて」「事例教えて」じゃもう遅い! Microsoft 365 Copilot を触り倒そう!
taichinakamura
0
330
AWS Control Tower に学ぶ! IAM Identity Center 権限設計の第一歩 / IAM Identity Center with Control Tower
y___u
0
100
Geospatialの世界最前線を探る [2025年版]
dayjournal
1
200
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
3
5.5k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
11
900
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
How to train your dragon (web standard)
notwaldorf
96
6.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Building Applications with DynamoDB
mza
96
6.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
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
セーフィーは日本中、世界中のカメラの映像をクラウド化し 自分のため、社会のために誰もが活用できる映像プラットフォームを提供します。