Swift集中トレーニングを受講した感想を書いてみる

# 記事の概要

今月7月に村本章憲氏主催の

[【iOS】Swift集中トレーニング！！iOSエンジニアを最速で目指そう！](https://menta.work/plan/913)を受講してSwiftUIを学習していました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">SwiftUI 1ヶ月集中トレーニングコース 67,800円<br><br>超最速でiOSのエンジニアの道を切り開きます！！<br>週1回 2hの講師付きトレーニングで、質問し放題🤩<br><br>7月開講予定です！</p>&mdash; nori 村本章憲 (@1amageek) <a href="https://twitter.com/1amageek/status/1135833050133086209?ref_src=twsrc%5Etfw">June 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

2019年6月のWWDCで発表された[SwiftUI](https://developer.apple.com/documentation/swiftui)が出てiOS界隈に大きなインパクトを与えました。残念ながら私は諸事情でWWDCに参加できませんでしたが、
AppleのプレゼンとTwitterのiOS界隈のタイムラインを追っているだけで「あー、将来は従来のiOSアプリの開発スタイルが変わってしまうな」と確信してしまいました。

おそよ6年位前の2014年にAppleが新しいプログラミング言語「Swift」を発表したときにもiOS界隈に大きなインパクトを与えた時と同じ印象です。当時はiOSアプリ開発と言えばObjective-C の開発がメインで私もObjective-Cでアプリを開発していましたが、今ではObjective-Cのコードを書いていません。

6年もの年月でObjective-CコードがSwiftコードに置き換わりそれまでのソースコードや設計が一気に覆りました。
ちなみに私は当時はそうは行ってもObjective-Cの開発も無くなりはしないだろうと勘ぐっていましたのその予想を裏切られました。

1年ぐらい遅れのSwift2.0くらいからSwiftのコードを書くようになりました。
そのため、今回はその反省の意味も込めて今回はSwiftUIはこれからのiOSアプリ開発ではマストだと予想して1ヶ月ぐらい前に村本氏が上の講座のプランをMentaで作って頂きましたのでこれを機会にSwiftUI を先取りしようと思ったのが受講のきっかけです。

**ちなみに今回のエントリーはMentaとか上の講座の宣伝ではありません。**

本当は平日や休日にちょっとずつ作業していけば良いのですが、平日は仕事で忙しいし休日はサボりたい気持ちがどうしても出てしまって絶対進まないので**勉強時間に投資する**という意味で上記の講座に申し込みしました。

その感想としては非常にコスパが良かったと断言します。

本村氏がApple公式のチュートリアルの説明では気づかなったポイントを丁寧に教えてくれたおかげで

- SwiftUIの設計思想
- SwiftUI独特のアノテーションの意味と使い方(**@State**とか)
- SwiftUIとCombineとの組み合わせの書き方

の概念が非常に理解できました。

実は[Appleのチュートリアル](https://developer.apple.com/tutorials/swiftui/tutorials)もなかなか良い感じに丁寧なのでそのチュートリアルを2周ぐらい写経して英語のドキュメントを眺めるだけで大体のコツは掴めたりできます。
ですが、今のプライベートのスケジュールだとどうしても独学だと9月の正式にXcode13がリリースされるタイミングくらいにやっとちょっとだけ理解できる進捗だと思うのでコスパがよくないと思いました。

この文章だけだと宣伝みたいな記事なのでちょっとSwiftUIのチュートリアルについて私なりにまとめてみます。

# SwiftUIのチュートリアル

基本的には[公式ページ](https://developer.apple.com/tutorials/swiftui/tutorials)に書かれているポイントがそのままですが、

### SwiftUI Essentials

- Creating and Combining Views(Viewの作り方について学べます)
- Building Lists and Navigation (UITableViewの代わりとなる**List**と画面遷移について)
- Handling User Input (@State, BindableObject と @EnvironmentObject でのデータバインディングについて)


### Drawing and Animation

- Drawing Paths and Shapes (位置関係の調整やViewの描写について)
- Animating Views and Transitions (アニメーションの実装方法について)

### App Design and Layout

- Composing Complex Interfaces (横スクロールの実装方法とか)
- Working with UI Controls (そこまで理解度が及んでいません)

### Framework Integration

- Interfacing with UIKit (そのままですがUIKitとの連携について)


**Handling User Input**までをグルグル学習すればSwiftUIにおけるレイアウトの組み立て方を理解することができました。
@Stateと @EnvironmentObject との違いが分かれば例えばUIKitでいう**UITableView**のリロード方法がはっきりわかります。

Drawing and Animation を理解すれば複雑なデザインを実装できるようになるような気がします。

それで1ヶ月間ぐらいSwiftUIを触ってみての大まかな感想ですが、これはもう他のiOSアプリエンジニアの方の意見と同じでSwiftUIはAppleがMVCを脱却するために編み出したMVVM用のフレームワークです。私は去年8月頃からブロックチェーンのトレンドを追う次いでに認知したFlutterもMVVMですがコンポーネントの思想といいFlutterの影響を受けている印象しかないです。

逆に言えばSwiftUI に慣れたら自ずとFlutterも違和感なくかけるようになりそうだし早いうちにSwiftUIに慣れた方がメリットしかないように思います。

これからのiOSアプリ開発はFatViewControllerを卒業してメンテナンスが辛くなる苦痛から解放される予感がしますね。

## SwiftUIにして今後流行るかもしれないトレンド

AppleがSwiftUIを発表したことで今後流行るかもしれないトレンドを予想してみました。

- Storyboardの廃止
- Autolayoutのdepricated
- ユニットテスト (UIをコードで書くスタイルに戻りそうなので)
- AndroidのXMLみたいな差分がわかりやすいUIファイル

できればAndroidみたいにレイアウトを組み立てられたら幸せかなと思いました。
ということで今後もApppleがどんな技術を発表するのか楽しみです。