UdemyのSwift関連コースでiOSアプリ開発に役立った具体的なことまとめ

この記事では、プログラミングを初めてちょうど1年程度の私が、[Udemy](https://www.udemy.com/)で購入したSwift関連のコースの内容から、実際のiOSアプリ開発をしてみて役に立ったことを具体的にご紹介していきます。

注意）コースは全て英語のコースですので、英語が全くできないという方にはあまり参考にならないかもしれません。

#もくじ
- iOSアプリ開発の基本とUIKitメインのプログラミング
- SwiftUIメインのプログラミング



#iOSアプリ開発の基本とUIKitメインのプログラミング


私が最初にSwiftとiOSアプリ開発の学習は始めた時は、以下のコースを並行して進めていました。Nick先生、Angela先生、どちらのコースも文法の基礎が最初の方で説明されていますので、実演と実践を繰り返し、理解することができました。

- Build Your First iPhone App - iOS 14 Apps Using Swift 5
https://www.udemy.com/course/build-your-first-iphone-app-ios-14-apps-using-swift-5/
講師：Nick先生

- iOS 13 - How to Make Amazing iPhone Apps: Xcode 11 & Swift 5
https://www.udemy.com/course/how-to-make-an-iphone-app-course-xcode-11-swift-5-ios-13/
講師：Nick先生
*2019年のコースになります。

- iOS & Swift - The Complete iOS App Development Bootcamp
https://www.udemy.com/course/ios-13-app-development-bootcamp/
講師：Angela先生

###文法の基礎
Swiftの文法の基礎としては、具体的に以下のような内容が挙げられます。これらを上記コースで学ぶことができます。基礎だけでアプリは作れませんが、アプリ開発のあらゆる場面で基礎が生きてきます。
- String, Integer, Float, Dobule, Boolean などのデータ型
- 配列（Array）, 辞書（Dictionary）, タプルなどのデータ構造
- +, -, *, /, % などを使った算術演算
- <, >, <=, >=, ==, != などを使った比較演算
- 変数（Variable）と定数（Constant）
- if/else文による条件分岐
- for, whileなどによるループ処理
- 関数（Function）
- クラス（Class）と構造体（Struct）
- プロパティ, メソッド（Method）


###Xcodeの使い方

XcodeはiOSやmacOSのアプリ開発では必須のApple製ツール（macOSのアプリ）です。このツールの扱い方、例えば、新規プロジェクトのファイルを開く手順、エラーが表示される場所とその見方、UIを確認する画面とコーディングする画面の紐付け方など、一連の必要な操作手順が説明されています。

ただ、Xcodeの扱いは、実際には習うより慣れろの部分が大きいかと思います。


### 挫けそうになる概念 Optional, Closure, Delegate

これらはSwift特有の概念のようです。特にAngela先生のコースの方で実演を交えて説明があります。

Swift界で著名なPaul Hudsonさんもちょくちょく、これらの概念は最初は難解かもしれない、と言っています。ですので、これらの理解がすぐにできなくても落ち込む必要はありません。


#####Optional
変数がnil（値を持たない状態）である場合に、そのデータ型がOptionalとなります。例えば、以下のような感じで、データ型のStringの後ろに？がついているのがOptionalです。

```swift
var name: String?
```
変数に何もデータが入っていないことがありますよ、という意味です。今、自分でこの説明文を書いていても意味が分かりにくいなと思います。私が最初に意味がわからないなと思った概念の一つです。


#####Closure
これはメソッドの引数として関数を指定する場合、その関数をClosureというようです。意味分かりにくいですね。メソッドがClassやStruct内の関数な訳なので、関数の引数が関数と言われて、混乱してしまうというわけですね。以下のような感じで、引数skillには関数が入りますよ、という意味で{}が記載され、その戻り値のデータ型がBoolになっています。

```swift
func createPerson(name: String, skill: {} -> Bool) {
・・・
}
```

#####Delegate
これはUIKitライブラリでアプリ開発を行う場合、理解は必須になると思いますが、私はきちんと理解しないままSwiftUIの方にシフトしてしまったので、うまく説明できません。やっているうちに感覚が身につくような気はします。


###データ保存
以下の内容はやや難しいですが、ただアプリのデータ保存には必須なので、そこをカバーしてくれているのはありがたいところです。ここをしっかりコーディングできればアプリを完全に終了しても、データがきちんと残ってくれます。
- UserDefaultsを使用したデバイス本体へのデータ保存
- CoreDataを使用したデバイス本体へのデータ保存


###App Stpre申請手順
作成したアプリをApp Storeに申請する時の手順も教えてくれます。私も過去2つアプリを作成、申請し、無事に審査を通りましたが、意外と申請前に細々とした作業が発生しますので、この情報は非常にありがたいです。


###その他
全体を通して、Nick先生のコースの方は、とにかく必要最小限の内容でアプリを完成できるまで導いてくれる印象です。まずは挫折せずにやり切ることが大事ですので、Nick先生についていくと良いと思います。

一方、Angela先生のコースだと、かなりボリュームが多く、全てをやり切るにはなかなか根性が問われます。しかしながら、例えば以下のような内容もカバーしているので、実際のプロの現場で活かせる技術としてぜひ学んでおきたいところです。
- サードパーティのAPIを利用した天気アプリ開発
- Firebaseを使用したチャットアプリ開発
- Realmを使用したデータベースの連携
- MVCデザインパターン
- CoreMLを使用した機械学習
- ARKit2を使用した拡張現実
- Git, GitHubの使用
- Computed Properties



#SwiftUIメインのプログラミング

まだ登場して数年のライブラリSwiftUIを使用したアプリ開発をするには、以下のコースが参考になります。

- SwiftUI - Learn How to Build Beautiful, Robust, Apps
https://www.udemy.com/course/swiftui-course/
講師：Nick先生
*2019年のコースです。

- SwiftUI 2.0 Apps on iPhone, iPad, Mac, Watch & TV
https://www.udemy.com/course/swiftui-apps-on-all-devices-iphone-ipad-mac-watch-tv/
講師：Nick先生

- SwiftUI - Build Amazing Apps - With much less code
https://www.udemy.com/course/swiftuicourse/
講師：Stephen先生

個人的に今はもっぱらSwiftUIでアプリ開発をしています。理由は、今後AppleがUIKitではなくSwiftUIの方をより推奨指定くだろうという推測と、根本的にSwiftUIによって、コーディング、特にユーザインターフェースの作成が格段に簡単になったからです。

UIKitのストーリーボードでのUI作成はかなり煩雑で、あっちをいじるとこっちがズレるみたいなことが多々あり、また複数種類のデバイスタイプ（iPhone、iPadそれぞれの世代でも画面サイズが異なる）に最適化したUIを作成するのは非常に骨の折れる作業でした。

SwiftUIでは、コーディングでも簡単にUIが組めますし、Canvasという新たなプレビュー画面に入れたいコンポーネントパーツをドラッグ&ドロップすることでも配置ができてしまいます。

それでは上記のUdemyコースで具体的に学習できる内容をみていきましょう。

###Swiftの基礎
Stephen先生のコースなら、Swiftの基本的なデータ型や文法など学習できます。Nick先生のSwiftUIコースはそこまでガッツリと基礎をカバーしていないので、もしこちらを受講される場合は、基礎固めのために書籍や他の動画など別のリソースを用意した方が良いかと思います。


###コンポーネントとそのカスタム
ボタン、スライダ、ステッパー、ピッカー、トグルスイッチ、テキスト、テキストフィールドなどなどユーザインターフェースに配置するコンポーネントについて、それぞれがどういう用途のものなのかを学ぶことができます。また、それらのコンポーネントの色、サイズ、透明度などを変えたり、影をつけたり、別のコンポーネントを重ねたり、様々なカスタマイズの方法を学ぶことができます。


###コンポーネントの配置
HStack、VStack、ZStackなど上述のコンポーネントとなるViewを縦に並べるのか、横に並べるのか、重ねるのかを指定できるViewです。これらの扱いやSpacerを利用したデザイン方法など、SwiftUIでの基本的なデザイン方法について学ぶことができます。リストやフォームといったViewを使って、UIKitのTableViewのように、複数データをリスト上に並べて表示する方法も学ぶことができます。


###データ保存方法
これはUIKitのコースでもありますが、同様にSwiftUIのコースでも学習可能です。特にCoreDataはやや難しい内容ですが、順を追って学習できます。
- UserDefaultsを使用したデバイス本体へのデータ保存
- CoreDataを使用したデバイス本体へのデータ保存


###プロパティラッパー
プロパティの冒頭に特定のキーワードをつけると、その変数の値をバインドできたり、複数ビューからその値を常に監視、更新できるようになります。具体的には、@Binding, @State, @ObservedObject, @EnvironmentObject などです。この内容についても上記Udemyコースでアプリを開発しながら学習することができます。

```swift
struct WorkingPlace {

    @EnvironmentObject person: Person

    var body: some View {
        ・・・
    }
}
struct Person: ObservableObject {
    @Published var name: String = taro
    @Published var age: Int = 18
}
```


ということで、SwiftUIの場合、UIをデザインしてデータをきちんと扱えれば、一つのアプリを世に出すことが可能になります。個人的に、本当にシンプルなこのSwiftUIはプログラミング学習をする上でもそのハードルをかなり下げたのではないかと思います。


#最後に
まだまだプログラミング初級の私が、この一年で挫折もせず、楽しくプログラミング学習を継続できたのは、Udemyコースが楽しかったから、というのがかなり大きいです。プログラミングをマイペースかつ着実に身に付けたいと考えている方にはぜひUdemyを利用してみていただきたいと思います。