Swift初心者がアプリを作れるようになるまで①

###開発環境
MacBook Air (2020)
macOS Big Sur Ver11.2.2
Xcode Ver12.4(12D4e)
##Swiftってなに？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662143/75e155cc-2f68-f402-9b0e-15a691901a6b.png)

Swiftはappleが開発したオープンソースの言語で、iOS、Mac、Apple TV、Apple Watch向けアプリの開発に用います。
>####Swift。誰もが圧倒的に優れたアプリを作れる、パワフルなオープンソースの言語です。
>iOS、Mac、Apple TV、Apple Watch向けのアプリを開発するためにAppleが作った、
強固で直感的なプログラミング言語。それがSwiftです。デベロッパのみなさんに、かつてないほどの
自由を届けられるように設計されています。Swiftは簡単に使えて、しかもオープンソースなので、
アイデアがある人なら誰でも、画期的なアプリを作ることができます。
([apple公式HP](https://www.apple.com/jp/swift/)より引用)

おおまかに言えばiPhoneのアプリ開発ができる言語ということですね。

iPhoneアプリの開発はかつてはObjective-Cがメインでしたが、Swift及びXcode(Swiftを扱えるエディタ)がリリースされてからはSwiftがメインとなっています。

理由としてはSwiftで作ったアプリは、一般的な検索アルゴリズムがこれまでよりも大幅に速く実行できるからなんです。その速さはなんとObjective-Cの最大2.6倍、Python2.7の最大8.4倍と驚きの速度。([apple公式HP](https://www.apple.com/jp/swift/)より引用)

ちなみにSwiftに日本語版は無いので、英語が苦手な方は翻訳を駆使して頑張ってください。

##Swiftを扱うのに必要なもの
Swiftでアプリを制作するには、以下の環境が必要となってきます。
・Mac
・Xcode
・AppleID
そう、これだけです。厳密にはリリースに際して**Appleディベロッパプログラム**への登録などが必要になるのですが、今回のテーマは**「Swift初心者がアプリを作れるようになるまで」**ということで、リリース方法はまた別で紹介しようと思います。ひとまず作るだけならMacとXcodeがあればOKです。(Xcodeが無い方は[こちら](https://apps.apple.com/jp/app/xcode/id497799835?mt=12)からインストールしてください)

####Windowsで開発できないの？
気になりますよね、これ。結論から言うと...可能です。ですが2021/3/6現在Swiftパッケージマネージャと、REPLやデバッグエクスペリエンスに使用するlldbの開発が完了しておらず、とりあえずはなにも考えずにMacでの開発をおすすめします。
どんどん情報は更新されているので、気になる方は「Swift Windows」で検索してみてください。

##Xcodeの設定を知ろう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662143/27b3cd67-aa3b-a40e-6560-a5fd9521f927.png)
Xcodeを開くとこのような画面が出てきます。それぞれの説明をすると、

|項目|説明|
|---|---|
|Create a new Xcode project|新規プロジェクト作成|
|Clone an existing project|既存プロジェクトのクローン|
|Open a project or file|既存プロジェクトのオープン|
...そのまんまですね。
ちなみに下のチェックボックス「Show this window when Xcode launches」のチェックを外すと次回からこのメニュー画面が表示されなくなるので、ひとまず触らなくてOkです。

今回は新規作成なのでもちろん「Create a new Xcode project」(赤枠)を選択します。
![スクリーンショット 2021-03-08 14.36.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662143/f6febd5d-9fda-4b76-0466-a8e08d2d138a.png)
するとこちらの画面になるはずなので、iOSタブの「App」を選択します。
他にもたくさんアイコンが並んでいると思いますが、これらは最初に組まれる雛形が違うだけでいくらでもカスタマイズができるので、あまり難しく考えずに自身が作りたいものに最も近いものを選べばいいと思います。
今回はひとまず「App」で進めていきます。
![スクリーンショット 2021-03-08 14.41.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662143/c7eb80d7-6d96-e05f-cc03-35284276ab50.png)
すると次はこちらの画面になるので、「Product Name」に今回のプロダクト名を入力します。今回はとりあえず「Sample」としておきます。
以下、他の項目については以下のような感じです。

|項目|説明|
|---|---|
|Product Name|プロダクト名、アプリ名|
|Team|プロダクトを作成する団体名(もしくは個人名)|
|Organization Identifier|プロダクトを作成する団体のID(もしくは個人)|
|Bundle Identifier|今回のID(Organization Identifier + . + Product Name)|
|Interface|実装方法の設定(SwiftUI, StoryBoardから選択)|
|Life Cycle|ライフサイクルの選択|
|Languages|使用するプログラミング言語(Swift、 Objective-Cから選択)|
上半分に関しては自身で設定すれば良いのですが、下部に関しては少し知識が必要かもしれません。
####InterFaceについて
Swiftのインターフェイスは**SwiftUI, StoryBoard**の2つとなっていますが、これらの違いはコードでUIを実装するか、GUIでUIを実装するか。といったところです。
以前までは**StoryBoard, Xib, UIKit**の3つが存在していたのですが、iOS13にてSwiftUIが追加されました。
どれを選択するかは一概には言えず、アプリの特徴や開発者の慣れなどで考えるのがいいと思います。
ひとまず今回はサンプルを動かすだけなので、何も考えずにSwiftUIを選択します。

####Life Cycleについて
Life Cycle(ライフサイクル)ってなんだ...わかります。その気持ち。知ってた方は飛ばしてちゃってください。
私もSwift学習を開始してから知ったので、知らなくても全く問題ないです。
ライフサイクルはアプリ内の状態遷移を表す言葉です。...どゆこと。
実際にiPhoneでアプリを使用するときを想像してみてください。
1.アイコンをタップする
2.画面が起動画面に切り替わる
3.画面がアプリ画面に切り替わる
4.画面のみ閉じるとアプリがバックグラウンドへ
5.再度起動すると前回使用画面から起動
6.タスクキルでアプリ終了
こういった一連の流れでアプリ側が保持している状態をライフサイクルといいます。
だいぶ説明を省いているので詳しく知りたい方は「アプリ ライフサイクル」で検索してみてください。

今回は「SwiftUI App」でOKです。

####Languageについて
SwiftとObjectiv-Cからの選択です。（上記InterFaceでSwiftUIを選択している場合Swiftのみ選択可能）
こちらは使用言語についてです。
SwiftとObjective-Cの選択に関しては、一概には言えませんがSwiftの方が新しいことや、Swiftの方がAppleがSwiftを推奨していることからざっくりとSwiftの方が良いとされています。
ちゃんとした理由を知りたい方はご自身で調べることをおすすめします。

####下部の選択項目について
上記の項目の下に写真のような選択項目があるのですが、これらに関しては一応軽い説明を載せますが、今回は全て選択しなくて大丈夫です。

#####Use Core Data / Host in CloudKit
「Use Core Data」には名前の通りCore Dataというものを使用するかどうかの選択です。
Core DataというのはざっくりXcode上からデータベース構造の設定を行えたり、使用するデータの保存、削除、更新を行うプログラムを書くための仕組みのことです。
こちらに関しても詳細はご自身で調べてください。（ちゃんと説明するとそれだけで1記事分になってしまうので...）
「Host in CloudKit」に関してですが、これはCloudKitを理解することから始まります。
簡単に言えばiCloudにデータを保存できるサービスです。[AppleサポートのCloudKitのページ](https://support.apple.com/ja-jp/guide/security/sec3d52c0374/web)を見てみると、CloudKitを使用するとキー値データ、構造化データ、および各種アセットをiCloudに保存できるようです。そして公開データベースと非公開データベースの両方に対応しているので、プライベートなデータ、パブリックなデータ両方扱えることになります。例えばAppleIDを使用してプライベートなデータを管理することも可能です。これはiOS標準アプリの「メモ」などにも使用されており、iPhoneでメモに何か保存すると、AppleIDで同期されているmacなどのメモにも表示されるようになります。これはCloudKitによって管理されていたんです。


#####Include Tests
続いて「Include Tests」についてです。これに関しては単純で、チェックを入れることでテスト用のターゲットとテスト用のコードが生成されます。なのでとりあえずはチェックを入れないで大丈夫です。

**これですべての設定を終えたので、右下のNextボタンを押して次に進みます。**


###まとめ
ひとまず今回はここまでです。
xCodeは日本語版が無いということで設定内容を理解することだけで一苦労ですね...。
次回からはサンプルコードを使用してエディター内の項目解説に移るので、更新しましたらぜひ「Swift初心者がアプリを作れるようになるまで②」もご覧ください。最後までお読みいただきありがとうございました！