SwiftLintの導入・設定方法のまとめ

## 環境
Xcode 12.4
macOS BigSur 11.2.1

## 前提
Homebrewがインストールされていることを前提として手順を紹介します。
導入されていない方はこちらから → [【Homebrew - 公式日本語サイト】](https://brew.sh/index_ja)

## 手順
1. SwiftLintをローカルにインストール
2. Xcodeでビルド設定を追加
3. SwiftLintの設定ファイルを作成
4. SwiftLintの設定ファイルを編集
5. 自動修正を有効化(任意)
6. ビルドして確認

### 1. SwiftLintをローカルにインストール
`brew install swiftlint`をターミナルで実行するだけ。

### 2. Xcodeでビルド設定を追加
プロジェクトのビルド設定を開き、
`TARGETS` → `Build Phases` → 左上の`+`アイコンをクリック
 → `New Run Script Phase`を選択して`Run Script`の項目を追加
※  `Run Script`の項目名を一度クリックすると変更できるので、`Run SwiftLint`とか適切な名前に変更しておくといいです。

→ 追加した項目内に以下のコードを記述

```shell

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "SwiftLint does not exist, download from https://github.com/realm/SwiftLint"
fi
```

| Run Scriptの追加 | コード記述後 |
|---|---|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406531/77d5ee7c-d109-7ee3-4a02-2d825d51821d.png" width="340px">|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406531/da7fd533-8df3-b428-62e1-ce653807cf71.png" width="340px">|

### 3. SwiftLintの設定ファイルを作成
`.swiftlint.yml`ファイルを`.xcodeproj`と同じ階層に作成。
![fileyml.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406531/bc76f705-a40a-5ecc-2ec1-b905bd0927b6.png)

### 4. SwiftLintの設定ファイルを編集
`.swiftlint.yml`内を編集することで適用するルールを変更できます。
参考:
[【SwiftLintFramework Docs - 公式ドキュメント】](https://realm.github.io/SwiftLint/index.html)
[【SwiftLintの全ルール一覧(Swift 4.2版) -Qiita】](https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed)

<details><summary>参考までに自分の設定ファイルはこちら</summary><div>

[【swiftlint 0.18.1 の設定ファイル(.swiftlint.yml)のサンプル -Qiita】](https://qiita.com/rd0501/items/ceabe756c419ec082030)をベースにさせていただきました。

```yaml

# SwiftLintFramework Docs: https://realm.github.io/SwiftLint/index.html
# ルール追加時の参考: https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed
# ルール引用元: https://qiita.com/rd0501/items/ceabe756c419ec082030

# デフォルト有効のルールのうち、無効にするもの
disabled_rules:
# コードの記載のない改行を許可するため
- trailing_whitespace
# force_castは場合によっては使用するため
- force_cast
# closureが返す値を明示しておきたい場合があるため
- unused_closure_parameter

# デフォルト無効のルールのうち、有効にするもの
opt_in_rules:
- closure_end_indentation
- closure_spacing
- collection_alignment
- empty_count
- explicit_self
- explicit_init
- fatal_error_message
- first_where
- force_unwrapping
- implicitly_unwrapped_optional
- missing_docs
- nimble_operator
- number_separator
- operator_usage_whitespace
- overridden_super_call
- private_outlet
- prohibited_super_call
- redundant_nil_coalescing
- sorted_imports

# 追加したOSSライブラリは対象に含めない
excluded:
- Pods/
- Carthage/

# 1行あたりの文字数制限変更
line_length: 120

# 変数名に関する制約
identifier_name:
  allowed_symbols: "_"
  min_length: 2
  excluded:
    - i
    - j
    - n
    - x
    - y
```

</div></details>

### 5. 自動修正の有効化(任意)
手順2で設定したスクリプトに`swiftlint autocorrect --format`を追加することで自動修正を有効化できます。
コード量が多いプロジェクトだと差分が一気に出るのでお好みで有効化してください。
参考: [【SwiftLintの運用ノウハウ - Qiita】](https://qiita.com/shtnkgm/items/6dd756aa14926736c6f5)

```shell

if which swiftlint >/dev/null; then
  swiftlint autocorrect --format # 自動修正の有効化
  swiftlint
else
  echo "SwiftLint does not exist, download from https://github.com/realm/SwiftLint"
fi
```

### 6. ビルドして有効になっているかを確認
有効になっていればこんな感じで色々警告がでるようになってるはず。

![tes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406531/ca683477-1faa-5fd9-49a5-bc39beda4b32.png)

## 参考記事まとめ
[【Homebrew - 公式日本語サイト】](https://brew.sh/index_ja)
[【SwiftLintFramework Docs - 公式ドキュメント】](https://realm.github.io/SwiftLint/index.html)
[【SwiftLintの全ルール一覧(Swift 4.2版) - Qiita】](https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed)
[【swiftlint 0.18.1 の設定ファイル(.swiftlint.yml)のサンプル - Qiita】](https://qiita.com/rd0501/items/ceabe756c419ec082030)
[【SwiftLintの運用ノウハウ - Qiita】](https://qiita.com/shtnkgm/items/6dd756aa14926736c6f5)
[【SwiftLint 導入 - Qiita】](https://qiita.com/OSR108/items/4b23b13bd23feada1921)

## 補足
M1 Mac時のエラー参考
[Swiftlint can't be found on Apple Silicon xcode -Stackoverflow
](https://stackoverflow.com/questions/65991508/swiftlint-cant-be-found-on-apple-silicon-xcode)