CocoaPodsでSwiftLintを導入する

#はじめに
コードの量が大きくなる前にSwiftLintを導入しようと思ったので、その時の導入の記録

#環境
Xcode9.2
Swift4
cocoaPods 1.2.0

#podfileの編集

```
vi podfile
```

### Podfileの中身の例
これはプロジェクトネームがTodolist-firebaseなので５行目がこのようになっていますが、自分の作ったプロジェクトネームをここに入れて下さい

```
#Uncomment the next line to define a global platform for your project
platform :ios, '10.0'

target 'Todolist-firebase' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  pod 'SwiftLint'
end
```

## podでライブラリをインストール
podfileを参照して、その中に入ってるライブラリを含めてxcworkspaceを作ります

```
$pod install
```

## プロジェクトファイルを開く
cocoaPodsを使う場合は.xcodeprojと間違えないように注意

```
$open (プロジェクトネーム).xcworkspace
例
$open Todolist-firebase.xcworkspace
```

## Xcode内の設定
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/176479/de87105e-a4e0-49e1-d3f9-ca964d53cf0a.png)
![スクリーンショット 2018-05-11 17.48.05.png](https://qiita-image-store.s3.amazonaws.com/0/176479/fddf0b0d-eedc-3480-5827-d3742cf67574.png)

### cocoaPods導入時の注意点
下の図のようにRunScriptの項目を開き、黒いウィンドウに下記を記入するのですがcocoaPodsの場合は内容が少し違います
公式ドキュメントのXcodeの項目によると
<img width="940" alt="screenshot 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/176479/77e40cbe-86ed-f1fb-69b3-0de5fb897c8d.png">
赤枠で囲われているところに着目すると,このように書き換える必要があることがわかります。

```
if which "${PODS_ROOT}/SwiftLint/swiftlint" >/dev/null; then
${PODS_ROOT}/SwiftLint/swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
```

##　とりあえず走らせてみる
⌘＋Bで実行できる
AppDelegateのファイル内のコメントアウトのところですらエラーが出てくるようになってしまった
いろんなライブラリを入れていたためか、エラーが出てくるように

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/176479/cf716c6a-3e40-851d-4b66-7ff0a2c9f09a.png)


## SwiftLintを走らせないようにするファイルや細かいルールの設定をする
公式ドキュメントより
<img width="917" alt="screenshot.png" src="https://qiita-image-store.s3.amazonaws.com/0/176479/722412e3-a986-3a72-1397-32a28670f467.png">

`.swiftLint.yml`ファイル内に細かいルールを設定するとエラーを吐かないようになるとのことです

```
disabled_rules：デフォルトの有効なセットからルールを無効にします。
opt_in_rules：デフォルトのセットからルールを有効にします。
whitelist_rules：ホワイトリストとして動作し、このリストで指定されたルールだけが有効になります。 disabled_rulesまたはopt_in_rulesと一緒に指定することはできません。
```

とりあえず、今回は一行あたりの文字数制限とpodで入れたライブラリたちが引っかからないようにしたいので `.swiftLint.yml`を編集します

```
$vi .swiftLint.yml
```

下記の参考文献から例をお借りしました

```
# 実行から除外するルール
disabled_rules:
# テストコード、Pod等のライブラリは対象外
excluded:
- Pods/
- Podfile
- Podfile.lock

# 1行あたりの文字数制限
line_length: 300
```

## 再び実行しました
⌘+Bで実行し赤色のエラーが出ないようになりました。

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/176479/464363f2-16c9-2702-b51a-d76f8980f4a0.png)
黄色い警告を見てみると

行末に空白があるという警句や
```
Trailing Whitespace Violation: Lines should not have trailing whitespace. (trailing_whitespace)
```

関数の長さが長すぎという警告
```
Function Body Length Violation: Function body should span 40 lines or less excluding comments and whitespace: currently spans 49 lines (function_body_length)
```

きれいなSwiftを書くことを意識できますね




#参考文献
[公式ドキュメント](https://github.com/realm/SwiftLint)
[【SwiftLint】CocoaPodsでSwiftLintを導入する](https://qiita.com/s_emoto/items/2bddbd1106de4fcd70af)
[Swiftの静的解析を行うためにSwiftLintをインストールしてみた](https://qiita.com/ht40/items/051f66557fd6dffa95ec)
[swiftlint 最新版(0.18.1) の設定ファイル(.swiftlint.yml)のサンプル
](https://qiita.com/rd0501/items/ceabe756c419ec082030#_reference-079b137ee3496b3e81ea)