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
Danger-Swift 導入のススメ / Path to import Danger-Swift
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Elvis Shi
July 22, 2020
Programming
1.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Danger-Swift 導入のススメ / Path to import Danger-Swift
Elvis Shi
July 22, 2020
More Decks by Elvis Shi
See All by Elvis Shi
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
460
ゼロから始めるPreferenceの実装 / Let's implement Preferences from scratch
lovee
0
150
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
390
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
740
How did I build an Open-Source SwiftUI Toast Library
lovee
1
170
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
1.3k
SwiftUIで二重スクロール作ってみた / When I tried to make a dual-scroll-ish view in SwiftUI
lovee
1
380
Observation のあれこれ / A brief introduction about Observation
lovee
3
440
ChatGPT 時代の勉強 / Learning under ChatGPT era
lovee
27
9k
Other Decks in Programming
See All in Programming
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
7.9k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
Contextとはなにか
chiroruxx
1
370
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.5k
dRuby over BLE
makicamel
2
390
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
220
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
740
Inside Stream API
skrb
1
770
Claspは野良GASの夢をみるか
takter00
0
210
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
RTSPクライアントを自作してみた話
simotin13
0
630
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
New Earth Scene 8
popppiees
3
2.4k
WENDY [Excerpt]
tessaabrams
11
38k
4 Signs Your Business is Dying
shpigford
187
22k
Become a Pro
speakerdeck
PRO
31
6k
Thoughts on Productivity
jonyablonski
76
5.2k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
230
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Transcript
%BOHFS4XJGUಋೖͷεεϝ f o r .PC JMF "D U
0/ - * / &
} var employedBy = "YUMEMI Inc." var job = "iOS
Tech Lead" var favoriteLanguage = "Swift" var twitter = "@lovee" var qiita = "lovee" var github = "el-hoshino" var additionalInfo = """ Nintendo Switch ͕ͳ͔ͳ͔ͨΒͳ͍! """ final class Me: Developable, Talkable {
13 ͷϨϏϡʔͰɺ͜ΜͳࢦఠΑ͘͠·ͤΜ͔ʁ w ςετΛՃ͍ͯͩ͘͠͞ w $IBOHFMPHΛՃ͍ͯͩ͘͠͞ w ͜ͷ -JOU ϫʔχϯάΛमਖ਼͍ͯͩ͘͠͞
w मਖ਼ྔ͕ଟ͗͢ΔͷͰখׂ͍ͯͩ͘͘͞͠͞ w FUD
%BOHFS4XJGU
%BOHFS4XJGUͱ ΤϯδχΞ Ϧϙϗετ ʢ(JU)VCʣ $*$%αʔό ʢ#JUSJTFʣ ᶃίʔυΛ1VTIͯ͠ 13Λग़͢ ᶄτϦΨʔΛൃՐ ᶅςετσϓϩΠ
ͳͲΛ࣮ߦ ᶆ࣮ߦ݁ՌΛฦ͢ %BOHFS4XJGU 13ࠩͷ ੩తղੳ
13ࠩΛ ੩తղੳ͢Δπʔϧ %BOHFS4XJGUͱ
w ϑΝΠϧมߋ֬ೝ w Ϗϧυϫʔχϯά w ϒϥϯν֬ೝ w ςετΧόϨοδ ʢશମʣ w
ςετΧόϨοδ ʢϑΝΠϧ͝ͱʣ
ػցݕࠪͰ ϨϏϡΞʔͷෛ୲ΛݮΒ͢πʔϧ %BOHFS4XJGUͱ
Ͱ%BOHFS4XJGUΛ ಋೖͯ͠ΈΑ͏
IUUQTHJUIVCDPNEBOHFSTXJGU
%BOHFS4XJGUͷಋೖᶃϩʔΧϧฤ .JOUΛ͏ํ๏͋Δ͕ɺݱࡏόά͕͋ΔͬΆ͍ͷͰͷؒ)PNFCSFXͷํ͕͓͢͢Ί $ brew install danger-swift * $ cd path/to/project
$ danger-swift edit $ # edit in Xcode $ # return $ # Dangerfile.swift generated
%BOHFS4XJGUͷಋೖᶄಈ࡞ςετฤ $ # Create a Pull Request $ danger-swift pr
url/to/pr
%BOHFS4XJGUͷಋೖᶅ$*࣮ߦฤ .JOUΛ͏ํ๏͋Δ͕ɺݱࡏόά͕͋ΔͬΆ͍ͷͰͷؒ)PNFCSFXͷํ͕͓͢͢Ί $ brew install danger-swift * $ # set
$DANGER_GITHUB_API_TOKEN $ danger-swift ci
͢Ͱʹ%BOHFS͕͋Δͷʹ ͳͥ%BOHFS4XJGUΛਪ͔͢
%BOHFS %BOHFS4XJGU
ϓϩύςΟʔએݴͷδϟϯϓ
%BOHFSΑΓ%BOHFS4XJGU͕͍͍ͱ͜Ζ w ͍׳ΕͯΔ4XJGUͰ%BOHFSpMFॻ͚ΔͷͰɺॻ͘ ͷಡΉͷ3VCZΑΓָʢJ04ΤϯδχΞతʹʣ w *%&ͷαϙʔτ͕ड͚ΒΕΔͷͰɺ༷ΛશʹѲ Ͱ͖ͯͳͯ͘τϥΠˍΤϥʔͰॻ͍͍͚ͯΔ w ߏจΤϥʔϏϧυΤϥʔͳͷͰɺϩʔΧϧͰͷಈ࡞ ςετ3VCZϑΝΠϧΑΓίετ͕͍
w 4XJGU1.ϓϩδΣΫτରԠͷϓϥάΠϯ͕%BOHFS ΑΓॆ࣮
13ͷϨϏϡʔͰɺ͜ΜͳࢦఠΑ͘͠·ͤΜ͔ʁ w ςετΛՃ͍ͯͩ͘͠͞ w $IBOHFMPHΛՃ͍ͯͩ͘͠͞ w ͜ͷ-JOUϫʔχϯάΛमਖ਼͍ͯͩ͘͠͞ w मਖ਼ྔ͕ଟ͗͢ΔͷͰখׂ͍ͯͩ͘͘͞͠͞ w
FUD
%BOHFSpMFTXJGUαϯϓϧ let danger = Danger() // ςετΧόϨοδΛ֬ೝ import DangerSwiftCoverage //
package: https://github.com/f-meloni/danger-swift-coverage.git Coverage.xcodeBuildCoverage(.xcresultBundle("Test.xcresult"), minimumCoverage: 60) // Changelog ฤूঢ়گ֬ೝ if !danger.git.modifiedFiles.contains(where: { $0 == "CHANGELOG.md" }) { danger.warn("CHANGELOG Λฤू͍ͯͩ͘͠͞ɻ") } // SwiftLint ϫʔχϯάΛ֬ೝ SwiftLint.lint() // मਖ਼ྔΛ֬ೝ let additions = danger.github.pullRequest.additions ?? 0 let deletions = danger.github.pullRequest.deletions ?? 0 if additions + deletions > 1_000 { danger.warn("मਖ਼ྔ͕ଟ͗͢Ͱ͢ɻPR Λখׂ͍ͯͩ͘͘͞͠͞ɻ") } // ϦϦʔεલͷόʔδϣϯ൪߸มߋ֬ೝ import DangerSwiftHammer // package: https://github.com/el-hoshino/DangerSwiftHammer.git if danger.github.pullRequest.head.ref == "master" { let xcodeprojFileDiff = danger.hammer.diffLines(in: "Project.xcodeproj/project.pbxproj") if !xcodeprojFileDiff.additions.contains(where: { $0.contains("MARKETING_VERSION = ") }) { danger.warn("ϦϦʔεલʹόʔδϣϯ൪߸Λมߋ͍ͯͩ͘͠͞") } }
͞Βʹৄ͘͠ɿ IUUQTRJJUBDPNMPWFFJUFNTBEBFC
ࢀߟࢿྉ w IUUQTEBOHFSTZTUFNTTXJGU w IUUQTEBOHFSTZTUFNTSVCZ w IUUQTHJUIVCDPNEBOHFSTXJGU w IUUQTHJUIVCDPNFMIPTIJOP2VJDLTIB3FCMPC EFWFMPQ%BOHFSpMFTXJGU