【Swift】MintでSwiftGenを導入する

# はじめに
SwiftGenを初めて使ってみたので忘れないように記録しておきます。

# SwiftGenとは
公式からはこのように説明されていました
>SwiftGen is a tool to automatically generate Swift code for resources of your projects (like images, localised strings, etc), to make them type-safe to use.

英語は苦手なので日本語も載せておきます
>SwiftGenは、プロジェクトのリソース（画像やローカライズされた文字列など）に対してSwiftコードを自動生成し、タイプセーフで利用できるようにするツールです。

***どういうことか？***
通常、画像を表示させようと思ったら以下のようになります。
```swift
Image("share")
```
しかし、SwiftGenを使用すれば以下のように書くことができます。
```swift
Image(Asset.share.name)
```

これは便利ですね

# 今回使用するサンプルプロジェクト
![スクリーンショット 2022-10-14 20.30.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e2a0a910-e5ec-14fe-6961-86b09f92c098.png)
![スクリーンショット 2022-10-14 20.32.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4eff38a1-621a-ccba-446a-79a6c5eaccd5.png)


# やりかた
### Mintfile
```:ターミナル
cd プロジェクトフォルダ
```
Mintfileを作成します
```:ターミナル
touch Mintfile
```
Mintfileを開きます
```:ターミナル
open Mintfile
```
MintfileにSwiftGenを記載します
```:Mintfile
SwiftGen/SwiftGen
```
SwiftGenをインストールします
```:ターミナル
mint bootstrap
```

### swiftgen.yml
swiftgen.ymlを作成します
```:ターミナル
touch swiftgen.yml
```
swiftgen.ymlを開きます
```:ターミナル
open swiftgen.yml
```
swiftgen.ymlを編集します
```swiftgen.yml
xcassets:
  inputs:
    # あなたのプロジェクトのパスに変えてください
    - swiftgen-mint-sample/Assets.xcassets
  outputs:
    - templateName: swift5
      # あなたのプロジェクトのパスに変えてください
      output: swiftgen-mint-sample/Assets.swift
```

### Run Script
① プロジェクトを選択します
② ターゲットを選択します
③ 「Build Phases」を選択します
④ 「+」を押します
⑤ 「New Run Script Phase」を押します
![スクリーンショット 2022-10-14 20.12.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6cd07340-5d2b-9a60-840f-3d45d84fdd38.png)

追加した「Run Script」にコードを追加します
![スクリーンショット 2022-10-14 20.16.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5f6e95d8-06ae-f7df-d54d-011a6d01cca4.png)

```shell
export PATH=/opt/homebrew/bin:$PATH

if which mint >/dev/null; then
    # SwiftGen
    xcrun --sdk macosx mint run swiftgen
else 
    echo 'warning: mint not installed.'
fi
```

### ビルド
シュミレーターでも実機でも良いのでビルドします
![スクリーンショット 2022-10-14 20.33.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/0eec6cb3-ba50-e38f-6f36-d6a7becd64d1.png)

### 生成されたファイルをXcodeで読み込む
生成されたファイルがあるフォルダを選択します
![スクリーンショット 2022-10-14 20.35.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/2f7306ee-4323-cc54-d87b-b88828566b0b.png)

右クリックをして「Add File to “プロジェクト名”...」を選択します
![スクリーンショット 2022-10-14 20.36.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/50a1d39a-5411-8e1f-d42d-78f5db5c4529.png)

生成された「Assets.swift」を選択して、「Add」を押します
![スクリーンショット 2022-10-14 20.38.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3f412b27-45b1-3d4f-6ebd-eb50958966c9.png)

このようになっていれば完成です
![スクリーンショット 2022-10-14 20.39.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c58ffc85-9921-6bb6-7dca-9fbb0d4ba1e1.png)

### 使い方
![スクリーンショット 2022-10-14 20.40.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/42409c3f-ef37-60a0-9b90-7b0a10fbf3b7.png)

```swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        Image(Asset.share.name)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
```

# おわり
これから積極的に使っていきたいです！