ごんれのラボ

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

『ラクマ x STORES LTイベント ~ iOS開発の裏側 ~』に参加しました

概要

お昼休みを利用して久しぶりに社外の勉強会に参加しました。
自分の備忘録代わりにブログに残しておきます。

参加した勉強会

『ラクマ x STORES LTイベント ~ iOS開発の裏側 ~』 https://hey.connpass.com/event/236189/

発表内容

「SwiftLintをもっと活用する (仮)」by @natsumi_oishi

.swiftlint.ymlを使い分ける

  • テストが書きにくい
  • force unwrapとかでエラーになる
  • Tests配下に.swiftlint.ymlを配置するとディレクトリ配下で適用される
    • 親子で設定が競合した場合、子で上書きできる
    • Build Pharesではswiftlinのコマンドだけでよいが、CLIはconfigオプションで複数指定する(そのときは親→子の順にする)

swiftlintの実行時間を短くする

  • 処理対象のファイルを絞り込んで実行すると短くなる
  • Issueに書いてあったスクリプトを書換えて使っている

analyzeを使う

  • メモに必死で聞き逃した
  • ドキュメントにanalyzer: Yesのものがanalyzeで使える
    • ただし、全体で4つしか指定されていないので、必要なものが使えない
  • Unused importを採用してみたが、必要なときに消されてしまったり、不要なものが追加されたりするので、うまく使えなかった

「ラクマでのSwiftUI導入方針とTips」by @darquro

SwiftUI導入方針

  • 2021/2ぁら徐々に導入
  • 画面全体もあれば一部導入もある
  • MVPをベースにしていて、ViewModel Protocolパターンを導入した

困ったこと

  • iOS13/iPadOS 13のサポートを切ろう!
    • テキストフィールドのキーボード入力まわりの挙動がおかしい
  • Previewがエラーになって時間ばかりかかる
    • 諦めてシミュレータ起動したほうが早いこともある
  • if statementを多用しない
    • Xcodeのコード補完が壊れて無限にローディングする
  • if #available をViewModifierで使用しない
    • リリースビルドしたアプリでcrashする
    • 該当の画面をひらいたときにcrashする
    • Crashlyticsでどう見えるか→リリースしてないからログにでていない
      • STORESも困っている

Tips

  • ViewDidLoadModifierを作る
  • AlertBinding
    • iOS14と15でAlert周りが変わったので、互換をもたせて使いたい

「SwiftUIっぽくした話」by @chocoyama

  • STORESレジアプリの話
  • フルSwiftUIで実装している
  • 今日はレシート印刷の話をする
  • XMLをCALayerにパースしてレイアウトしている
  • XMLベタ書きをSwiftUIっぽくした!
  • XMLは宣言的→SwiftUIも宣言的→SwiftUIから宣言的にXMLにできるのでは
  • XMLっぽさ2ではFlutterっぽいIFのフレームワーク
    • だいぶ書きやすくなった
    • 型で指定できるのでコード補完も効いて書きやすくなった
  • 課題
    • 要素を配列に渡す→制御構文をかけない
  • XMLっぽさ3ではresultBuilderを使う
    • 内部DSLを生成できる

「SwiftUIで STORES 予約 をフルリニューアルした話 」by @yoshikei

  • STORES 予約をSwiftUIでフルリニューアルした
  • SwiftUIを採用した経緯
    • リソースが限られていたので、宣言的にUIを実装して効率をあげたかった
    • Flutterはほかアプリとの親和性を考慮して見送った
    • 新しい技術に対応できるタイミングだった
    • iOS13を気にしなくてよかった
    • アプリの内容がシンプルだった
    • フルリニューアル=フルスクラッチだったので、デザインなどの問題があってもデザインチームに相談できるので、挑戦できた
  • アーキテクチャはSwiftUI+Combine+MVVM
  • APIはREST(すでにあるAPIの関係)
  • パッケージ管理はSPM
  • 強み
    • コンポーネント単位でUIを作れる
    • コードベースが比較的シンプル
    • UIの変更に強くレビューしやすい
  • 弱み
    • OS間で実装をわけないといけないことがあった
      • 14と15の差異を吸収するため
    • ベストプラクティス&挙動が安定していない

まとめ

  • お昼時間の勉強会、初めて参加したけどいい体験でした
  • レシート用のXMLをSwiftUIの宣言的レイアウトから効率よく生成するというアプローチが面白かったです
    • DTPのころにXML自動組版という夢を見た身としては、XML懐かしいなーって思いました
  • SwiftUIの導入実績を耳にすることが多いけど、各社だいたい似たようなところでハマっている印象を受けました
    • そして各社乗り切っているところもすごいですね