ボクココ

サービス開発を成功させるまでの歩み

iOS / Swift 開発のハードル

ども、@kimihom です。

f:id:cevid_cpp:20210221133807j:plain

Swift での iOS アプリ開発で苦戦している最中だ。少しずつ進んでいるけど、そこで起きている現在のハードルについて記してみよう。

バージョンアップが激しい

まず、2年前以上の Swift 関連記事をググって見つけても、ほとんどは役に立たない。現在では UI は SwiftUI で作ることが一般となりつつある中、1~2年前まで主流だったオートレイアウトでの記事しかないためである。

オートレイアウトの状態のままでも動かし続けられるため、前からオートレイアウトを使っていた方がわざわざ SwiftUI に書き換えるってのも無いようで、新しい記事でも SwiftUI を使われていない記事もいくつかある。

SwiftUI での最新記事のほとんどは、初心者向けの単純なものか、逆に記事が複雑すぎて理解困難なものが多かった。もちろん私の理解力不足ってのもあるだろうけど、初心者向け SwiftUI の本3冊読んでもまだスッキリとしない状態である。中級者向けの本とかがあればいいのか、あとは開発で苦戦しながらやるしかないのだろうか。

// ログイン状態の保存
@AppStorage("isLogin") private var isLogin = false

上記は ユーザーがログインしている状態なのかどうかを管理する変数である。この実装を見ると、ログインのトークン管理も AppStorage でやりたくなる。だが詳しく調べると、トークンなどの貴重なデータは AppStorage 保存先である UserDefaults に保存してはダメなようだ。UserDefaults はオープンな保存場所のようで、AppStorage は公開されても問題ないようなデータだけ 使うとされている。じゃあどうすれば良いかってなると、Keychain を使う方法がネット上に書かれている。

SwiftUI から始めた勢にとっては、SwiftUI で全てやり切るのは不可能で、昔? の書き方を結局は学ぶ必要がありそうである。

エラーメッセージの対応

Swift はコンパイル型の言語である。エラーが起きそう な変数の扱い方をするだけで、エラー発生としてアプリを動かせなくなる。 このエラーメッセージが全部英語で、かつどれもわかりづらい。ググってもパッと解決が出てこないようなエラーがあまりにも頻発するので、結局コードの書き方を戻して、ゼロから考え直すってことが繰り返されている。

この厳しいコンパイル要素は、複数人チームで Swift で開発する際には 統一されるという意味で強力な制約ではある。しかし初心者にとってのハードルがどんどん高くなって、しかも変化が激しいからずっとついていかなければならない厳しさがある。とりあえず 現状の Swift でアプリを作り切ったとしても、そのあとの頻繁な iOS/Swift の更新追従をちゃんとできるのか。難しいところである。

ソースの理解

例えば先程の AppStorage をもっと詳しく知りたいとなった時、定義元のソースを読みたくなる。

f:id:cevid_cpp:20210221131353p:plain

そうすると、SwiftUI のコードの1,331行目のコードに飛ばされる。SwiftUI ファイル、なんと全体で23,817行もあるファイルである。もちろん全て英語ってことで、問題が起きた時にはなんとか読み進んでいくしかない。

この2万を超えるソースコードを読むたびに、初めてみるクラスが出てきて、理解するってところまで行けない状態だ。これがパッと理解できるようになってきたら、ようやくスラスラ開発ができるようになるのだろう。

f:id:cevid_cpp:20210221132008p:plain

私に必要なもの

今の私に必要なのは、Swift コードの奥にまで理解を進められるような環境だろう。しかし、サービスを運営して多くの問い合わせやタスクが来るようになると、この理解時間の確保が難しくなる。途中で他のタスクが入ってくる頃には、今までどんなことを学んできたのかを忘れてしまう。それに伴い、どんどん奥にまで読み進めるというモチベーションも、集中できない環境では やろうという気になれなくなってしまう。

あぁ、3~5年前の私には、それができていた。東京から離れた地である熱海にて、少ないユーザー数であったサービスの開発で、プログラミングだけに集中できる環境があったのである。

現在、その代わりの場所として、長野上諏訪の地がある。体調が回復しつつある今、私に必要なのは本当の意味で iOS アプリ開発だけに集中できる環境なのではないか。

まだまだ iOS / Swift の完全理解には時間がかかるけど、続けていこうではないか。その先に見える世界を信じてね。