Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Danger-Swift 導入のススメ / Path to import Danger-Swift
Search
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
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
540
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
540
ゼロから始めるPreferenceの実装 / Let's implement Preferences from scratch
lovee
0
160
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
400
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
770
How did I build an Open-Source SwiftUI Toast Library
lovee
1
180
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
390
Observation のあれこれ / A brief introduction about Observation
lovee
3
450
Other Decks in Programming
See All in Programming
業務時間外もAIに働いてもらう話
colorful12
3
10k
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
180
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
350
信頼性の目標を誰も求めてない
shubox
0
500
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
120
不幸な GC
chencmd
0
900
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.7k
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
160
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
RailsConf 2023
tenderlove
30
1.5k
The Limits of Empathy - UXLibs8
cassininazir
1
650
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Become a Pro
speakerdeck
PRO
31
6.2k
Discover your Explorer Soul
emna__ayadi
2
1.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.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