Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
350
逆向きUIの世界〜AndroidアプリのRTL言語対応〜
akatsuki174
1
690
私が変えてきたこと、変えなかったこと
akatsuki174
2
950
最近読んでいる本-読書シェア会vol.1
akatsuki174
2
230
SwiftUI、UIKitでキャプチャを撮ろう!
akatsuki174
1
120
Appleにおけるプライバシーの全容を把握する
akatsuki174
0
5.9k
近年のAppleにおける位置情報とプライバシー
akatsuki174
3
490
オフライン勉強会ぼっち対策
akatsuki174
1
680
Xcode 15の新機能
akatsuki174
0
2.8k
Other Decks in Programming
See All in Programming
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.3k
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
190
AIコーディングエージェント(NotebookLM)
kondai24
0
200
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
210
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.7k
認証・認可の基本を学ぼう前編
kouyuume
0
250
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
100
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
850
エディターってAIで操作できるんだぜ
kis9a
0
730
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
1
240
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
290
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
54
7.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Designing for Performance
lara
610
69k
Statistics for Hackers
jakevdp
799
230k
A designer walks into a library…
pauljervisheath
210
24k
Scaling GitHub
holman
464
140k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
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Λͬͯ όϦόϦշద։ൃ͠·͠ΐ͏ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ