「webエンジニアでも出来る!iOSアプリのリファクタリングの全て」という勉強会に行ってきました
最近勉強会に顔を出したりしてますが、忘れないうちにメモを。
zigexn.co.jp 株式会社じげんの具志堅さんが掲題の講演されていました。
プロジェクトをどう管理しているか?
- ガントチャートはgantterつかってる(Google Chrome ext)
- プランニングポーカーしてる
- スクラムKPTやってる
- バーンダウンチャートつかってる(ホワイトボード)
- 「Apple審査 じげん」でググるとスライドあるよ
見つけたので貼っておきます。
www.slideshare.net
課題と背景
- 非常に短期間 & 少人数で進めていたのでオレオレコードが多くなっていた
- スケールするためにはどうしたらよいかを考えてみた
改善前
- ViewController整理されてない
- Controllerの肥大化 (あるある
- 初期化処理多すぎる
- ディレクトリがXcodeデフォ構成に引っ張られすぎた
- 型宣言などの冗長な記述が多い
- Array/Dictionary混在
- Dev/Prod環境の分離ができてない
やったこと
コーディング規約を用意した
- これを参考に独自に改変しつつ利用した
- 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分割したと理解した。
デザインパターンを活用した
- Singleton
- Google Analytics を Adapter で利用
まあこのへんは、ですよねっていう感じで
技術的負債
- 抱えきれなくなる前に少しずつ解消していこう
Q&A
Swiftだから出来たリファクタリングはなにかあるか
- Objective-Cよりデザパタ適用しやすかったかなと。
規約をカスタマイズした過程を知りたい
- リードエンジニアが叩きを作ってエンジニアで揉んだ