プログラミング情報

『Swift』から『SwiftUI』に移行したお話

 

半年間Swiftを触っていてだいたいのアプリは作れる状態にはなったんだけど、

タイトル通り『Swift』とはきっぱり別れて『SwiftUI』に移行することに決めました。

これから先、『Swift』に戻ることはないです。

 

『Swift』をやめた理由や『SwiftUI』に移行した理由『SwiftUI』に移行して実際どうだったのかっていう部分について書いていこうかなって思います!

まだ移行したばっかりでSwiftUI初心者レベルなので随時更新して行く予定です。 (10月中旬現在)

てふまる
てふまる
個人的な意見が多くなると思うので、その辺りはご了承ください!

 

『Swift』に感じた限界

これは僕自身の能力への限界ではなく『Swift』というプログラミング言語を取り巻く環境への限界っていう感じです。

結論を先に言うと、新しい実装スキルを身につけようとする時に「調べても調べても出てこないことが多く、時間の浪費がとんでもない上にスキルを身に付けにくい」という理由です。

勉強期

元々『Ruby』というWeb系の言語をちょっと触っていたんだけど(全然たいしたレベルじゃないです。。。)、簡単なサイトを作るだけどもとんでもない量のコードを書く必要があって、超肉体労働に苦痛を感じて比較的かなり記述量が少ない『Swift』にやってきました。

プログラミング経験者といっても「Web言語」と「iOS言語」ではまっっったく違うくて、完全初心者の状況から勉強素材を見つけたり購入したりしてはひたすらコードを書きまくってました。

それこそ英語はできないけど英語のサイトや動画を、他の言語のものでもタメになりそうなものを見つけては吸収してました。

てふまる
てふまる
完全初心者の状態から半年でだいたいのアプリを作れるレベルまで持ってきたのは自分でもかなり頑張ったと思う!

 

独学期

だいたいのアプリは作れるようになったから、次はオリジナルアプリを作りつつ今まで実装したことのないUIの実装にチャレンジするようになったんだけど、

ここで『Swift』の壁にぶつかった。。。

 

1つの新しいUIを実装しようとしたら、とにかく調べまくるんだけど問題があって

  1. 体感で半分以上はそもそもいくら調べても出てこない (調べた時間が無駄になる上に一生身に付けれない)
  2. コードはあってもバージョン(Swift3等)が古すぎて使えない (新しいバージョンに書き換えればいいのだけど、自分にとって新しい記述だから現バージョンに書き換えるだけでもまたいっぱい調べてさらに時間がかかる)

これらの問題が大きすぎて『勉強素材がないとスキルの習得がとんでもなく非効率で全然成長できない』問題に死ぬほど悩むことになりました。

 

『Swift』をしてて1番強く感じたことがあって、

機能面(お気に入り、フォロー、通知、主にデータベースとのやりとり関連)

新しい実装でも応用が効く (経験でなんとでもなる)

UI面(機能面以外)

各実装が完全に別物であることが多くてほとんど応用が効かない (新しい実装のたびに1から調べてチャレンジしないといけない)

上記の通り、

UI面での勉強素材が充実した環境の言語を選択するかどうかで、上級レベルを目指すに当たって今後の成長の期待値がまったく違うことを痛感した。

 

てふまる
てふまる
この時に、このまま『Swift』を続けてたらこの先全然成長できないっていう恐怖を感じて打開策を探すようになったよ。

 

成長の比較

『Swift』では勉強を開始して5 ~ 6ヶ月の段階で、別の記事で書いている『Twitter』『Tinder』『Uber』『Instagram』のクローンアプリのようなUIが当時の限界でした。

てふまる
てふまる
『SwiftUI』に移行して1ヶ月半経った今見たら正直めちゃめちゃショボい、、、

しかもこの程度のレベルで高止まりだったんだから信じられない。

 

『SwiftUI』では移行して1ヶ月 ~ 1ヶ月半でこれくらいのレベルにはなったよ。

   
てふまる
てふまる
『Swift』でこのレベルまで到達するには多分さらに1年 ~ 2年かかっていたと思う。。。

 

 

『SwiftUI』への羨望と移行の決意

先に書いたように『Swift』を勉強してたときは、中級 〜 中上級 くらいになるための勉強素材はあっても『上級』の勉強素材がほとんどなかった

特にUI面のスキルに対して。

 

Swiftを勉強していた時に山ほど検索したり調べたりしてたんだけど、両方「Swift」っていうワードが共通している影響で『SwiftUI』の記事や動画を目にすることも多かったんだけど、

『SwiftUI』は、めちゃめちゃレベルの高い勉強素材 (特にUI面!!) が山ほど転がってる。

高頻度で素材を追加更新してくれる人もいるし、無料で高クオリティの素材もものすごく多い。

てふまる
てふまる
ずーっと「いいなぁ、、Swiftでもこういうのないのかなぁ、、、」って羨ましかった。
中の人
中の人
それで半年経った時に『Swift』に限界を感じて『SwiftUI』に移行することを決めた!って感じだね。

 

iOSアプリの言語でいうと『React Native』『Flutter』『SwiftUI』などがあると思うんだけど、『SwiftUI』を選んだ理由はUI面のレベルの高い勉強素材がぶっちぎりで1番多かったからです!!

この3つの中で『SwiftUI』は唯一「 iOS専用 」でAndroidアプリを作れないんだけどどれだけ万能で書きやすくて優れていても最速で上級レベルまで到達しないと意味がないから『SwiftUI』にしました!

てふまる
てふまる
『SwiftUI』のスキルを上級レベルにまで持っていって満足するところまで行けたら、興味のある『Flutter』にも挑戦してみようかなって思ってるよ。

 

『SwiftUI』に実際移行してみて (デビュー編)

『Swift』から『SwiftUI』への移行を考えている人に1番伝えたいこと。

思っている以上に『Swift』とは全然違う!!!!

てふまる
てふまる
同じ「Swift」っていうワードがあるからなんやかんやで似たようなものと思っていたんだけど、別言語レベルで違う。。。
中の人
中の人
完全な別言語よりはまだ馴染みがあるけど、ほとんど別物と思って覚悟した方がいいと思う。

 

まだまだわからないことだらけだけど感じたことをざっくり箇条書きしとくよ。

  1. コードの記述量が相当少なくなる
  2. @State, @ObservedObject 等のまったく新しい概念が出てきて慣れるまでに時間がかかる
てふまる
てふまる
『Swift』ではほんのちょっと凝ったUIを実現しようとしたら一気にコードが複雑になったり、tableViewだったり他にもなんだけど案外融通が効かない場面に遭遇することが多いかと思うんだけれど、『SwiftUI』はそういう面で相当楽になる感じはしてるよ。

collectionView, tableView のデリゲートメソッドは書かなくてもよくなるし、デリゲートメソッドでTextFieldやSlider等の変更を検知しなくても0行で随時パラメーターを把握したり反映したりできちゃう!

てふまる
てふまる
コード量はほんとに相当減る!

UIが複雑になればなるほど『Swift』との記述量の差が歴然になるよ!

 

『SwiftUI』に実際移行してみて (慣れてきた編)

コードがめちゃめちゃに短い + とにかく書きやすい

1.2週間触るだけでわかるんだけど、どんなに複雑な実装をしてもありえないくらいコードが短く書けちゃう!

1例にしかすぎないけれど、参考までに下のリンクを見てほし。

例) 参考ページ

これを『Swift』で書こうとすると多分この10~20倍のコードを書く必要がある。

(collectionViewのデリゲートメソッドを書くだけでこの2.3倍になる)

てふまる
てふまる
『Swift』はWeb系の言語(Ruby)等と比べると10倍近くコードが短くて衝撃だったんだけど『SwiftUI』はさらに5~10倍短くて書きやすい!

1度『SwiftUI』に慣れてくると絶対にSwiftには戻れないくらい。

融通が効きまくりで自由自在すぎる

『Swift』では tableViewやCollectionViewで融通が効かなかったり、実装がちょっと複雑になるとコード量が倍以上に増えたり実装方法がわからなくなったりすることがあると思うのだけど、

例えば1つのページにtableView・collectionViewをそれぞれバラバラに複数配置, その他Mapや背景アニメーションを入れたり、それぞれの要素を好きなようにカスタマイズしても『SwiftUI』ではただただ適宜追加するだけでまったく複雑にはならない。

てふまる
てふまる
当たり前のように思えても、他のプログラミング言語では絶対こうも単純にはいかない。 

 

例えるなら、

『Swift』はレゴのようなものでだいたいの物は作れるけど、もう少し自由度を求めるとレゴの会社にオーダーメイドの受注をしたり、面倒な手続きをしたり、要望のオーダーメイドの設計図をわざわざ作成したりとものすごく面倒になってしまう。

『SwiftUI』は粘土のようなもので、好きなものを自由自在に作れる。(制限はほぼ皆無)

 

アニメーションの実装のしやすさ

『Swift』ではアニメーションも同様に少しでも複雑な要素を加えた途端に実装のレベルが一気に上がって複雑になる。

この問題も『SwiftUI』では問題にならない。

とにかく簡単。

 

『SwiftUI』に実際移行してみて (だいたい作れる編)

まだ書いてないよ