半年間Swiftを触っていてだいたいのアプリは作れる状態にはなったんだけど、
タイトル通り『Swift』とはきっぱり別れて、『SwiftUI』に移行することに決めました。
これから先、『Swift』に戻ることはないです。
『Swift』をやめた理由や『SwiftUI』に移行した理由、『SwiftUI』に移行して実際どうだったのかっていう部分について書いていこうかなって思います!
まだ移行したばっかりでSwiftUI初心者レベルなので随時更新して行く予定です。 (10月中旬現在)
目次
『Swift』に感じた限界
これは僕自身の能力への限界ではなく、『Swift』というプログラミング言語を取り巻く環境への限界っていう感じです。
結論を先に言うと、新しい実装スキルを身につけようとする時に「調べても調べても出てこないことが多く、時間の浪費がとんでもない上にスキルを身に付けにくい」という理由です。
勉強期
元々『Ruby』というWeb系の言語をちょっと触っていたんだけど(全然たいしたレベルじゃないです。。。)、簡単なサイトを作るだけどもとんでもない量のコードを書く必要があって、超肉体労働に苦痛を感じて比較的かなり記述量が少ない『Swift』にやってきました。
プログラミング経験者といっても「Web言語」と「iOS言語」ではまっっったく違うくて、完全初心者の状況から勉強素材を見つけたり購入したりしてはひたすらコードを書きまくってました。
それこそ英語はできないけど英語のサイトや動画を、他の言語のものでもタメになりそうなものを見つけては吸収してました。
独学期
だいたいのアプリは作れるようになったから、次はオリジナルアプリを作りつつ今まで実装したことのないUIの実装にチャレンジするようになったんだけど、
ここで『Swift』の壁にぶつかった。。。
1つの新しいUIを実装しようとしたら、とにかく調べまくるんだけど問題があって
- 体感で半分以上はそもそもいくら調べても出てこない (調べた時間が無駄になる上に一生身に付けれない)
- コードはあってもバージョン(Swift3等)が古すぎて使えない (新しいバージョンに書き換えればいいのだけど、自分にとって新しい記述だから現バージョンに書き換えるだけでもまたいっぱい調べてさらに時間がかかる)
これらの問題が大きすぎて『勉強素材がないとスキルの習得がとんでもなく非効率で全然成長できない』問題に死ぬほど悩むことになりました。
『Swift』をしてて1番強く感じたことがあって、
・機能面(お気に入り、フォロー、通知、主にデータベースとのやりとり関連)
は新しい実装でも応用が効く (経験でなんとでもなる)
・UI面(機能面以外)
は各実装が完全に別物であることが多くてほとんど応用が効かない (新しい実装のたびに1から調べてチャレンジしないといけない)
上記の通り、
UI面での勉強素材が充実した環境の言語を選択するかどうかで、上級レベルを目指すに当たって今後の成長の期待値がまったく違うことを痛感した。
成長の比較
『Swift』では勉強を開始して5 ~ 6ヶ月の段階で、別の記事で書いている『Twitter』『Tinder』『Uber』『Instagram』のクローンアプリのようなUIが当時の限界でした。
しかもこの程度のレベルで高止まりだったんだから信じられない。
『SwiftUI』では移行して1ヶ月 ~ 1ヶ月半でこれくらいのレベルにはなったよ。




『SwiftUI』への羨望と移行の決意
先に書いたように『Swift』を勉強してたときは、中級 〜 中上級 くらいになるための勉強素材はあっても『上級』の勉強素材がほとんどなかった。
特にUI面のスキルに対して。
Swiftを勉強していた時に山ほど検索したり調べたりしてたんだけど、両方「Swift」っていうワードが共通している影響で『SwiftUI』の記事や動画を目にすることも多かったんだけど、
『SwiftUI』は、めちゃめちゃレベルの高い勉強素材 (特にUI面!!) が山ほど転がってる。
高頻度で素材を追加更新してくれる人もいるし、無料で高クオリティの素材もものすごく多い。
iOSアプリの言語でいうと『React Native』『Flutter』『SwiftUI』などがあると思うんだけど、『SwiftUI』を選んだ理由はUI面のレベルの高い勉強素材がぶっちぎりで1番多かったからです!!
この3つの中で『SwiftUI』は唯一「 iOS専用 」でAndroidアプリを作れないんだけど、どれだけ万能で書きやすくて優れていても最速で上級レベルまで到達しないと意味がないから『SwiftUI』にしました!
『SwiftUI』に移行してみて感じた違い
1. 『Swift』と『SwiftUI』は思っている以上に別言語
思っている以上に『Swift』とは全然違う!!!!
コードの書き方だったりStackViewを軸に考えたりで色々と違う部分が多い上に、@State, @ObservedObject 等のまったく新しい概念が出てきて慣れるまでにちょっと時間がかかるよ。
2. 『Swift』と比べてメリットしかない
文字通り完全な超上位互換だなあって感じてる。
この部分は『Swift』の方がよかったなあって思うことがまったくない。
3. コード量がめちゃくちゃに減る + 書きやすい
collectionView, tableView のデリゲートメソッドは書かなくてもよくなるし、デリゲートメソッドでTextFieldやSlider等の変更を検知しなくても0行で随時パラメーターを把握したり反映したりできちゃう!
1例にしかすぎないけれど、参考までに下のリンクを見てほし。
例) 参考ページ
これを『Swift』で書こうとすると多分この10~20倍のコードを書く必要がある。
(collectionViewのデリゲートメソッドを書くだけでこの2.3倍になる)
1度『SwiftUI』に慣れてくると絶対にSwiftには戻れない。
4. 融通効きまくりで自由自在
『Swift』では tableViewやCollectionViewで融通が効かなかったり、実装がちょっと複雑になるとコード量が倍以上に増えたり実装方法がわからなくなったりすることがあると思うのだけど、
例えば1つのページにtableView・collectionViewをそれぞれバラバラに複数配置, その他Mapや背景アニメーションを入れたり、それぞれの要素を好きなようにカスタマイズしても、『SwiftUI』ではただただ適宜追加するだけでまったく複雑にはならない。
例えるなら、
『Swift』はレゴのようなものでだいたいの物は作れるけど、もう少し自由度を求めるとレゴの会社にオーダーメイドの受注をしたり、面倒な手続きをしたり、要望のオーダーメイドの設計図をわざわざ作成したりとものすごく面倒になってしまう。
『SwiftUI』は粘土のようなもので、好きなものを自由自在に作れる。(制限はほぼ皆無)
どんなUIでも難しい書き方はほぼ皆無
『Swift』やってた人はわかると思うんだけど、特殊な裏技みたいなオブジェクトとかが山ほどあって、それを使わないと実装できないUIとかが結構あったりする。(複雑なUIでもないのに)
Swift歴がかなり長い人や学習環境に恵まれている人からしたら『何言ってるの?』て感じかもしれないけど、独学勢には異常に厳しすぎる。。。
他にもCollectionViewだったりの難しい拡張だったりもしないと理想のUIを実装できなかったり。 (SwiftUIだと5行で書けるUIなのに、、、)
でも『SwiftUI』ではそういった専門的なオブジェクトだったり難しい拡張だったりが一切ない!!!
どれだけ複雑なUIになってもただただコード量が増えるだけで、専門性だったり難しいオブジェクトの使用や機能拡張は一切必要ない。
もう自由自在でしかも簡単すぎてスライダー・Toggle・プログレスバー・タブバー・ナビゲーションバー とかも用意されてるのは使わずに自分で作ろう!ってなるレベル。

それくらい『SwiftUI』は障壁が少ないし、自由自在にUIをカスタマイズできる。
アニメーションの実装のしやすさ
『Swift』ではアニメーションも同様に少しでも複雑な要素を加えた途端に実装のレベルが一気に上がって複雑になるけど、『SwiftUI』ではアニメーションもめちゃ簡単。