Xcodeに付属する swift
コマンドを使い、『詳解 Swift 改訂版』のサンプルコードを写経したり、書き換えて動作を確認したりするGitリポジトリを作った。
せっかくGitHubにホスティングしているので、学習しながら継続的にSwiftLintで好ましくない書き方を自動検知できると良いのではないかと考えた。
最低限で必要になるのは次のファイルである。
.
|-- .swiftlint.yml
|-- .travis.yml
`-- install_swiftlint.sh
Travis CIのビルド環境へSwiftLintを導入する最速の手段は、リリース済みpkgファイルを取得し、OS Xの installer
コマンドでインストールする方法である。
よって、次のようなインストールスクリプト install_swiftlint.sh
を準備する。スクリプトファイルには実行権限を付与するようにし、スクリプト中の変数 SWIFTLINT_PKG_URL
は都度でSwiftLintの最新リリースに変えると良い。
pkgファイルが取得できなかった時は代替手段としてソースコードをcloneしてコンパイルさせるが、時間がかかる。
#!/bin/bash
# Installs the SwiftLint package.
# Tries to get the precompiled .pkg file from Github, but if that
# fails just recompiles from source.
set -e
SWIFTLINT_PKG_PATH="/tmp/SwiftLint.pkg"
SWIFTLINT_PKG_URL="https://github.com/realm/SwiftLint/releases/download/0.10.0/SwiftLint.pkg"
wget --output-document=$SWIFTLINT_PKG_PATH $SWIFTLINT_PKG_URL
if [ -f $SWIFTLINT_PKG_PATH ]; then
echo "SwiftLint package exists! Installing it..."
sudo installer -pkg $SWIFTLINT_PKG_PATH -target /
else
echo "SwiftLint package doesn't exist. Compiling from source..." &&
git clone https://github.com/realm/SwiftLint.git /tmp/SwiftLint &&
cd /tmp/SwiftLint &&
git submodule update --init --recursive &&
sudo make install
fi
もしpkgファイル経由比でおよそ3倍のインストールに時間を許容できるなら、インストールスクリプトでは単にHomebrew経由で導入する方法もある。メリットとしては、ソースコード取得からのコンパイルと同様に、常に最新のリリース版が利用できる。
# 最新リリースのビルド済みバイナリからインストール
$ brew update && brew install swiftlint
# 最新のソースコードからコンパイルしてインストール
$ brew update && brew install --HEAD swiftlint
『詳解 Swift 改訂版』に登場するサンプルコードでは、変数名に1文字の名前やユニコード文字列が多用されており、SwiftLintでエラーとなってしまうため、回避する設定を .swiftlint.yml
として追加した。
disabled_rules:
- variable_name
ここまで準備した内容で git push
される度にSwiftLintでチェックが走るよう、Travis CI側のWeb UIでリポジトリ連携を設定し .travis.yml
を次のような内容で追加する。
language: objective-c
osx_image: xcode7.3
install:
- ./install_swiftlint.sh
script:
- swiftlint
Travis CIでSwiftLintの結果が継続的に確認できるようになったら、好ましくないコードスタイルを都度修正し、常にチェック結果がグリーンを保つようにする。