ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

After Party iOSDC Japan 2021 に参加した

概要

After Party iOSDC Japan 2021 に参加したので、セッションのメモなどを残しておく。

cookpad.connpass.com

セッションメモ

チームでSwiftUIを書くために 〜読みやすく保守しやすいSwiftUIの設計について考えたこと〜

  • https://speakerdeck.com/natmark/after-party-iosdc-japan-2021-swiftui
  • 買い物機能はKaimono muduleで開発している
    • やっぱマルチモジュール
  • 買い物機能はSwiftUI
  • 買い物機能がクックパッドアプリの最大のモジュールになっているそう

    課題

  • 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の共存になると思う
  • 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
      • 音楽再生アプリ
      • ワイヤレスサラウンドシステムを実現できる

最後に

大規模開発をしながら新しいことを取り入れて改善していて、それが自然な姿になっているのですごいなと思った