- 概要
- セッションメモ
- 最後に
概要
After Party iOSDC Japan 2021 に参加したので、セッションのメモなどを残しておく。
セッションメモ
チームでSwiftUIを書くために 〜読みやすく保守しやすいSwiftUIの設計について考えたこと〜
- https://speakerdeck.com/natmark/after-party-iosdc-japan-2021-swiftui
- 買い物機能はKaimono muduleで開発している
- やっぱマルチモジュール
- 買い物機能はSwiftUI
- VIPERアーキテクチャ
- 買い物機能の記事があるので読むと良さそう
- https://techlife.cookpad.com/entry/2021/01/18/kaimono-swift-ui
- 買い物機能がクックパッドアプリの最大のモジュールになっているそう
課題
- iOS13対応が疲弊する
- iOS13だけ挙動が違う
- パフォーマンスが犠牲になっているめんがある
- 柔軟性が高いためUIの組み方が人によって変わる
- コンポーネント分割の粒度も人それぞれ
今後もSwiftUIを使うか
- 使いたいと思っている
- Try & Errorがしやすいと感じている
保守しやすい設計を考える
- サービス特性を考える
- ScrollViewに詰め込んでいる
- 複雑多様な状態
- 画面が縦に長くなりやすい
- 状態が多いと分岐も多くなり、読みにくい
統一した書き方でレイアウトを設計する
- RootViewのbodyに書くべきものを決める
- 規約を決めたい
- 画面をSectionとして意味ある単位に分割
- さらにSection内で分割する
- デザイナーと相談して決める
- コンポーネントはAtomicデザインの考え方を適用
- OrganismをSectionとして考えている
- Atomicレベルのコンポーネント化はしていない
複雑多様な条件について対処する
- deliveryStatusという状態でViewのだしわけを制御する
- コード上の見通しはよくなった
- Sanboxアプリ化して条件に応じた画面を出せるようにしている
意識をチームに浸透させる
- ドキュメント化
- 知見まとめた社内ブログ
- 設計を語る会
QA
- UIVIewRepresentableはなるべく使いたくないとのこと
Compositional Layoutsを用いたUI開発の事例とそこで得たtipsのご紹介
活用例
詳細はサンプルコードをみてね
気をつけたいポイント
- estimatedに気をつけろ
- 文字数に応じて高さを変えたりしてくれる
- カルーセルと組み合わせると動作が不安定になる
- タップ領域がずれて押下できなくなる
- シミュレータと実機で挙動が違う
- カルーセルは突き抜けて表示される
- デザイナーとすり合わせるしかない
良かった点
- 実装料が減り、開発効率が向上
- 複雑なレイアウトをひとつのCollectionViewで実現できるので実装料が減った
- コードの見通しがよくなった
QA
- 参考になるのはAppleのサンプル
- iOS14以上ならlistを使うことでTableViewを使わずに済みそう
機能ごとに動作するミニアプリでプレビューサイクルを爆速にした話 After Talk
QA
- Sandboxアプリは開発者の確認使っている
- QAは接続テストも兼ねることがあるので、Mockのデータを表示するアプリではテストできない
- デザイナーが自分でビルドするときに便利という声がある
- Sanboxアプリの整備は誰がやっているか
- 基盤チームのメンバーがやっている
- スクリプトの整備、ダミー実装の整備など
- 画面の実装や利用は開発者チームがやっている
- 実際どれぐらい効率化できたか
- Sanboxアプリの計測をしていなかった…
- 今後定量的に計測する予定
- SwiftUIの共存はどうしているか
- Sanboxアプリ前提の仕組みになっている
- Xcode Previewsは利用しているか
- 最近までXcode Previewsが使えなかった
- コード量が多すぎる?
- ワークアラウンドで動かせそうな気配を感じているので、Sanboxアプリでも使える仕組みを用意している
- SandboxアプリとXcode Previewsの共存になると思う
- 最近までXcode Previewsが使えなかった
- Sandboxアプリは使いすてか
- コミットしてメンテしていく前提
- 最低限のコードの安定性を担保するためにPRのたびにCIでチェックしている
- Sanboxアプリを社内に推進する方法
- マルチモジュールのセッションで詳しく話している
- アカウント機能はどう提供しているか
- 画面ごとに固定値を返す
- 設定画面でランタイムで値を変更する方法も検討するとよい
- Sandbox座談会気になる
- 仕組みを整備する基盤チームがSandboxに関する開発チーム側の意見を取り入れ改善するために実施
- 事前にスプレッドシートに意見を書いてもらって、わいわい談義する
Sandboxアプリどうですか
- 特定のJSONでレイアウトが壊れることがあって、そのときにレスポンスのJSONを流し込んで確認できるSandboxアプリが便利
- フルビルドが15分ぐらいかかってたので、角丸治すのにも時間かかってたけど、Sandboxアプリだと30秒ぐらいなので、よい
Multipeer Connectivityを使った動画のリアルタイム端末間共有 〜料理動画撮影アプリの事例〜
- Multipeer Connectivity
- iOS 7から使える
- 資料あとで見直そう
後日談
Multipeer Connectivityでなにかつくりたい
- いいアイデアがでてこないので、みんな教えて
- ゲーム
- 世界のおもしろ事例
- FireChat
- チャットアプリ
- クローズ済
- 政府によるインターネット利用の規制下や抗議運動などの際に広く使われた
- iTranslate
- 翻訳アプリ
- 手元の端末でしゃべった内容が相手側で翻訳される
- Metronome Touch
- メトロノームのアプリ
- 複数の端末でメトロノームが同期する
- Playr Audibly
- 音楽再生アプリ
- ワイヤレスサラウンドシステムを実現できる
- FireChat
最後に
大規模開発をしながら新しいことを取り入れて改善していて、それが自然な姿になっているのですごいなと思った