サーバサイドの人間がiPhoneアプリ開発に入門した

今回は普段Web側で開発している私がiPhoneアプリ開発を経験した内容を書いていきたいと思います。

iPhoneについて知る

元々、AndroidユーザーということもあってiPhone自体の固有の動きが知識が不足してました。細かいことを言うとここをタップするとこういう動きになるよねという知見が少ないので困ったりしました。なので出来るだけ開発する前からiPhoneを使った方がギャップが少なくなります。

Swiftについて

Swift自体の言語の感想としてはクセが少なく素直な良い言語だなという印象を受けました。言語仕様としてここが書きづらいというのも少なかったです。
たぶんほとんど人が鬼門になるのはOptionalの使い方です。慣れといえば慣れで解決できるのですが、ScalaJavaにもOptionalは導入されているので自分の場合概念自体はすぐに理解できました。意外と苦戦したのが?の使い方で色々と使い方があったのでそこは混乱しました。
ただ、Optionalは頻繁に出現するのでここをきっちり理解しないと中々開発効率は上がらないと思います。また、SwiftにはHaskellのdo記法やScalaのfor式に相当する糖衣構文がないので入れ子になったOptionalをunwrapするのは少々手間取ります。 またバージョンアップが激しい言語なので、Swiftのバージョンアップをするとこのライブラリが動かないというのはよくありました。

デザインについて

一番苦戦したのがデザインです。Auto layoutの仕組みは今まで経験してこなかったので難しかったです。特に凝ったデザインだと複雑な組み方をして対応していることがありました。ここが一番経験者と入門者でのレベルがつきやすい箇所だと思います。

設計について

iPhoneアプリの設計についてMVVMやClean Architectureなど様々な設計方法があります。その中で私はReactorkitを使った開発をしました。RxSwiftを使ったFluxスタイルの設計になります。個人的にReduxを使ったことがあったので、このアーキテクチャの考え方はすぐに理解出来ました。RxSwiftも以前RxJsを使ったことがあったので大きく躓くことはなかったです。ただ、Subjectの使い方を今いち理解していなかったのでそこは理解出来るようになりました。

まとめ

全体的に既にフロントエンドを担当したことがある人ならアプリも理解しやすいです。
私の場合さらにRx系の経験もあったので躓きが少なかったです。さらに今まで直感的に理解していたWebアプリよりもネイティブアプリの方が時間がかかる理由も理解できました。WebでいうとフルスタックのSPAを作っている状態であり、考えることが明らかにシンプルなWebアプリよりも多いです。もし今後ネイティブアプリを作るのであれば、作る必要性を吟味してから開発はした方が良いです。