【Swift】SwiftFormatをSwiftPMで管理する

# はじめに
私は今までMintでSwiftFormatをインストールしていました。

https://qiita.com/SNQ-2001/items/4ad7600e1bc9d90c839a

SwiftFormatのREADMEを見てたらSwiftPMでも管理できるっぽいのでやってみました。

https://github.com/nicklockwood/SwiftFormat#xcode-build-phase

「spm-swiftformat」というプロジェクトを作成しました。
ここにSwiftFormatをいれてみます。
![スクリーンショット 2023-01-12 20.30.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7853a630-94ab-b9dd-cb26-fccde6e26feb.png)

# やりかた
### 各種ファイルを設定
spm-swiftformatに移動します。
```:ターミナル
cd /Users/miyamototaishin/Desktop/spm-swiftformat
```
![スクリーンショット 2023-01-12 20.32.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/afb5a3ff-a7a3-4c91-f5fa-a94832d1f347.png)

BuildToolsというフォルダを作成します。
```:ターミナル
mkdir BuildTools
```
![スクリーンショット 2023-01-12 20.34.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c7530de9-7d78-2fb3-9f8b-f5b336a93ed2.png)

```:ターミナル
cd BuildTools
```
![スクリーンショット 2023-01-12 20.34.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f70c3ce2-a29b-7476-1b34-35d05dd9632a.png)

Package.swiftを作成します。
```:ターミナル
touch Package.swift
```
![スクリーンショット 2023-01-12 20.35.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9d78c4c1-e9b3-1506-2605-9ebf532c5d80.png)

`Empty.swift`を作成します。
```:ターミナル
touch Empty.swift
```
![スクリーンショット 2023-01-12 20.37.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1d875d67-24af-1dc7-b6d8-1b2e097d55df.png)

`Package.swift`を開きます。
```:ターミナル
open Package.swift
```
![スクリーンショット 2023-01-12 20.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3047bd6a-f0b2-774a-83e9-566342ad0b8d.png)

`Package.swift`に以下をコピペします。
```swift:Package.swift
// swift-tools-version: 5.6
import PackageDescription

let package = Package(
    name: "BuildTools",
    dependencies: [
        .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.50.7")
    ],
    targets: [.target(name: "BuildTools", path: "")]
)
```

ディレクトリを１つ上の階層に移動します。
```:ターミナル
cd ..
```
![スクリーンショット 2023-01-12 20.55.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ca3230f7-b6c8-c074-9a30-d6c06eb82e62.png)

`.swiftformat`を作成します。
```:ターミナル
touch .swiftformat
```
![スクリーンショット 2023-01-12 20.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e06e3e1f-8679-7067-f87c-0ab0f41cf2a5.png)

```:ターミナル
open .swiftformat
```
![スクリーンショット 2023-01-12 20.55.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4d9b606b-e8e1-90c3-4d34-cefcd09759c1.png)

.swiftformatにルールを設定します
(詳細は[こちら](https://github.com/nicklockwood/SwiftFormat/blob/master/Rules.md)をみてください)
```.swiftformat
--swiftversion 5.7

--commas inline
```

### Run Scriptを作成
プロジェクトをダブルタップで開きます。
![スクリーンショット 2023-01-12 20.43.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f65766fd-f5ac-2112-e4aa-f3f5a50a2c86.png)

① プロジェクトを選択します
② ターゲットを選択します
③ 「Build Phases」を選択します
④ 「+」を選択します
![スクリーンショット 2023-01-12 20.47.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/63e4fb73-a79b-7924-541c-9bd3195a5400.png)
⑤ 「New Run Script Phase」を選択します
![スクリーンショット 2023-01-12 20.50.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c0f00efc-91af-182b-1e8a-56b809b14462.png)

追加された「Run Script」に以下のスクリプトをコピペします。
```sh
cd BuildTools

xcrun --sdk macosx swift build -c release
```
![スクリーンショット 2023-01-15 20.47.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1c06f195-e643-c73b-79d5-b3acd3f5ef23.png)

先ほどと同じ手順でRun Scriptを作成します。
作成したRun Scriptに以下のスクリプトをコピペします。
```sh
cd BuildTools

xcrun --sdk macosx swift build -c release \
--package-path .build/checkouts/SwiftFormat \
--product swiftformat

.build/checkouts/SwiftFormat/.build/release/swiftformat $SRCROOT --config $SRCROOT/.swiftformat --swiftversion 5.7
```
![スクリーンショット 2023-01-16 20.12.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/176c63d1-f6d2-b20f-e130-c285b10e68fa.png)

### ビルド
こんな感じでメチャクチャにしたコードが元通りになれば成功です。
![スクリーンショット 2023-01-12 21.00.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f428b63e-af0d-f6f8-0c9d-2a3c68791cdf.png)

ビルドします。
![スクリーンショット 2023-01-12 21.00.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8f8683e3-5129-1252-5d25-5ede37fc32df.png)

戻りました！！
![スクリーンショット 2023-01-12 21.10.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/afe15699-6a6e-a007-10cf-6c7ca7ca600b.png)

# おわり
他のCLIツールも同じ感じでできるっぽい？
次はSwiftLintでやってみたいです。