Upgrade to Pro — share decks privately, control downloads, hide ads and more …

チーム開発にSwiftLintを導入してみた・詳細版

ikamon
August 29, 2016

 チーム開発にSwiftLintを導入してみた・詳細版

2016/08/29に開催されたAKIBA.swift×Swift愛好会 スペシャルコラボの発表資料です

ikamon

August 29, 2016
Tweet

Other Decks in Programming

Transcript

  1. 宗教戦争勃発 2015 年10 月某日: メンバ増えたし、SwiftLint 入れてみよう! と思ったら、 ルー ルのカスタムできない! ので、

    諦める 2016 年5 月某日: ワー クフロー に関するKPT ミー ティングで出た Probrem に 「Swift Coding Style が無い」! と言われる ただ、 コー ディング規約とかいうドキュメントはまだ増やし たくない
  2. SwiftLint 導入 github.com/realm/SwiftLint git submodule でもインストー ルできる Build Phases に

    swiftlint 実行用スクリプトを追加 ※ 画像は本家から拝借
  3. 怒られたルー ルとその理由 (force_cast): (variable_name): 3 から40 文字以内にしろ (func 内の小さいスコー プでしか

    使わない変数は対象外) _ などの英数文字以外は禁止 小文字から始めろ (type_name): struct は大文字から始まる名前をつけろ (line_length): 1 行につき100 文字以内にしろ (function_body_length): 関数は100 行以下にしろ (control_statement): if 文などの条件式にカッコをつけるな i f ( t r u e ) { -> i f t r u e { (cyclomatic_complexity): i f / e l s e i f の繰り返しが多すぎ
  4. .swiftlint.yml のカスタム 開発に集中できる& 緩くなりすぎないルー ルファ イルを作成する (force_cast): 今直すとテスト必要そうなので、 手をつけたくない f

    o r c e _ c a s t : w a r n i n g (line_length): Objective-C のコー ドも呼ぶので、line_length デフ ォルトルー ルはキツい l i n e _ l e n g t h : 1 2 0
  5. 逃げの一手 すぐ直せないものは TODO コメントとルー ル無効コメントを 追記(TODO はwarning 扱い) / /

    T O D O : D e l e t e t e m p o r a r y c o m m e n t / / s w i f t l i n t : d i s a b l e t y p e _ b o d y _ l e n g t h こういうのもあるらしい ( ルー ル指定できるなら使えるかも) s w i f t l i n t a u t o c o r r e c t
  6. Apply SwiftLint MTG 開催 SwiftLint 適用前にミー ティングを用意 iOS プロジェクトにがっつりコミットする人は参加必須にし て、

    後は興味ある人を募った SwiftLint ルー ルの紹介と、 社内で使う . s w i f t l i n t . y m l ルー ルカスタム内容の共有
  7. iOS プロジェクトに適用 ミー ティングでルー ルの合意を得た後、 プルリクを出す 他気になることあれば、 コー ドレビュー 中に議論

    master にSwiftLint サブモジュー ル化・ 修正コー ド・README 更新のdiff が入ったら、 メンバー にアナウンス 各ロー カルリポジトリでSwiftLint のインストー ルをお願いする 以降、 新しいSwift コー ドを書く際はSwiftLint ルー ルに従うこ ととする
  8. Xcode に入れることで 得られたメリット コー ドレビュー 前に治せる コー ドレビュー で指摘できる 好みの違いから生じる摩擦が減る

    Objective-C 由来のクセが少なくなった . s w i f t l i n t . y m l をリポジトリ管理にすれば、rule の編集には diff が出るのでバレる
  9. Jenkins でSwiftLint を適用する設定1 SwiftLint をインストー ル Xcode のSwiftLint 実行コマンドは、Debug 時のみに設定

    i f [ " $ { C O N F I G U R A T I O N } " = " D e b u g " ] ; t h e n # s w i f t l i n t . . . f i
  10. Jenkins でSwiftLint を適用する設定2 Jenkins ジョブのビルドスクリプトにswiftlint コマンドを追加する s w i f

    t l i n t l i n t - - r e p o r t e r c h e c k s t y l e > s w i f t l i n t _ r e p o r t . x m l | | t r u e Checkstyle プラグインを設定 Viorations Plugin