Slide 1

Slide 1 text

%BOHFS4XJGUಋೖͷεεϝ f o r .PC JMF "D U 0/ - * / &

Slide 2

Slide 2 text

} 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 {

Slide 3

Slide 3 text

13 ͷϨϏϡʔͰɺ͜ΜͳࢦఠΑ͘͠·ͤΜ͔ʁ w ςετΛ௥Ճ͍ͯͩ͘͠͞ w $IBOHFMPHΛ௥Ճ͍ͯͩ͘͠͞ w ͜ͷ -JOU ϫʔχϯάΛमਖ਼͍ͯͩ͘͠͞ w मਖ਼ྔ͕ଟ͗͢ΔͷͰখ͘͞෼ׂ͍ͯͩ͘͠͞ w FUD

Slide 4

Slide 4 text

%BOHFS4XJGU

Slide 5

Slide 5 text

%BOHFS4XJGUͱ͸ ΤϯδχΞ Ϧϙϗετ ʢ(JU)VC౳ʣ $*$%αʔό ʢ#JUSJTF౳ʣ ᶃίʔυΛ1VTIͯ͠ 13Λग़͢ ᶄτϦΨʔΛൃՐ ᶅςετ΍σϓϩΠ ͳͲΛ࣮ߦ ᶆ࣮ߦ݁ՌΛฦ͢ %BOHFS4XJGU 13΍ࠩ෼ͷ ੩తղੳ

Slide 6

Slide 6 text

13΍ࠩ෼Λ ੩తղੳ͢Δπʔϧ %BOHFS4XJGUͱ͸

Slide 7

Slide 7 text

w ϑΝΠϧมߋ֬ೝ w Ϗϧυϫʔχϯά w ϒϥϯν֬ೝ w ςετΧόϨοδ ʢશମʣ w ςετΧόϨοδ ʢϑΝΠϧ͝ͱʣ

Slide 8

Slide 8 text

ػցݕࠪͰ ϨϏϡΞʔͷෛ୲ΛݮΒ͢πʔϧ %BOHFS4XJGUͱ͸

Slide 9

Slide 9 text

Ͱ͸%BOHFS4XJGUΛ ಋೖͯ͠ΈΑ͏

Slide 10

Slide 10 text

IUUQTHJUIVCDPNEBOHFSTXJGU

Slide 11

Slide 11 text

%BOHFS4XJGUͷಋೖᶃϩʔΧϧฤ .JOUΛ࢖͏ํ๏΋͋Δ͕ɺݱࡏόά͕͋ΔͬΆ͍ͷͰ౰෼ͷؒ)PNFCSFXͷํ͕͓͢͢Ί $ brew install danger-swift * $ cd path/to/project $ danger-swift edit $ # edit in Xcode $ # return $ # Dangerfile.swift generated

Slide 12

Slide 12 text

%BOHFS4XJGUͷಋೖᶄಈ࡞ςετฤ $ # Create a Pull Request $ danger-swift pr url/to/pr

Slide 13

Slide 13 text

%BOHFS4XJGUͷಋೖᶅ$*࣮ߦฤ .JOUΛ࢖͏ํ๏΋͋Δ͕ɺݱࡏόά͕͋ΔͬΆ͍ͷͰ౰෼ͷؒ)PNFCSFXͷํ͕͓͢͢Ί $ brew install danger-swift * $ # set $DANGER_GITHUB_API_TOKEN $ danger-swift ci

Slide 14

Slide 14 text

͢Ͱʹ%BOHFS͕͋Δͷʹ ͳͥ%BOHFS4XJGUΛਪ͔͢

Slide 15

Slide 15 text

%BOHFS %BOHFS4XJGU

Slide 16

Slide 16 text

ϓϩύςΟʔએݴ΁ͷδϟϯϓ

Slide 17

Slide 17 text

%BOHFSΑΓ%BOHFS4XJGU͕͍͍ͱ͜Ζ w ࢖͍׳ΕͯΔ4XJGUͰ%BOHFSpMFॻ͚ΔͷͰɺॻ͘ ͷ΋ಡΉͷ΋3VCZΑΓָʢJ04ΤϯδχΞతʹʣ w *%&ͷαϙʔτ͕ड͚ΒΕΔͷͰɺ࢓༷Λ׬શʹ೺Ѳ Ͱ͖ͯͳͯ͘΋τϥΠˍΤϥʔͰॻ͍͍͚ͯΔ w ߏจΤϥʔ͸ϏϧυΤϥʔͳͷͰɺϩʔΧϧͰͷಈ࡞ ςετ͸3VCZϑΝΠϧΑΓίετ͕௿͍ w 4XJGU1.ϓϩδΣΫτରԠͷϓϥάΠϯ͕%BOHFS ΑΓॆ࣮

Slide 18

Slide 18 text

13ͷϨϏϡʔͰɺ͜ΜͳࢦఠΑ͘͠·ͤΜ͔ʁ w ςετΛ௥Ճ͍ͯͩ͘͠͞ w $IBOHFMPHΛ௥Ճ͍ͯͩ͘͠͞ w ͜ͷ-JOUϫʔχϯάΛमਖ਼͍ͯͩ͘͠͞ w मਖ਼ྔ͕ଟ͗͢ΔͷͰখ͘͞෼ׂ͍ͯͩ͘͠͞ w FUD

Slide 19

Slide 19 text

%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("ϦϦʔεલʹόʔδϣϯ൪߸Λมߋ͍ͯͩ͘͠͞") } }

Slide 20

Slide 20 text

͞Βʹৄ͘͠ɿ IUUQTRJJUBDPNMPWFFJUFNTBEBFC

Slide 21

Slide 21 text

ࢀߟࢿྉ w IUUQTEBOHFSTZTUFNTTXJGU w IUUQTEBOHFSTZTUFNTSVCZ w IUUQTHJUIVCDPNEBOHFSTXJGU w IUUQTHJUIVCDPNFMIPTIJOP2VJDLTIB3FCMPC EFWFMPQ%BOHFSpMFTXJGU