【Swift】Main.Storyboardを消して開発する

## はじめに

どうも、プログラミング未経験で学習中の**はるさん**です。
今回は**Main.Storyboardを消して開発する**について説明していきたいと思います。

UIKitを使ったアプリ開発において、その特徴の一つがStoryboardを使ったレイアウト設計です。
しかし、これが実務レベルにおいては結構曲者であると言うのが現役エンジニアさん達の見解のようです。
曰く、Git&GitHubを用いたチーム開発においてはMain.Storyboardを使用すると
コンフリクトが発生しやすく、その解消に余計な手間が発生してしまうようなのです。

よって個人の練習プロジェクト、個人開発アプリにおいてはそのまま
Main.Storyboardを使用しても問題はないでしょう。
しかしポートフォリオとして提出する場合やこれから就職して現場でコーディングを行う方は
習得必須の技術のようです。
### 記事の対象者
- Swift学習を初めたばかりの方
- iOSエンジニアとして企業で就職したい方

### 記事を執筆時点での筆者の環境
 - Xcode 14.3.1
- Swift  5.8.1 
- iOS 16.4

## 1. Main.StoryboardとviewControllerの削除
Move to trashで削除しましょう。
![スクリーンショット 2023-07-12 17.09.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/2571b8f8-5360-d0ec-f753-2d626bdfc051.png)
![スクリーンショット 2023-07-12 17.08.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/367958fb-b9a4-f04d-ba65-b3047d55d2b0.png)


## 2. 新しくstoryboardとviewControllerを作成
今回はHomeView.storyboardとHomeViewController.swiftを作成しました。
![スクリーンショット 2023-07-12 17.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/a7c2d3af-0afd-48f3-1594-027d5dfaaa91.png)

分かりやすくするためにUILabelを配置しています。
![スクリーンショット 2023-07-12 17.22.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/89566c6d-9afc-7a6c-aa6e-695c21b4849c.png)

また忘れがちですので以下の設定も行いましょう
- HomeView.storyboardのCustomClassの設定
- Storyboard IDの設定
- Is Initial View Controllerのチェックを入れる
![スクリーンショット 2023-07-12 17.12.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/5ac9c9ad-db2b-a87b-9201-48b59665279c.png)
![スクリーンショット 2023-07-12 17.12.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/72f62987-6ddd-20ac-5062-2015e2abb352.png)

## 3. Main storyboard file base nameからMainを削除
プロジェクト名のファイル＞＞Info>> Main storyboard file base nameのMainを
マイナスボタンをクリックして削除しましょう。

![スクリーンショット 2023-07-12 17.29.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/6c6c3f19-80d5-9a2b-69c2-e9de5d438c46.png)

:::note warn
ちなみに次に説明するInfo.plistからMainを削除を先にしてから
Main storyboard file base nameからMainを削除しても
何故かMain storyboard file base nameが復活してしまいます。
**必ずMain storyboard file base nameからMainを削除を先に行いましょう**
:::

## 4. Info.plistからMainを削除する
Info.plist >> Storyboard Nameのマイナスマークをクリックして削除します
![スクリーンショット 2023-07-12 17.30.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/e7ec81dd-97a3-ce76-69da-3af2a3fa5432.png)

## 5. SceneDelegateで起動経路を確保する
このままだとアプリを起動しても最初に表示する画面が決まっていない状態です。
SceneDelegateで最初に表示する画面を指定します。以下のように書き換えてください。
![スクリーンショット 2023-07-12 18.05.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058346/927905dd-177c-eb34-77a9-b86b96716ddc.png)


```swift
import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // guard let _　をwindowSceneに書き換え
        guard let windowScene = (scene as? UIWindowScene) else { return }
        //Windowをインスタンス化
        window = UIWindow(windowScene: windowScene)
        //rootViewControllerにStoryboardをHomeViewに指定して初期ビューコントローラーをインスタンス化
        window?.rootViewController = UIStoryboard(name: "HomeView", bundle: nil).instantiateInitialViewController()
        //ウィンドウ表示を実行
        window?.makeKeyAndVisible()
    }
```

ここまできたらシミュレーターを実行してみましょう。
正しく表示されれば完了です。


## 終わりに
いかがだったでしょうか。
少々手間ではあるものの、上記の手順を行うとチーム開発でコフリクトに見舞われる危険が抑えられると
思います。実務に入る前の初学者だとなかなか実感はできないと思いますが、この知識を知っているか
否かで実務での混乱も抑えられると思います。是非試してみてください。

ちなみにさらに上級者、または現場によってはそもそもStoryboardを使わない開発も行われるようです。
その際はSceneDelegateの記述方法も少々違います。
詳細は以下の参考記事「Storyboardを使わないiOSアプリ開発」をご覧ください。

この記事が初学者の方々の学習において、少しでもお役にたてれば幸いです。

## 参考記事


https://qiita.com/koenuma\_eri/items/be2180389a6412cc0fcd


https://qiita.com/koenuma\_eri/items/be2180389a6412cc0fcd