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
セーフィー
June 06, 2024
Technology
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Safie Viewer for iOS の 技術的負債との付き合い方
セーフィー
June 06, 2024
More Decks by セーフィー
See All by セーフィー
AI時代のMoatとは。 AI×独自データ×共創圏による拡張戦略
safie
0
4.1k
2024年技育祭【秋】セーフィー登壇資料
safie
0
1.1k
MLP Can Be A Good Transformer Learner
safie
1
1.7k
Developers Boost2023_Safie
safie
0
740
AWS Summit Tokyo 2023
safie
0
3.1k
AWS IoT@Loft#9
safie
0
2.9k
ng-japan2019_Safie Sponsored LT Session
safie
0
440
Other Decks in Technology
See All in Technology
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
330
やさしいA2A入門
minorun365
PRO
10
1.5k
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
110
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
340
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
240
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
330
脆弱性対応、どこで線を引くか
rymiyamoto
0
270
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
610
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
290
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.4k
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
Designing Experiences People Love
moore
143
24k
Navigating Weather and Climate Data
rabernat
0
220
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Automating Front-end Workflow
addyosmani
1370
210k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Ethics towards AI in product and experience design
skipperchong
2
310
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
セーフィーは日本中、世界中のカメラの映像をクラウド化し 自分のため、社会のために誰もが活用できる映像プラットフォームを提供します。