esa.io の iOS アプリを作っていて、それを Swift3 へ移行しようとしたが辛すぎてプロジェクトをゼロから作り直した話。
移行前、移行後のリポジトリは以下です。
Swift3: starhoshi/pi-chan2
Swift2.2: starhoshi/pi-chan
移行前
- Swift3移行を振り返って - Qiita
- Swift2.2 から Swift3 へ頑張って移行した話 - Qiita
- Swift 2.2のプロジェクトをSwift 3.0に書き換えるタスクリスト - Qiita
- iQONをSwift 3.0.1にアップデートしたときに対応したポイント - Qiita
ここら辺読んで、大変そうだけどなんとかなるっしょって思って移行スタート。
利用しているライブラリを一通り確認して、問題ないことを確認。
移行を試みる
- Xcode コンバート
- Cocoapods ライブラリの更新
- エラーを頑張って直す
まず Xcode を開いて、コンバートを促されたので Swift2.2 から Swift3.0 へコンバートして、Cocoapods も更新した。
コンバート後に大量のエラーが出てマジかよってなったけど、他のみんなも頑張ってるみたいだし黙々と直していた。
ただ、どれだけエラー直しても終わる気がしないしライブラリの更新とか地獄で、
- エラーが出る
- ライブラリの README 読む
- 直す
- ライブラリの README が古かったりする...
- github では podspec が更新されてるけど cocoapods に push されてなくてハマる
というのを何回か繰り返して、これ人間がやることじゃねえって思ったし、終わりが見えないのが辛い...。
コンパイルが通るまでにめっちゃ時間かかりそうだし、コンパイル通ってからもエラーでるんだろうな、という感じで心が折れた。
移行スタートからここまで 3 時間くらい。
作り直す
Project を作り直して、コンパイルが通るレベルで小さく移行 & 書き換えしていくことにした。
- Project 作る
- Cocoapods 入れる
- とりあえず起動する
- 対象ファイルを Swift2.2 の Project からコピってくる
- エラー出る
- 直す
- Build が通る
という手順で少しずつ、少しずつ動くように直していった。
移行完了まで 1.5 日くらい。
作り直すときは「多分 2 日あれば余裕で作り直せる」という感覚があったし、だいたいそのくらいの期間で作り直せた。
ただし、Swift ファイルは 70 くらいしかない Project だったのでそれくらいの時間で済んだと思う。
メリット
基本的に 1 ファイルずつ直していくのでテンポが良くサクサク進んでいける。
どこまで進んだかが把握しやすく、5つ画面動くしあと4つで終わりだ〜という気持ちで行ける。
また、同時にリファクタリングしながら進められる。
ライブラリも Himotoki から ObjectMapper に移行したり、なくてもなんとかなるライブラリ削除したりと結構大きめの修正もすることができた。
レッド(コンパイルエラー) -> グリーン(アプリ起動) -> リファクタリング
となるので TDD っぽいって思ったけど、テストは 1 行も書いてないので全然違いますね
感想
作り直すのは何かに負けた気がして後ろめたい気持ちが少しありますが、感想としては作り直してよかった。
とりあえずエラーが出ない状態まで持っていけば良いという状況を作り出せるのがポジティブに進めていけた。
Issue Navigator に大量にエラーが残っている状態でひらすらそれを解消するのは辛すぎる...。
Swift2.3 のサポートが切れる日も遠くないとのことなので、なんとか頑張って移行していきましょう
esa.io 使ってる人は
ピーちゃん をぜひ使ってみてください