Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SwiftLint実践入門
Search
akatsuki174
October 02, 2017
Programming
7
960
SwiftLint実践入門
2017/10/02 俺コン Day. 1
※2017/10/03 17時頃に資料を上げ直しています。
akatsuki174
October 02, 2017
Tweet
Share
More Decks by akatsuki174
See All by akatsuki174
逆向きUIの世界 〜iOSアプリのRTL言語対応〜
akatsuki174
1
510
逆向きUIの世界〜AndroidアプリのRTL言語対応〜
akatsuki174
1
790
私が変えてきたこと、変えなかったこと
akatsuki174
2
980
最近読んでいる本-読書シェア会vol.1
akatsuki174
2
250
SwiftUI、UIKitでキャプチャを撮ろう!
akatsuki174
1
130
Appleにおけるプライバシーの全容を把握する
akatsuki174
0
6k
近年のAppleにおける位置情報とプライバシー
akatsuki174
3
490
オフライン勉強会ぼっち対策
akatsuki174
1
690
Xcode 15の新機能
akatsuki174
0
2.9k
Other Decks in Programming
See All in Programming
Package Management Learnings from Homebrew
mikemcquaid
0
230
Oxlint JS plugins
kazupon
1
990
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
CSC307 Lecture 06
javiergs
PRO
0
690
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
Patterns of Patterns
denyspoltorak
0
1.4k
AtCoder Conference 2025
shindannin
0
1.1k
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
200
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
750
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Believing is Seeing
oripsolob
1
58
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Site-Speed That Sticks
csswizardry
13
1.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
Building AI with AI
inesmontani
PRO
1
700
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Into the Great Unknown - MozCon
thekraken
40
2.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
The Curious Case for Waylosing
cassininazir
0
240
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
Transcript
SwiftLint࣮ફೖ @akatsuki174
ࣗݾհ • ਢ౻ຘ • iOSΤϯδχΞ • גࣜձࣾZaimॴଐ • Twitter, Qiita,
SlideShare, Github, SpeakerDeck →akatsuki174
None
એ 10/13(ۚ)ɺ10/20(ۚ)ͷ2days 19:20ʙ
͓ئ͍ iOSDCશମɺτʔΫʹର͢ΔΞϯέʔτͷ ճΛΑΖ͓͘͠ئ͍͠·͢ʂ
ࠓͷτʔΫ
ࠓͷτʔΫ جૅলུɻ࣮ͰͲ͏͏ͷ͕ ͍͍͔ʹ͍ͭͯ͠·͢ɻ
ࠓͷτʔΫ ࢀՃܕͷτʔΫʹͳΓ·͢ʂ͓खݩʹ ࣗͷ.swiftlint.ymlΛஔ͍͍͚ͯͨͩΔͱɻ
ɾSwiftLintͷ࠷৽ͷใʹ͍ͭͯհ ɾΈͳ͞ΜͲͷϧʔϧΛͲͷΑ͏ʹ ɹ࠾༻ͯ͠·͔͢ʁ ɾࢲ͕ߟ͑Δ࠷ڧͷ.swiftlint.yml ɾCIपΓͷ ࠓͷ֓ཁ
SwiftLintͷ࠷৽ใ
ɾϧʔϧ૯105 ɾ2015/05/18ʹॳϦϦʔε ɾɾҎ߱ɺ42ճͷϦϦʔεΛॏͶ͍ͯΔ ɾStar7,700 SwiftLintͷࠓ ※͜͜Ͱͷใ2017/10/02࣌ͰͷใͰ͢
SwiftLint 1.0.0ʁ
SwiftLint0.22 ʢݱࡏͷ࠷৽verʣ
ɾωετ͞Εͨconfigͷѻ͍ͷมߋ ɾɾωετ͞Εͨࢠconfig·Δͬͱ ɹɹconfigͱஔ͖ΘΔͷͰͳ͘ɺ ɹɹͷconfigͱϚʔδ͞ΕΔ SwiftLint 0.22ͷओཁͳมߋ
ɾωετ͞Εͨconfigͷѻ͍ͷมߋ ɾɾωετ͞Εͨࢠconfig·Δͬͱ ɹɹconfigͱஔ͖ΘΔͷͰͳ͘ɺ ɹɹͷconfigͱϚʔδ͞ΕΔ SwiftLint 0.22ͷओཁͳมߋ ʁ
ɾલఏ ɾɾҟͳΔ.swiftlint.ymlΛɺҟͳΔ ɹɹσΟϨΫτϦ֊ʹஔ͘͜ͱͰ ɹɹͦΕͧΕʹ߹ͬͨϧʔϧΛద༻͢Δ ɹɹ͜ͱ͕Ͱ͖ͨ ωετ͞Εͨconfig
ɾ ᵓᴷᴷ ViewController.swift ᵓᴷᴷ .swiftlint.yml ᵋᴷᴷ Tests ᵋᴷᴷ Test.swift ᵋᴷᴷ
.swiftlint.yml ਤղ line_length: 110 disabled_rules: - force_cast - force_try
σΟϨΫτϦͱࢠσΟϨΫτϦ྆ํʹ .swiftlint.yml͕͋ͬͨ߹ ɾࠓ·Ͱ ɾɾࢠσΟϨΫτϦͰࢠσΟϨΫτϦͷ ɹɹ.swiftlint.yml͔͠ద༻͞Εͳ͔ͬͨ ωετ͞Εͨconfig
ਤղʢैདྷʣ TestsσΟϨΫτϦͰద༻͞ΕΔϧʔϧ TestsҎԼʹॻ͔Ε͍ͯΔϧʔϧͷΈ ɾ ᵓᴷᴷ ViewController.swift ᵓᴷᴷ .swiftlint.yml ᵋᴷᴷ Tests
ᵋᴷᴷ Test.swift ᵋᴷᴷ .swiftlint.yml line_length: 110 disabled_rules: - force_cast - force_try
ɾ0.22Ҏ߱ ɾɾࢠσΟϨΫτϦͱσΟϨΫτϦͷ ɹɹ.swiftlint.yml͕Ϛʔδ͞Εͨͷ͕ ɹɹࢠσΟϨΫτϦͰద༻͞ΕΔ ωετ͞Εͨconfig
ਤղʢ0.22Ҏ߱ʣ ɾ ᵓᴷᴷ ViewController.swift ᵓᴷᴷ .swiftlint.yml ᵋᴷᴷ Tests ᵋᴷᴷ Test.swift
ᵋᴷᴷ .swiftlint.yml line_length: 110 line_length: 110 disabled_rules: - force_cast - force_try Ϛʔδʂ ࢠσΟϨΫτϦͰσΟϨΫτϦͰ ࢦఆ͍ͯ͠Δϧʔϧద༻͞ΕΔ
ɾmessageͷͳ͍XCTFailڐ༰͠ͳ͍ ɾɾxctfail_message ɾ༨ͳdisableίϚϯυ͕ͳ͍͔νΣοΫ ɾɾsuperfluous_disable_command ɾɾʮ// swiftlint:disableʯΛͬͯΔ͚Ͳ ɹɹҾ͔͔ͬΔίʔυ͕ͳ͍࣌ʹΤϥʔ SwiftLint 0.22ͷओཁͳมߋ
SwiftLint0.21 ʢ࠷৽verͷ1ͭखલʣ
ɾରԠόʔδϣϯͷมߋ ɾɾXcode 8.3Ҏ্ɺSwift 3.1Ҏ্͕ඞਢ ɾϧʔϧΛੜ͢ΔίϚϯυͷՃ ɾɾswiftlint generate-docs SwiftLint 0.21ͷओཁͳมߋ
ɾΞΫηεम০ࢠʹؔ͢ΔϧʔϧͷՃ ɾɾprivate_over_fileprivate ɾɾɾTopLevelʹ͋Δfileprivateprivate ɾɾstrict_fileprivate ɾɾɾશͯͷfileprivateΛνΣοΫ ɾɾɾSwift4Ͱʹཱͭ SwiftLint 0.21ͷओཁͳมߋ
ɾઃఆΦϑʹͳ͍ͬͯΔϧʔϧҰཡΛग़ྗ͢Δ ɾɾswiftlint rules - - disabled ɾ৽͍͠ܗࣜͷKVOํࣜͰॻ͍͍ͯΔ͔ ɾɾblock_based_kvo ɾɾʮWhat's New
in Cocoa TouchʯͰ৽͍͠ ɹɹϒϩοΫϕʔεͷه๏͕հ͞Εͨ SwiftLint 0.21ͷओཁͳมߋ
ɾconfigͰڥม͕͑ΔΑ͏ʹ ɾɾ${ԿΒ͔ͷม}ͱॻ͚OK SwiftLint 0.21ͷओཁͳมߋ
ΈΜͳͷSwiftLintࣄ
ɾσϑΥϧτͰ༗ޮʹͳ͍ͬͯΔϧʔϧ ɾσϑΥϧτͰ120ӽ͑ͨΒܯࠂɺ200 ɹӽ͑ͨΒΤϥʔ ٞ̍ɿline_length
AppDelegateͷ༷͝ࢠ ٞ̍ɿline_length
ίϝϯτ͗ͯ͢Τϥʔൃੜ ٞ̍ɿline_length Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ
ɾͲΜͳͱ͜ΖͰҾ͔͔ͬͬͯΔʁ ɾɾσϑΥͰೖ͍ͬͯΔίϝϯτ ɾɾඪ४ͷϝιου໊ ɾͲΜͳ࣌ʹ͍ίʔυΛॻ͍ͯ͠·͏ʁ ɾɾifͳͲͰ݅Λෳฒͨ࣌ ɾɾifͱreturnΛ1ߦͰ·ͱΊͨ࣌ ٞ̍ɿline_length
ɾࢲͷதͰͷ݁ ɾɾඪ४ϝιουͰҾ͔͔ͬΔͳΒ ɹɹແཧʹकΒͳ͍͍ͯ͘ͷͰʁ ɾɾ120ӽ͑Δ͘Β͍ͷίʔυΛॻ͍ͯ ɹɹ͠·ͬͨΒࣗͰదٓվߦ ɾɾline_lengthdisableͰ͍͍ͷͰʁ ٞ̍ɿline_length
ɾσϑΥϧτͰ༗ޮʹͳ͍ͬͯΔϧʔϧ ɾߦʹ༨ܭͳλϒɺۭനจࣈ͕ೖͬͯͨΒ ɹܯࠂ͕ग़Δ ٞ̎ɿtrailing_whitespace
ʢXcodeͷઃఆʹΑΔ͕ʣվߦ࣌ʹࣗಈ Ͱૠೖ͞ΕΔλϒʹ͍͍͍ͭͯͪͪ ݴΘΕΔͷ͏͍͟ʢʈωʈ#ʣűƅŝűƅŝ ٞ̎ɿtrailing_whitespace Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ
ɾࢲͷதͰͷ݁ ɾɾશۭ֯നจࣈʮInvalid charactor in ɹɹsource fileʯΤϥʔ͕ग़Δͦ͠Μͳ ɹɹࠔΔ͜ͱͳ͍ͷͰʁ ɾɾtrailing_whitespacedisableͰ͍͍ʁ ٞ̎ɿtrailing_whitespace
ࢲ͕ߟ͑ͨ࠷ڧͷ .swiftlint.yml
͝ΊΜͳ͍͞ ؒʹ߹ͬͯͳ͍Ͱ͢
શ൛ޙQiitaͰ ΞΧϯτ@akatsuki174Ͱ͢
ࠓద༻ج४ͷ ͚ͩ͠·͢
ɾॻ͘ਓʹΑͬͯΒ͖͕ͭग़ͦ͏ͳ ɹࠣࡉͳ෦ϧʔϧΛద༻ͯ͠Χόʔ ɾɾcolon, comma, empty_parameters etc. ɾ୯ͳΔೖྗϛεͬΆ͍ͱ͜ΖΛࢦఠͯ͠ ɹ͘ΕΔϧʔϧద༻ ɾɾclosing_brace, closure_spacing
etc. ద༻ج४
ɾద༻͞Εͯͳ͍ͱෆ֨ͳϧʔϧద༻ ɾɾclosure_end_indentation, ɹɹclosure_parameter_position etc. ɾ߹ʹΑΔͷෆద༻ɺ͘͠ ɹ݅Λ͚Δ ɾɾforce_cast, identifier_name etc. ద༻ج४
ɾΓ͗͢͡ΌͶʁͬͯࢥͬͨΒෆద༻ ɾɾline_length, ɹɹconditional_returns_on_newline etc. ద༻ج४
CIपΓͷ
ɾPRΛग़ͨ࣌͠ʹDanger͕.swiftlint.ymlʹ ɹҾ͔͔ͬͬͯͳ͍͔νΣοΫ ɾɾҾ͔͔͍ͬͬͯͨΒ༰ࣻͳ͘ίϝϯτ ฐࣾͷ߹
ɾSwiftLintͷREADME.mdʹfastlaneͷ ɹactionͱͯ͑͠Δͱॻ͔Ε͍ͯΔ fastlane
SwiftLintΛͬͯ όϦόϦշద։ൃ͠·͠ΐ͏ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ