Enviar pesquisa
Carregar
チーム開発にSwiftLintを導入してみた・詳細版
•
1 gostou
•
2,622 visualizações
I
Ikada Kaori
Seguir
2016/08/29に開催されたAKIBA.swift×Swift愛好会 スペシャルコラボの発表資料です. 2016/08/23には簡易版も発表させていただきました。
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 24
Baixar agora
Baixar para ler offline
Recomendados
CIが分からないPE(SETエンジニア)1年生がVRT(ビジュアルリグレッションテスト)をハードル低くCIを運用した
CIが分からないPE(SETエンジニア)1年生がVRT(ビジュアルリグレッションテスト)をハードル低くCIを運用した
ssuser0be501
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
Amazon Web Services Japan
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
アジャイル開発におけるクラフトマンシップの重要性
アジャイル開発におけるクラフトマンシップの重要性
Shigeru Tatsuta
Head First Inception Deck
Head First Inception Deck
Naoto Nishimura
Recomendados
CIが分からないPE(SETエンジニア)1年生がVRT(ビジュアルリグレッションテスト)をハードル低くCIを運用した
CIが分からないPE(SETエンジニア)1年生がVRT(ビジュアルリグレッションテスト)をハードル低くCIを運用した
ssuser0be501
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
Amazon Web Services Japan
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
アジャイル開発におけるクラフトマンシップの重要性
アジャイル開発におけるクラフトマンシップの重要性
Shigeru Tatsuta
Head First Inception Deck
Head First Inception Deck
Naoto Nishimura
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
小さく始める大規模スクラム
小さく始める大規模スクラム
Keisuke Tsukagoshi
MagicOnion入門
MagicOnion入門
torisoup
プロダクトオーナーが知るべき97のこと
プロダクトオーナーが知るべき97のこと
toshihiro ichitani
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
Tableau serverを1年間運用して
Tableau serverを1年間運用して
Kouichi Imaizumi
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
アジャイルジャーニー
アジャイルジャーニー
toshihiro ichitani
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
Livesense Inc.
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Salesforceの標準オブジェクトについて復習してみた
Salesforceの標準オブジェクトについて復習してみた
y-maeda
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
Hajime Fujita
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Tune Up AWS Lambda
Tune Up AWS Lambda
Keisuke Nishitani
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
Hyperleger Tokyo Meetup
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
akatsuki174
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Fumiya Sakai
Mais conteúdo relacionado
Mais procurados
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
小さく始める大規模スクラム
小さく始める大規模スクラム
Keisuke Tsukagoshi
MagicOnion入門
MagicOnion入門
torisoup
プロダクトオーナーが知るべき97のこと
プロダクトオーナーが知るべき97のこと
toshihiro ichitani
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
Tableau serverを1年間運用して
Tableau serverを1年間運用して
Kouichi Imaizumi
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
アジャイルジャーニー
アジャイルジャーニー
toshihiro ichitani
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
Livesense Inc.
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Salesforceの標準オブジェクトについて復習してみた
Salesforceの標準オブジェクトについて復習してみた
y-maeda
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
Hajime Fujita
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Tune Up AWS Lambda
Tune Up AWS Lambda
Keisuke Nishitani
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
Hyperleger Tokyo Meetup
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
Mais procurados
(20)
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
小さく始める大規模スクラム
小さく始める大規模スクラム
MagicOnion入門
MagicOnion入門
プロダクトオーナーが知るべき97のこと
プロダクトオーナーが知るべき97のこと
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
Tableau serverを1年間運用して
Tableau serverを1年間運用して
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
アジャイルジャーニー
アジャイルジャーニー
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Salesforceの標準オブジェクトについて復習してみた
Salesforceの標準オブジェクトについて復習してみた
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Tune Up AWS Lambda
Tune Up AWS Lambda
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Semelhante a チーム開発にSwiftLintを導入してみた・詳細版
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
akatsuki174
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Fumiya Sakai
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
Takeshi Komiya
Swift instagram viewer
Swift instagram viewer
Shintaro Kaneko
Livlisのcakephp事例
Livlisのcakephp事例
Masahiro Saito
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたい
You&I
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Yuta Shimizu
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
Hiroshi Urabe
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
Fumiya Sakai
kintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみよう
Kyouhei Kitagawa
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
iwata jaws-ug
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
Swiftビギナーズ勉強会 第1回 @Co-Edo
Swiftビギナーズ勉強会 第1回 @Co-Edo
Megumi Otani(Czenhe)
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
Fumiya Sakai
いまさら触るAwt
いまさら触るAwt
Keiichi Kobayashi
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップ
Fumiya Sakai
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Toshiaki Maki
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発
Ryosuke Izumi
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
ppengotsu Name
Semelhante a チーム開発にSwiftLintを導入してみた・詳細版
(20)
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
Swift instagram viewer
Swift instagram viewer
Livlisのcakephp事例
Livlisのcakephp事例
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたい
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
Promise in Swift by PromiseKit - Swift勉強会 2015/05/25
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
kintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみよう
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Swiftビギナーズ勉強会 第1回 @Co-Edo
Swiftビギナーズ勉強会 第1回 @Co-Edo
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
いまさら触るAwt
いまさら触るAwt
RxSwiftとMVVMパターンと仲良くなる次のステップ
RxSwiftとMVVMパターンと仲良くなる次のステップ
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
チーム開発にSwiftLintを導入してみた・詳細版
1.
チーム開発にSwiftLintを導入してみた 詳細版 AKIBA.swift×Swift愛好会スペシャルコラボ 2016/08/29
2.
自己紹介 Kaori Ikada @Origami
inc. モバイルアプリエンジニア 基本的にikamon みたいなアカウントで動き回っている
3.
ことのはじまり
4.
宗教戦争勃発 2015年10月某日: メンバ増えたし、SwiftLint入れてみよう! と思ったら、ルールのカスタムできない! ので、諦める 2016年5月某日: ワークフローに関するKPTミーティングで出たProbrem に 「Swift Coding
Styleが無い」!と言われる ただ、コーディング規約とかいうドキュメントはまだ増やし たくない
5.
本気出して、SwiftLintを導入しよう!
6.
Xcode編
7.
SwiftLint導入 github.com/realm/SwiftLint git submodule でもインストールできる Build
Phases にswiftlint 実行用スクリプトを追加 ※画像は本家から拝借
8.
とりあえず既存コードに当ててみる Over 999 warnings
and 230 errors!
9.
怒られたルールとその理由 (force_cast): (variable_name): 3から40文字以内にしろ(func内の小さいスコープでしか 使わない変数は対象外) _ などの英数文字以外は禁止 小文字から始めろ (type_name): struct は大文字から始まる名前をつけろ (line_length):
1行につき100文字以内にしろ (function_body_length): 関数は100行以下にしろ (control_statement): if文などの条件式にカッコをつけるな if (true) { -> if true { (cyclomatic_complexity): if / else if の繰り返しが多すぎ
10.
.swiftlint.yml のカスタム 開発に集中できる&緩くなりすぎないルールファ イルを作成する (force_cast): 今直すとテスト必要そうなので、手をつけたくない force_cast:
warning (line_length): Objective-C のコードも呼ぶので、line_length デフ ォルトルールはキツい line_length: 120
11.
SwiftLint対策第一弾 ルールを緩めずにエラーを取り除く とりあえず、今までの罪を噛み締めながら直しまくる ルール把握のため、一番ボリュームのあるSwiftで書いた ViewControllerについて、Warning も含め直してみた
12.
逃げの一手 すぐ直せないものはTODO コメントとルール無効コメントを 追記(TODOはwarning扱い) // TODO:
Delete temporary comment // swiftlint:disable type_body_length こういうのもあるらしい(ルール指定できるなら使えるかも) swiftlint autocorrect
13.
Apply SwiftLint MTG
開催 SwiftLint適用前にミーティングを用意 iOSプロジェクトにがっつりコミットする人は参加必須にし て、後は興味ある人を募った SwiftLintルールの紹介と、社内で使う .swiftlint.yml ルー ルカスタム内容の共有
14.
意外と参加者多かった 開発責任者 iOSエンジニア Growthエンジニア デザイナー
15.
MTGで話題になったこと 改行位置は? -> 基本、Xcodeに従う 変数名の命名規則はどうする?
-> https://swift.org/documentation/api-design-guidelines/ 自動ではないけど参考になる規約-> https://github.com/raywenderlich/swift-style-guide
16.
iOSプロジェクトに適用 ミーティングでルールの合意を得た後、プルリクを出す 他気になることあれば、コードレビュー中に議論 masterにSwiftLintサブモジュール化・修正コード・README 更新のdiffが入ったら、メンバーにアナウンス 各ローカルリポジトリでSwiftLintのインストールをお願いする 以降、新しいSwiftコードを書く際はSwiftLintルールに従うこ ととする
17.
Xcodeに入れることで 得られたメリット コードレビュー前に治せる コードレビューで指摘できる 好みの違いから生じる摩擦が減る Objective-C由来のクセが少なくなった .swiftlint.yml をリポジトリ管理にすれば、ruleの編集には diffが出るのでバレる
18.
Jenkins編
19.
JenkinsでSwiftLintを適用する設定1 SwiftLint をインストール Xcode のSwiftLint実行コマンドは、Debug時のみに設定 if
[ "${CONFIGURATION}" = "Debug" ]; then # swiftlint ... fi
20.
JenkinsでSwiftLintを適用する設定2 Jenkins ジョブのビルドスクリプトにswiftlintコマンドを追加する swiftlint lint
--reporter checkstyle > swiftlint_report.xml || true Checkstyleプラグインを設定 Viorations Plugin
21.
できた- Violations Report ※
filename をたどると、該当コードもわかる
22.
定期MTGで共有 Jenkins で入れてみたよ 999+ warnings
より具体的な数字がわかったよ 以前のSwiftコードに手を加える時は周辺のwarningを減らせる ようにして、グラフが右肩下がりになるといいね!
23.
Jenkinsに入れることで 得られたメリット 継続的品質の分析と改善ができる メンバ間でlintエラーを減らしていこうという意識が芽生える
24.
We are hiring! 多分採用されると思うから応募しようぜ https://www.wantedly.com/companies/origami/projects
Baixar agora