Soumettre la recherche
Mettre en ligne
チーム開発にSwiftLintを導入してみた・詳細版
•
1 j'aime
•
2,622 vues
I
Ikada Kaori
Suivre
2016/08/29に開催されたAKIBA.swift×Swift愛好会 スペシャルコラボの発表資料です. 2016/08/23には簡易版も発表させていただきました。
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 24
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
令和最新!SwiftUI+async_awaitで自分はこう設計・実装している!.pdf
令和最新!SwiftUI+async_awaitで自分はこう設計・実装している!.pdf
Yuuki Noseda
Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要
アシアル株式会社
Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介
Hitachi, Ltd. OSS Solution Center.
RxSwiftを“チーム開発に”導入する話
RxSwiftを“チーム開発に”導入する話
LINE Corporation
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019
sasezaki
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図
akipii Oga
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
go_router が隠してくれるもの
go_router が隠してくれるもの
cch-robo
Recommandé
令和最新!SwiftUI+async_awaitで自分はこう設計・実装している!.pdf
令和最新!SwiftUI+async_awaitで自分はこう設計・実装している!.pdf
Yuuki Noseda
Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要
アシアル株式会社
Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介
Hitachi, Ltd. OSS Solution Center.
RxSwiftを“チーム開発に”導入する話
RxSwiftを“チーム開発に”導入する話
LINE Corporation
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019
sasezaki
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図
akipii Oga
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
go_router が隠してくれるもの
go_router が隠してくれるもの
cch-robo
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
Makoto SAKAI
Modeling in the Agile Age - JP
Modeling in the Agile Age - JP
Kenji Hiranabe
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
Tomohiro Kumagai
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
m ishizaki
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
Alan Tsai
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
OCIへの直接接続 ハイブリッド・マルチクラウド構築 グローバル・デジタル基盤を提供する Equinix Platform™
OCIへの直接接続 ハイブリッド・マルチクラウド構築 グローバル・デジタル基盤を提供する Equinix Platform™
Kiyomichi Arai
iOS WKWebViewの魔改造 - iOSDC 2018
iOS WKWebViewの魔改造 - iOSDC 2018
Shingo Fukuyama
Jsug spring bootコードリーディング 接触篇 a contact
Jsug spring bootコードリーディング 接触篇 a contact
tsukasa tamaru
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
EtherCATやPROFINETを OPC UAで接続してみた
EtherCATやPROFINETを OPC UAで接続してみた
ミソジ
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Yuki Hirano
ソフトウェア設計のすすめ
ソフトウェア設計のすすめ
Yoshimura Soichiro
チケットの棚卸し ウチではこうしてます
チケットの棚卸し ウチではこうしてます
靖宏 田中
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
akatsuki174
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Fumiya Sakai
Contenu connexe
Tendances
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
Makoto SAKAI
Modeling in the Agile Age - JP
Modeling in the Agile Age - JP
Kenji Hiranabe
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
Tomohiro Kumagai
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
m ishizaki
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
Alan Tsai
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
OCIへの直接接続 ハイブリッド・マルチクラウド構築 グローバル・デジタル基盤を提供する Equinix Platform™
OCIへの直接接続 ハイブリッド・マルチクラウド構築 グローバル・デジタル基盤を提供する Equinix Platform™
Kiyomichi Arai
iOS WKWebViewの魔改造 - iOSDC 2018
iOS WKWebViewの魔改造 - iOSDC 2018
Shingo Fukuyama
Jsug spring bootコードリーディング 接触篇 a contact
Jsug spring bootコードリーディング 接触篇 a contact
tsukasa tamaru
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
EtherCATやPROFINETを OPC UAで接続してみた
EtherCATやPROFINETを OPC UAで接続してみた
ミソジ
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Yuki Hirano
ソフトウェア設計のすすめ
ソフトウェア設計のすすめ
Yoshimura Soichiro
チケットの棚卸し ウチではこうしてます
チケットの棚卸し ウチではこうしてます
靖宏 田中
Tendances
(20)
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
Modeling in the Agile Age - JP
Modeling in the Agile Age - JP
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
OCIへの直接接続 ハイブリッド・マルチクラウド構築 グローバル・デジタル基盤を提供する Equinix Platform™
OCIへの直接接続 ハイブリッド・マルチクラウド構築 グローバル・デジタル基盤を提供する Equinix Platform™
iOS WKWebViewの魔改造 - iOSDC 2018
iOS WKWebViewの魔改造 - iOSDC 2018
Jsug spring bootコードリーディング 接触篇 a contact
Jsug spring bootコードリーディング 接触篇 a contact
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
EtherCATやPROFINETを OPC UAで接続してみた
EtherCATやPROFINETを OPC UAで接続してみた
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
ソフトウェア設計のすすめ
ソフトウェア設計のすすめ
チケットの棚卸し ウチではこうしてます
チケットの棚卸し ウチではこうしてます
Similaire à チーム開発に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
Similaire à チーム開発に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
Télécharger maintenant