Slide 1

Slide 1 text

SwiftLint࣮ફೖ໳ @akatsuki174

Slide 2

Slide 2 text

ࣗݾ঺հ • ਢ౻ຘ • iOSΤϯδχΞ • גࣜձࣾZaimॴଐ • Twitter, Qiita, SlideShare, Github, SpeakerDeck →akatsuki174

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

એ఻ 10/13(ۚ)ɺ10/20(ۚ)ͷ2days 19:20ʙ

Slide 5

Slide 5 text

͓ئ͍ iOSDCશମɺτʔΫʹର͢ΔΞϯέʔτ΁ͷ ճ౴ΛΑΖ͓͘͠ئ͍͠·͢ʂ

Slide 6

Slide 6 text

ࠓ೔ͷτʔΫ

Slide 7

Slide 7 text

ࠓ೔ͷτʔΫ جૅ͸লུɻ࣮຿ͰͲ͏࢖͏ͷ͕ ͍͍͔ʹ͍ͭͯ࿩͠·͢ɻ

Slide 8

Slide 8 text

ࠓ೔ͷτʔΫ ࢀՃܕͷτʔΫʹͳΓ·͢ʂ͓खݩʹ ࣗ෼ͷ.swiftlint.ymlΛஔ͍͍͚ͯͨͩΔͱɻ

Slide 9

Slide 9 text

ɾSwiftLintͷ࠷৽ͷ৘ใʹ͍ͭͯ঺հ ɾΈͳ͞ΜͲͷϧʔϧΛͲͷΑ͏ʹ ɹ࠾༻ͯ͠·͔͢ʁ ɾࢲ͕ߟ͑Δ࠷ڧͷ.swiftlint.yml ɾCIपΓͷ࿩ ࠓ೔ͷ֓ཁ

Slide 10

Slide 10 text

SwiftLintͷ࠷৽৘ใ

Slide 11

Slide 11 text

ɾϧʔϧ૯਺105 ɾ2015/05/18ʹॳϦϦʔε ɾɾҎ߱ɺ42ճͷϦϦʔεΛॏͶ͍ͯΔ ɾStar਺໿7,700 SwiftLintͷࠓ ※͜͜Ͱͷ৘ใ͸2017/10/02࣌఺Ͱͷ৘ใͰ͢

Slide 12

Slide 12 text

SwiftLint 1.0.0͸ʁ

Slide 13

Slide 13 text

SwiftLint0.22 ʢݱࡏͷ࠷৽verʣ

Slide 14

Slide 14 text

ɾωετ͞Εͨconfigͷѻ͍ͷมߋ ɾɾωετ͞Εͨࢠconfig͸·Δͬͱ ɹɹ਌configͱஔ͖׵ΘΔͷͰ͸ͳ͘ɺ ɹɹ਌ͷconfigͱϚʔδ͞ΕΔ SwiftLint 0.22ͷओཁͳมߋ

Slide 15

Slide 15 text

ɾωετ͞Εͨconfigͷѻ͍ͷมߋ ɾɾωετ͞Εͨࢠconfig͸·Δͬͱ ɹɹ਌configͱஔ͖׵ΘΔͷͰ͸ͳ͘ɺ ɹɹ਌ͷconfigͱϚʔδ͞ΕΔ SwiftLint 0.22ͷओཁͳมߋ ʁ

Slide 16

Slide 16 text

ɾલఏ ɾɾҟͳΔ.swiftlint.ymlΛɺҟͳΔ ɹɹσΟϨΫτϦ֊૚ʹஔ͘͜ͱͰ ɹɹͦΕͧΕʹ߹ͬͨϧʔϧΛద༻͢Δ ɹɹ͜ͱ͕Ͱ͖ͨ ωετ͞Εͨconfig

Slide 17

Slide 17 text

ɾ ᵓᴷᴷ ViewController.swift ᵓᴷᴷ .swiftlint.yml ᵋᴷᴷ Tests ᵋᴷᴷ Test.swift ᵋᴷᴷ .swiftlint.yml ਤղ line_length: 110 disabled_rules: - force_cast - force_try

Slide 18

Slide 18 text

਌σΟϨΫτϦͱࢠσΟϨΫτϦ྆ํʹ .swiftlint.yml͕͋ͬͨ৔߹ ɾࠓ·Ͱ ɾɾࢠσΟϨΫτϦ಺Ͱ͸ࢠσΟϨΫτϦͷ ɹɹ.swiftlint.yml͔͠ద༻͞Εͳ͔ͬͨ ωετ͞Εͨconfig

Slide 19

Slide 19 text

ਤղʢैདྷʣ TestsσΟϨΫτϦ಺Ͱద༻͞ΕΔϧʔϧ͸ TestsҎԼʹॻ͔Ε͍ͯΔϧʔϧͷΈ ɾ ᵓᴷᴷ ViewController.swift ᵓᴷᴷ .swiftlint.yml ᵋᴷᴷ Tests ᵋᴷᴷ Test.swift ᵋᴷᴷ .swiftlint.yml line_length: 110 disabled_rules: - force_cast - force_try

Slide 20

Slide 20 text

ɾ0.22Ҏ߱ ɾɾࢠσΟϨΫτϦͱ਌σΟϨΫτϦͷ ɹɹ.swiftlint.yml͕Ϛʔδ͞Εͨ΋ͷ͕ ɹɹࢠσΟϨΫτϦ಺Ͱద༻͞ΕΔ ωετ͞Εͨconfig

Slide 21

Slide 21 text

ਤղʢ0.22Ҏ߱ʣ ɾ ᵓᴷᴷ ViewController.swift ᵓᴷᴷ .swiftlint.yml ᵋᴷᴷ Tests ᵋᴷᴷ Test.swift ᵋᴷᴷ .swiftlint.yml line_length: 110 line_length: 110 disabled_rules: - force_cast - force_try Ϛʔδʂ ࢠσΟϨΫτϦͰ͸਌σΟϨΫτϦͰ ࢦఆ͍ͯ͠Δϧʔϧ΋ద༻͞ΕΔ

Slide 22

Slide 22 text

ɾmessageͷͳ͍XCTFail͸ڐ༰͠ͳ͍ ɾɾxctfail_message ɾ༨෼ͳdisableίϚϯυ͕ͳ͍͔νΣοΫ ɾɾsuperfluous_disable_command ɾɾʮ// swiftlint:disableʯΛ࢖ͬͯΔ͚Ͳ ɹɹҾ͔͔ͬΔίʔυ͕ͳ͍࣌ʹΤϥʔ SwiftLint 0.22ͷओཁͳมߋ

Slide 23

Slide 23 text

SwiftLint0.21 ʢ࠷৽verͷ1ͭखલʣ

Slide 24

Slide 24 text

ɾରԠόʔδϣϯͷมߋ ɾɾXcode 8.3Ҏ্ɺSwift 3.1Ҏ্͕ඞਢ ɾϧʔϧΛੜ੒͢ΔίϚϯυͷ௥Ճ ɾɾswiftlint generate-docs SwiftLint 0.21ͷओཁͳมߋ

Slide 25

Slide 25 text

ɾΞΫηεम০ࢠʹؔ͢Δϧʔϧͷ௥Ճ ɾɾprivate_over_fileprivate ɾɾɾTopLevelʹ͋Δfileprivate͸private΁ ɾɾstrict_fileprivate ɾɾɾશͯͷfileprivateΛνΣοΫ ɾɾɾSwift4Ͱ໾ʹཱͭ SwiftLint 0.21ͷओཁͳมߋ

Slide 26

Slide 26 text

ɾઃఆΦϑʹͳ͍ͬͯΔϧʔϧҰཡΛग़ྗ͢Δ ɾɾswiftlint rules - - disabled ɾ৽͍͠ܗࣜͷKVOํࣜͰॻ͍͍ͯΔ͔ ɾɾblock_based_kvo ɾɾʮWhat's New in Cocoa TouchʯͰ৽͍͠ ɹɹϒϩοΫϕʔεͷه๏͕঺հ͞Εͨ SwiftLint 0.21ͷओཁͳมߋ

Slide 27

Slide 27 text

ɾconfigͰ؀ڥม਺͕࢖͑ΔΑ͏ʹ ɾɾ${ԿΒ͔ͷม਺}ͱॻ͚͹OK SwiftLint 0.21ͷओཁͳมߋ

Slide 28

Slide 28 text

ΈΜͳͷSwiftLintࣄ৘

Slide 29

Slide 29 text

ɾσϑΥϧτͰ༗ޮʹͳ͍ͬͯΔϧʔϧ ɾσϑΥϧτͰ͸120ӽ͑ͨΒܯࠂɺ200 ɹӽ͑ͨΒΤϥʔ ٞ୊̍ɿline_length

Slide 30

Slide 30 text

AppDelegateͷ༷͝ࢠ ٞ୊̍ɿline_length

Slide 31

Slide 31 text

ίϝϯτ௕͗ͯ͢Τϥʔൃੜ ٞ୊̍ɿline_length Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ

Slide 32

Slide 32 text

ɾͲΜͳͱ͜ΖͰҾ͔͔ͬͬͯΔʁ ɾɾσϑΥͰೖ͍ͬͯΔίϝϯτ ɾɾඪ४ͷϝιου໊ ɾͲΜͳ࣌ʹ௕͍ίʔυΛॻ͍ͯ͠·͏ʁ ɾɾifͳͲͰ৚݅Λෳ਺ฒ΂ͨ࣌ ɾɾifͱreturnΛ1ߦͰ·ͱΊͨ࣌ ٞ୊̍ɿline_length

Slide 33

Slide 33 text

ɾࢲͷதͰͷ݁࿦ ɾɾඪ४ϝιουͰҾ͔͔ͬΔͳΒ ɹɹແཧʹकΒͳ͍͍ͯ͘ͷͰ͸ʁ ɾɾ120ӽ͑Δ͘Β͍ͷίʔυΛॻ͍ͯ ɹɹ͠·ͬͨΒࣗ෼Ͱదٓվߦ ɾɾline_length͸disableͰ͍͍ͷͰ͸ʁ ٞ୊̍ɿline_length

Slide 34

Slide 34 text

ɾσϑΥϧτͰ༗ޮʹͳ͍ͬͯΔϧʔϧ ɾߦ຤ʹ༨ܭͳλϒɺۭനจࣈ͕ೖͬͯͨΒ ɹܯࠂ͕ग़Δ ٞ୊̎ɿtrailing_whitespace

Slide 35

Slide 35 text

ʢXcodeͷઃఆʹ΋ΑΔ͕ʣվߦ࣌ʹࣗಈ Ͱૠೖ͞ΕΔλϒʹ͍͍͍ͭͯͪͪ ݴΘΕΔͷ͸͏͍͟ʢʈωʈ#ʣűƅŝűƅŝ ٞ୊̎ɿtrailing_whitespace Έͳ͞ΜͲ͏ͯ͠·͔͢ʁ

Slide 36

Slide 36 text

ɾࢲͷதͰͷ݁࿦ ɾɾશۭ֯നจࣈ͸ʮInvalid charactor in ɹɹsource fileʯΤϥʔ͕ग़Δͦ͠Μͳ ɹɹࠔΔ͜ͱͳ͍ͷͰ͸ʁ ɾɾtrailing_whitespace͸disableͰ͍͍ʁ ٞ୊̎ɿtrailing_whitespace

Slide 37

Slide 37 text

ࢲ͕ߟ͑ͨ࠷ڧͷ .swiftlint.yml

Slide 38

Slide 38 text

͝ΊΜͳ͍͞ ؒʹ߹ͬͯͳ͍Ͱ͢

Slide 39

Slide 39 text

׬શ൛͸ޙ೔QiitaͰ ΞΧ΢ϯτ͸@akatsuki174Ͱ͢

Slide 40

Slide 40 text

ࠓ೔͸ద༻ج४ͷ ࿩͚ͩ͠·͢

Slide 41

Slide 41 text

ɾॻ͘ਓʹΑͬͯ͹Β͖͕ͭग़ͦ͏ͳ ɹࠣࡉͳ෦෼͸ϧʔϧΛద༻ͯ͠Χόʔ ɾɾcolon, comma, empty_parameters etc. ɾ୯ͳΔೖྗϛεͬΆ͍ͱ͜ΖΛࢦఠͯ͠ ɹ͘ΕΔϧʔϧ͸ద༻ ɾɾclosing_brace, closure_spacing etc. ద༻ج४

Slide 42

Slide 42 text

ɾద༻͞Εͯͳ͍ͱෆ֨޷ͳϧʔϧ͸ద༻ ɾɾclosure_end_indentation, ɹɹclosure_parameter_position etc. ɾ৔߹ʹΑΔ΋ͷ͸ෆద༻ɺ΋͘͠͸ ɹ৚݅Λ෇͚Δ ɾɾforce_cast, identifier_name etc. ద༻ج४

Slide 43

Slide 43 text

ɾ΍Γ͗͢͡ΌͶʁͬͯࢥͬͨΒෆద༻ ɾɾline_length, ɹɹconditional_returns_on_newline etc. ద༻ج४

Slide 44

Slide 44 text

CIपΓͷ࿩

Slide 45

Slide 45 text

ɾPRΛग़ͨ࣌͠ʹDanger͕.swiftlint.ymlʹ ɹҾ͔͔ͬͬͯͳ͍͔νΣοΫ ɾɾҾ͔͔͍ͬͬͯͨΒ༰ࣻͳ͘ίϝϯτ ฐࣾͷ৔߹

Slide 46

Slide 46 text

ɾSwiftLintͷREADME.mdʹfastlaneͷ ɹactionͱͯ͠࢖͑Δͱॻ͔Ε͍ͯΔ fastlane

Slide 47

Slide 47 text

SwiftLintΛ࢖ͬͯ όϦόϦշద։ൃ͠·͠ΐ͏ʂ

Slide 48

Slide 48 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ