最近寒いですが、うちの猫はこたつではなく僕の作業用の椅子やホットカーペットで丸くなってて家での肩身が狭いかっくん(@fromkk)です。
2019年12月3日に開催された集まれもうやんカレーとSwift好き!Swift愛好会 vol47@GMOペパボにて登壇してきたので簡単に登壇内容を紹介します。
スライド
概要
元々Bitrise上でDangerを実行し、cspellというツールを実行していました。
しかし、Dangerの実行がGitHub上にPull Requestを作成して、ユニットテストが実施された後だったので気付くまでのタイムラグが大きい事が気になっていました。
Xcode上で警告を表示する方法がわかったのでスペルチェックの方法を模索し、CLIツールとして公開しました。
SpellChecker
インストール方法は、
git clone git@github.com:fromkk/SpellChecker.git
cd ./SpellChecker
make install
で /usr/local/bin/SpellChecker
に配置されます。
使い方は、
/usr/local/bin/SpellChecker -- /path/to/FileA.swift /path/to/FileB.swift
の様な形で利用することができます。
実際に叩いてみると
SpellChecker -- Typo/ViewController.swift /Typo/Typo/ViewController.swift:5:16: warning: Is `kazuya` typo? (SpellChecker) /Typo/Typo/ViewController.swift:5:23: warning: Is `ueoka` typo? (SpellChecker) /Typo/Typo/ViewController.swift:6:22: warning: Is `kazuya` typo? (SpellChecker) /Typo/Typo/ViewController.swift:6:29: warning: Is `ueoka` typo? (SpellChecker) /Typo/Typo/ViewController.swift:15:9: warning: Maybe `heello` is typo of `hello`. (SpellChecker) /Typo/Typo/ViewController.swift:18:10: warning: Maybe `heello` is typo of `hello`. (SpellChecker) /Typo/Typo/ViewController.swift:19:16: warning: Maybe `woorld` is typo of `world`. (SpellChecker)
この様に出力されます。
無視したい単語がある場合はYAMLファイルを作成して -yml
オプションで指定すると無視してくれます。
例)
/usr/local/bin/SpellChecker -yml /path/to/spell-checker.yml -- /path/to/FileA.swift /path/to/FileB.swift
YAMLファイルは
whiteList: - ueoka - kazuya - fromkk
のフォーマットのみ受け付けています。
XcodeのRun Scriptに
if ! [ -f /usr/local/bin/SpellChecker ]; then echo "SpellChecker not installed" exit 0 fi git_path=/usr/local/bin/git files=$($git_path diff --diff-filter=d --name-only -- "*.swift" "*.h" "*.m") if (test -z $files) || (test ${#files[@]} -eq 0); then echo "no files changed." exit 0 fi options="" for file in $files do options="$options $SRCROOT/$file" done /usr/local/bin/SpellChecker -yml $SRCROOT/spell-checker.yml -- $options
などと書いておくとXcodeでビルドすぐ毎にGitで差分のあるファイルをチェックする事が出来ます。
実際にXcode上で利用してみると以下の様に警告が表示されます。
まとめ
普段開発していく中で、Dangerのcspellも便利に活用はしていましたし、今後も活用を続けるとは思います。
しかし、問題にはなるべく早く気付きたいのでCLIツールを作成してXcodeでビルドしたら警告が表示されるアプローチを取りました。
ツールもまだ出来たばかりですし、実際に運用もこれからなので、何か不具合があればissueを起票したり、Pull Requestを送って頂ければと思います。
積極採用中!!
子育て家族アプリFammを運営するTimers inc.では、現在エンジニアを積極採用中!
急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください!
採用HP: http://timers-inc.com/engineerings