iOSアプリ開発をした際に思ったことまとめ
現行のアプリがWebView主体だったため、ネイティブにリニューアルするプロジェクトをやらせていただくことになった。
新規にアプリを作る上で気にしたことをいくつか書いていこうと思います。
主に自身の備忘録のため。数年後に見直して、今思っていることからどう変わったのかを確認する目的もあるためご了承お願いします。
[目次]
言語の選択
コーディング規約
ソースコード管理
クラス設計
実装
実装における留意点
やるべきではないこと
所感
***
・言語の選択
自身が使いこなせる言語であれば問題ない。今回、経験なくとも書いたことある、というのなら良いということでSwift 4を選択した。
・コーディング規約
一人で作り上げるが、備忘録のために実装における規則を作った。場所は社内wikiにまとめた。書いていくと気づかなかったことが見えてくることもある。
・ソースコード管理
ソースコードはgit labで管理することにした。アプリ開発は切り戻すことがあるため、こまめにpushしておき、必要に応じてブラウザなりcloneなりを行う。
・クラス設計
iOSアプリにおいて注力するのがここ。これを間違うとうまくいかない。機能ごとに何の役割を担わせるのか、という視点で全体を構成しておく。異なる役割を同じクラスには書かない。設計書はあれば越したことはないが、なくともはじめに階層を作っておくだけでも理解がしやすい。ここでいう役割とは、例えばAPIアクセスや、表示処理、取得済み要素の演算など。
・実装
アプリを実装するにおいていつもやっている順序
・クラス名を決める
・見た目(xib, storyboard)にて画面を作る
・見た目ができたらライフサイクル上で何を置くかを決める(何をどのタイミングで行うか)
・登場する機能を整理、および配置する
・配置したら各々で役割を実装する
・動作確認
***
留意点
・密結合をできるだけ行わないこと
なぜかというと、仕様変更に弱い傾向になってしまう。修正するたびに既存の処理を見直すことはすごく面倒だし工数もかかる。
反対に疎結合にしておくと、直したい機能があればその箇所だけ直せば良いし、付け足したいならユニットを取り付けるだけで済む。
・functionに引数を極力使わない
依存させる処理があるなら、別functionにまとめない。ラップする処理は見た目はいいが追いにくい。多少見た目が雑でも、分ける必要がない処理は羅列させる方がいいこともある。
extentionの場合を除く。
・共通処理の際はオーバーライドを使う
共通処理が中身が全く同じものであれば別だが、実装したい機能において似通った機能であればインプット、アウトプットが異なる場合は、オーバーライドを行うと良い。
・非推奨な関数は使わない
Xcodeで非推奨となっているステートメントは将来使われなくなる可能性が高い、というかXcodeのバージョンアップによって消えて無くなる。そうなった際にビルドエラーとなるので、目的を達成できる別の書き方により実現する。
***
やるべきではない
ViewControllerなどの1ファイルにcontroller、model、viewをまるごと突っ込まれたソースコードを見たことがあるが、アレは良くない。
なぜ良くないかというと、処理が追いにくい。
処理を追うためには識別するものがあるとわかりやすい。その識別するものの例として、modelやviewを別クラスとして定義しておく。それらがcontrollerから分離されていたら参照ができる。controllerから参照することによって別物として捉えることができるため、実装者が処理の流れを理解しやすい。
***
所感
MVCモデルを考える上でなぜ必要なのかを理解することにより、変更が容易に可能なプロジェクトをつくることができる。
目の前のことだけに集中して行き当たりばったりなやり方はその場ではやり過ごすことができるとしても、あとあと苦しむことになる。
全体を見渡してやるべきことを起こした上で実装を進めると、スムーズに開発を進めることが出来る。