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
950
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
290
逆向きUIの世界〜AndroidアプリのRTL言語対応〜
akatsuki174
1
540
私が変えてきたこと、変えなかったこと
akatsuki174
2
900
最近読んでいる本-読書シェア会vol.1
akatsuki174
2
220
SwiftUI、UIKitでキャプチャを撮ろう!
akatsuki174
1
110
Appleにおけるプライバシーの全容を把握する
akatsuki174
0
5.8k
近年のAppleにおける位置情報とプライバシー
akatsuki174
3
470
オフライン勉強会ぼっち対策
akatsuki174
1
670
Xcode 15の新機能
akatsuki174
0
2.8k
Other Decks in Programming
See All in Programming
contribution to astral-sh/uv
shunsock
0
550
Vueのバリデーション、結局どれを選べばいい? ― 自作バリデーションの限界と、脱却までの道のり ― / Which Vue Validation Library Should We Really Use? The Limits of Self-Made Validation and How I Finally Moved On
neginasu
2
1.6k
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
360
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.7k
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
10
1.7k
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
910
モテるデスク環境
mozumasu
3
1.3k
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
870
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
46k
SODA - FACT BOOK(JP)
sodainc
1
8.9k
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
210
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
697
190k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Code Review Best Practice
trishagee
72
19k
Fireside Chat
paigeccino
41
3.7k
RailsConf 2023
tenderlove
30
1.3k
4 Signs Your Business is Dying
shpigford
185
22k
A Tale of Four Properties
chriscoyier
161
23k
Being A Developer After 40
akosma
91
590k
Site-Speed That Sticks
csswizardry
13
930
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Unsuck your backbone
ammeep
671
58k
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Λͬͯ όϦόϦշద։ൃ͠·͠ΐ͏ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ