Slide 1

Slide 1 text

ɹɹ ©︎ hey, Inc SwiftUI で STORES 予約 を フルリニューアルした話 ヘイ株式会社 テクノロジー部門 モバイルアプリケーション本部 予約グループ モバイルエンジニア 吉田 圭佑 | @y0shikei

Slide 2

Slide 2 text

自己紹介 1 ɹɹ 吉田 圭佑 | @y0shikei Keisuke Yoshida ヘイ株式会社 (2021.08 ~) STORES 予約 モバイルエンジニア

Slide 3

Slide 3 text

ɹɹ 1. STORES 予約 とは? 2. リニューアルアプリについて 3. SwiftUIを利用してみて Agenda 2

Slide 4

Slide 4 text

STORES 予約 とは? 1 ❶ サービス概要 ❷ アプリについて 3

Slide 5

Slide 5 text

1. STORES 予約とは? ❶ サービス概要 4

Slide 6

Slide 6 text

5 ɹɹ 予約の「めんどう」を 
 解決する ガイドに沿って設定するだけで、 
 あっという間に専用の予約サイトを作成。 1. STORES 予約とは? ❶ サービス概要

Slide 7

Slide 7 text

6 ɹɹ フリーミアム SaaS としての月額利用料 予約決済手数料 (オンライン決済導入時) オーナーさま向け 予約者さま向け 1. STORES 予約とは? ❶ サービス概要

Slide 8

Slide 8 text

❷ アプリについて 1. STORES 予約とは? 7

Slide 9

Slide 9 text

8 ɹɹ それぞれ iOS / Android のアプリが存在 (計4つ) 1. STORES 予約とは? ❷ アプリについて オーナーさま向け 予約者さま向け

Slide 10

Slide 10 text

9 ɹɹ オーナーさま向けのiOSアプリをリニューアル🎉 1. STORES 予約とは? ❷ アプリについて

Slide 11

Slide 11 text

リニューアルアプリについて 2 ❶ SwiftUIを採用した経緯 ❷ 技術スタック 10

Slide 12

Slide 12 text

❶ SwiftUIを採用した経緯 2. リニューアルアプリについて 11

Slide 13

Slide 13 text

❶ SwiftUIを採用した経緯 12 2. リニューアルアプリについて ɹɹ 🛠 リソースが限られた中での開発 モバイルエンジニアが自分1人のみ → 宣言的UIフレームワークを使い開発スピードを上げたい Flutterという選択肢 → 他サービスのアプリとの今後の親和性を考えて不採用 🧑💻

Slide 14

Slide 14 text

❶ SwiftUIを採用した経緯 13 2. リニューアルアプリについて ɹɹ 🎬 新しい技術にトライできるタイミング 📝 OSの普及率 → サポートバージョンがiOS14~でよかった アプリの要件 → 比較的シンプルな構造で特殊な機能が必要なかった フルスクラッチ → デザインから作り直すのでUI周りの制約がなかった 📱 🐣

Slide 15

Slide 15 text

❷ 技術スタック 2. リニューアルアプリについて 14

Slide 16

Slide 16 text

❷ 技術スタック 15 2. リニューアルアプリについて ɹɹ アーキテクチャ:MVVM → アプリ規模も大きくないのでシンプルに フレームワーク:SwiftUI + Combine → 前述した通り APIクライアント:REST API → 既存のAPIを活用するため パッケージ管理:Swift Package Manager → Firebaseの対応もありSwiftPMのみで完結 🏛 ⚙ 📦

Slide 17

Slide 17 text

SwiftUIを利用してみて 3 ❶ 強みと弱み ❷ 具体的な事例 16

Slide 18

Slide 18 text

❶ 強みと弱み 3. SwiftUIを利用してみて 17

Slide 19

Slide 19 text

❶ 強みと弱み 18 3. SwiftUIを利用してみて ɹɹ SwiftUIの強み コンポーネント単位でUIを使いまわしできる → レイアウトが似ている画面を素早く作れる コードの記述がシンプル → 宣言的にレイアウトを組めるためUIKitよりコード量が減る UIの変更に強くレビューしやすい → コンポーネントの集合なので変更しやすい&読みやすい ♻ 👍 🎨

Slide 20

Slide 20 text

❶ 強みと弱み 19 3. SwiftUIを利用してみて ɹɹ OS間で実装を分けないといけないことがある → iOS14/15両方で動作を担保するのが大変&めんどう ベストプラクティスが少ない&挙動が安定していない → 色々と手探りで実装していく必要がある(気合い) UIKitでできたことがすべてできるわけではない → まだUIKitに頼らざるを得ないときがある 📚 🤷 ⚠ SwiftUIの弱み

Slide 21

Slide 21 text

❷ 具体的な事例 3. SwiftUIを利用してみて 20

Slide 22

Slide 22 text

❷ 具体的な事例 21 3. SwiftUIを利用してみて ɹɹ ⭕ 構造が似ているUIの流用 ReservationTabView ScheduleTabView ReservationTileView ScheduleTileView ReservationView ScheduleView コードベースなので ・流用が容易 ・変更コストが低い 開発効率UP

Slide 23

Slide 23 text

❷ 具体的な事例 22 3. SwiftUIを利用してみて ɹɹ ⭕ List (TableView) をシンプルなコードで実現 UIKit SwiftUI サンプルコード サンプルコード SwiftUIの方が コード量が少ない 開発効率UP

Slide 24

Slide 24 text

❷ 具体的な事例 23 3. SwiftUIを利用してみて ɹɹ ❌ Listのseparatorを消す サンプルコード iOS15 iOS14 iOS13 ただListのseparatorを 消したいだけなのに… それぞれのOSごとに 分岐させる必要がある ※iOS14に関しては  半ば無理やり消している...汗

Slide 25

Slide 25 text

❷ 具体的な事例 24 3. SwiftUIを利用してみて ɹɹ ❌ 複雑な動きをSwiftUIのみで実現しにくい UIKitの部分 サンプルコード PullToRefresh →下スワイプで予約情報の更新 SwipeReader →左右スワイプでセグメント切替 ActivityIndicator →予約情報の読み込みをお知らせ

Slide 26

Slide 26 text

25 ɹɹ まとめ https://hello.hey.jp/engineer 採用情報 STORES 予約 を SwiftUIでリニューアルしてみて... 当初の狙い通り開発スピードを担保できた → 約3ヶ月でリニューアル&リリースできた! コードがシンプルになる → UIの流用や変更に強く、読みやすいためレビューしやすい かゆいところに手が届いていない → OSごとの対応やUIKitの併用がまだ必要 🚀 ☀ ☔

Slide 27

Slide 27 text

No content