「webエンジニアでも出来る!iOSアプリのリファクタリングの全て」という勉強会に行ってきました

最近勉強会に顔を出したりしてますが、忘れないうちにメモを。

zigexn.co.jp 株式会社じげんの具志堅さんが掲題の講演されていました。

プロジェクトをどう管理しているか?

見つけたので貼っておきます。

www.slideshare.net

課題と背景

  • 非常に短期間 & 少人数で進めていたのでオレオレコードが多くなっていた
  • スケールするためにはどうしたらよいかを考えてみた

改善前

  • ViewController整理されてない
  • Controllerの肥大化 (あるある
  • 初期化処理多すぎる
  • ディレクトリがXcodeデフォ構成に引っ張られすぎた
  • 型宣言などの冗長な記述が多い
  • Array/Dictionary混在
  • Dev/Prod環境の分離ができてない

やったこと

コーディング規約を用意した

  • これを参考に独自に改変しつつ利用した

qiita.com

  • Xcodeで一括置換して対応した

Info.plist / Build Settings を活用

  • Info.plistに定数を定義
  • Build Settings の User-Defined 以下に Debug/Releaseを分けて設定した
    • DebugビルドとReleaseビルドを分けられるように

MVC構成

  • グループに分けた (Models、ViewControllers//ViewController)
  • Modelは状態の保持、加工のみの役割にした
  • ViewControllerはModelへ加工の指示や取得を行い表現する

Model例

  • ImageManager.swiftというモデルにし画像処理を行う

ViewController例

  • Modelに処理を委譲して結果を表示するのみ

このあたり、クラス名がHogeManagerとかになっていたので厳密にはModelというよりServiceも兼ねていた模様。 なのでMVCというよりも、とにかくViewControllerからのロジック分離を目指して

  • ViewController(VC)
  • ロジック

のように2分割したと理解した。

デザインパターンを活用した

まあこのへんは、ですよねっていう感じで

技術的負債

  • 抱えきれなくなる前に少しずつ解消していこう

Q&A

Swiftだから出来たリファクタリングはなにかあるか

規約をカスタマイズした過程を知りたい

  • リードエンジニアが叩きを作ってエンジニアで揉んだ

所感

  • Info.plist / BuildSettingsでの定数定義は良さそうなので利用したい
  • MVCのあたりは当然のことを当然にやるのが大事という話
    • Fat controller にしないようにするとか
      • このへんは個人的にはDDDにしたいので参考程度
  • コーディング規約便利そうだからみておく
  • Swiftデザパタ適用しやすいらしい、静的型付け言語のオブジェクト指向だしですよねーっていう感じ
  • 技術的負債はもう普通の話だった