プログラミング情報

『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』よりこのプログラミング言語の方がUI面でのいい素材がいっぱいあるの知ってるよ!!っていう人はそっちの言語を選んだ方がいいと思う!

 

『SwiftUI』に移行してみて感じた違い

1. 『Swift』と『SwiftUI』は思っている以上に別言語

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

コードの書き方だったりStackViewを軸に考えたりで色々と違う部分が多い上に、@State, @ObservedObject 等のまったく新しい概念が出てきて慣れるまでにちょっと時間がかかるよ

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

2. 『Swift』と比べてメリットしかない

文字通り完全な超上位互換だなあって感じてる。

この部分は『Swift』の方がよかったなあって思うことがまったくない。

3. コード量がめちゃくちゃに減る + 書きやすい

てふまる
てふまる
『Swift』ではほんのちょっと凝ったUIを実現しようとしたら一気にコードが複雑になったり、tableViewだったり他にもなんだけど案外融通が効かない場面に遭遇することが多いかと思うんだけれど、『SwiftUI』はそういう面で相当楽になる感じはしてるよ。

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

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

例) 参考ページ

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

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

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

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

4. 融通効きまくりで自由自在

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

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

例えるなら、

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

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

どんなUIでも難しい書き方はほぼ皆無

『Swift』やってた人はわかると思うんだけど、特殊な裏技みたいなオブジェクトとかが山ほどあって、それを使わないと実装できないUIとかが結構あったりする。(複雑なUIでもないのに)

Swift歴がかなり長い人や学習環境に恵まれている人からしたら『何言ってるの?』て感じかもしれないけど、独学勢には異常に厳しすぎる。。。

他にもCollectionViewだったりの難しい拡張だったりもしないと理想のUIを実装できなかったり。 (SwiftUIだと5行で書けるUIなのに、、、)

てふまる
てふまる
『Swift』は中上級者以上になるには結構な茨の道感が否めなかった。

でも『SwiftUI』ではそういった専門的なオブジェクトだったり難しい拡張だったりが一切ない!!!

どれだけ複雑なUIになってもただただコード量が増えるだけで、専門性だったり難しいオブジェクトの使用や機能拡張は一切必要ない。

もう自由自在でしかも簡単すぎてスライダー・Toggle・プログレスバー・タブバー・ナビゲーションバー とかも用意されてるのは使わずに自分で作ろう!ってなるレベル。

中の人
中の人
下の記事に、移行して半月 〜 2ヶ月の間に作ったアプリをいっぱい載せてるんだけど、ここで使ったスライダー・Toggle・プログレスバー・タブバー・ナビゲーションバーは全部デフォルトで用意されてるものじゃなくて自作のものだよ。
『SwiftUI』 1ヶ月以内に高レベルのアプリを40個作ってみる ( ※ 全アプリの詳細あり ) 現在『Swift』から『SwiftUI』に移行して20日ほど経過していて、 その間ただただ基礎を身に付けて...

それくらい『SwiftUI』は障壁が少ないし、自由自在にUIをカスタマイズできる。

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

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

 

 

 

てふまる
てふまる
『SwiftUI』への移行を考えてる人はオススメだよ!
中の人
中の人
僕もみんなに負けないようにプログラミング頑張るので、一緒に頑張りましょ!!