iOS経験0のエンジニアがアプリを最短でリリースするまでにやったこと
記事概要
先日ルーチンタイマーというアプリをリリースした。
自分はiOS経験0だが、キャッチアップ含めて3週間で1本リリースしたので、そのときに行ったキャッチアップ内容について記事を書く。
ブログ著者の前提
ここ最近はまったく触れてないので2年のブランクがあるが、4年ほどAndroidアプリエンジニアをやっていた。 現在はSRE、BE担当のフリーランスエンジニア。
リリースまでの方針
基本的にまったくわからない状態でいきなりコードを書き始めても挫折&破綻してしまうので、最初に最低限のインプット => コードを書きながらインプット => リファクタリングという流れで進めた。
また、下記のものは最速でリリースすることを目的にしているので ある程度は捨てた。
- 内部的な品質
- Swiftのお作法に沿っているか
- 設計のデファクトスタンダードに沿っているか
ただ、
- 外部的な品質
- パフォーマンス
- 操作性
のようなユーザに見えるところはテストとチューニングで担保するようにした。個人開発での保守性は、数ヶ月先の自分がコードを理解して開発し続けられるレベルであれば担保できると思っているので、設計やお作法に過剰にこだわる必要はないと判断したからだ。
具体的なカリキュラム
最低限コードを書き始めるまでに学んだこと
本気ではじめるiPhoneアプリ作り Xcode 10.x対応
- 今回作りたいアプリはサーバとの通信は不要だったので、Chapter1 ~ Chapter6だけ読んで写経した。
- 内容としては、Swiftの最低限の文法、画面遷移、AutoLayout、UserDefaultsによるデータ永続化、サウンドメディアの再生がメイン。
アプリのライフサイクルについて
- https://hackernoon.com/application-life-cycle-in-ios-12b6ba6af78b
- Androidと違い、画面回転や低メモリ環境で画面のライフサイクルがどうなるのかなどを学んだ。
コードを書きながら参考にしたもの
上記のインプットが済んだら早速アイデアをアプリとして落とし込むためにコードを書き始めた。 並行して下記のプロジェクトのソースを読み、Swiftの基本的なお作法や、MVVMの設計についてインプットした。
ある程度コードベースができてきたタイミングで、上記のプロジェクトを参考にして、制御が複雑なところをMVVM設計にリファクタリングした。 ただ、前述したとおりリリースを最優先に据えているので、過剰にここにこだわることはやめた。
詰まったポイント
レイアウト周りでやりたいことをググったときに、StoryBoardでやってたりコードで書いてたり人にやってバラバラだったので少し困った。
- バラバラだとあとで自分が保守するときに困るので基本的にはStoryBoardでできるものはなるべくStoryBoard側でいじるようにした。
実機でテストしないと見えないものがちょくちょくあった
MVVMにして、ViewControllerはViewModelのプロパティをObserveしてViewの反映更新のみを行うようにしたのだが、プロパティ設計をミスると、把握できないタイミングでいろんなプロパティが変わりまくり、バグの特定が困難になった。
- なるべくViewに対してのインプットとなるプロパティは一個に統一し、フラグ管理などはなるべく避けて、enumで状態と遷移を定義してあげることでシンプルにした。
開発モチベーション維持のためにやったこと
- 個人開発用のアカウントを作り、個人開発をやっている人たちをフォローしまくった。定期的に監視することで、自分も頑張ろうという気持ちになれた。
振り返り
Good
やること、やらないことをスタート時点で定義したおかげで無駄なく進むことができた。
ツイッターで他の個人開発者を監視していたのが効いた。
内部品質をある程度妥協するとはいえ、ここを妥協しすぎると後々の開発スピードが遅くなってしまう。なので自分が将来保守していけるレベル、という基準で妥協するところ、しないところを明確にしたことで、リリース日を遅らせたり挫折することなく進めることができた。
Bad
最初はシミュレータだけで確認していたが、実機で実行した結果今まで見えていなかった問題が浮き彫りになって、手戻ることが何度かあった。
- 当たり前だが早いうちから実機で確認したほうが良さそう
リリースを最優先にしすぎると、だんだん最後の方でいろんなものをおざなりにしたくなってくる。たとえばデザインや、ちょっとしたバグなど。
- どの程度デザイン、バグを妥協するのか、というのは事前に明確に判断のための基準を定義しておき、感情にまかせてそこの判断をミスらないようにするべき
まとめ
やること、やらないことを明確にして最小限のインプットで開発しはじめたことでリリースすることができた。 まだまだやりたいことはいっぱいあるのでどんどんやっていきたい。