Slide 1

Slide 1 text

GitHub Actions使っていますか? では、cs2prも⼀緒にいかがですか? PHPerKaigi 2022 Hideki Kinjyo GitHub: o0h / Twitter: @o0h_ [ൃද൛]

Slide 2

Slide 2 text

開発をしている時の叫び

Slide 3

Slide 3 text

開発をしている時の叫び ྑ͍ϑΟʔυόοΫ͕ ྑ͍λΠϛϯάͰཉ͍͠ʙ ˒ར༻͍ͯ͠Δ͔Θ͍͍Πϥετ͸ʮ͍Β͢ͱΜʯ͞ΜͰ͢ʂ http://www.irasuton.com/

Slide 4

Slide 4 text

開発をしている時の叫び ྑ͍ϑΟʔυόοΫ͕ ྑ͍λΠϛϯάͰཉ͍͠ʙ ˒ར༻͍ͯ͠Δ͔Θ͍͍Πϥετ͸ʮ͍Β͢ͱΜʯ͞ΜͰ͢ʂ http://www.irasuton.com/ త֬ ໌֬ ਝ଎

Slide 5

Slide 5 text

໌֬ ਝ଎ త֬ どこをどうするか良く分かる 確かで筋が通っている コード書いたらすぐ分かる

Slide 6

Slide 6 text

& ͦΜͳ΋ͷ͕ ؆୯ʹ࢖͑ͨΒ خ͍͠ͳ ˒ར༻͍ͯ͠Δ͔Θ͍͍Πϥετ͸ʮ͍Β͢ͱΜʯ͞ΜͰ͢ʂ http://www.irasuton.com/

Slide 7

Slide 7 text

便利なツールを紹介しますね っていうLTの巻

Slide 8

Slide 8 text

ࣗݾ঺հ • ⾦城秀樹 / きんじょうひでき • 好きなFWはCakePHP • アイコンは美味しい鮭親⼦丼の写真です • また⾷べたいな

Slide 9

Slide 9 text

§1 お⾒せする!これがcs2prだ

Slide 10

Slide 10 text

·ͱΊ • GitHub ActionsͰCIճ͍ͯ͠ΔͳΒɺcs2prΦεεϝͰ͢ʂ • cs2pr: CodeStyle (check) to Pull Request • Annotate a Pull Request based on a Checkstyle XML- report • GitHub ActionsͷఆٛΛ࣮࣭10ߦఔ౓͚ͩೖΕΔͱɺ PRͷʮίίʹ໰୊͕͋Δʯ͕ߦϨϕϧͰ෼͔ΔΑ͏ʹͳΔ

Slide 11

Slide 11 text

こんな感じで、 diff上に指摘が⼊りますよ!

Slide 12

Slide 12 text

PHP_CodeSniffer͕੠Λ্͛Δʂ • File changed্Ͱɺର ৅ߦʹίϝϯτ͕ೖΓ ·͢ • Conversation΍ Review commentͰ͸ ͳ͍ͷͰɺ࠷৽ͷdiff ʹର͢Δ݁Ռ͚͕ͩ࢒ Γ·͢

Slide 13

Slide 13 text

PHPStanࢀઓʂ • File changed্Ͱɺର ৅ߦʹίϝϯτ͕ೖΓ ·͢ • Conversation΍ Review commentͰ͸ ͳ͍ͷͰɺ࠷৽ͷdiff ʹର͢Δ݁Ռ͚͕ͩ࢒ Γ·͢

Slide 14

Slide 14 text

Psalm΋དྷͯ͘Εͨʂ • File changed্Ͱɺର ৅ߦʹίϝϯτ͕ೖΓ ·͢ • Conversation΍ Review commentͰ͸ ͳ͍ͷͰɺ࠷৽ͷdiff ʹର͢Δ݁Ռ͚͕ͩ࢒ Γ·͢

Slide 15

Slide 15 text

PHP-CS-Fixerͩͬͯ໧͍ͬͯͳ͍ʂ • File changed্Ͱɺର৅ ϑΝΠϧʹίϝϯτ͕ೖΓ ·͢ • ߦͷࢦఆ·Ͱ͸PHP-CS- Fixerଆ͕ະରԠͬΆ͍ • Conversation΍Review commentͰ͸ͳ͍ͷͰɺ࠷ ৽ͷdiffʹର͢Δ݁Ռ͚͕ͩ ࢒Γ·͢

Slide 16

Slide 16 text

Phan΋͍Δͧʂ • File changed্Ͱɺ ର৅ϑΝΠϧʹίϝϯ τ͕ೖΓ·͢ • Conversation΍ Review commentͰ͸ ͳ͍ͷͰɺ࠷৽ͷdiff ʹର͢Δ݁Ռ͚͕ͩ࢒ Γ·͢

Slide 17

Slide 17 text

開発者は叫ぶ

Slide 18

Slide 18 text

開発者は叫ぶ ྑ͍ϑΟʔυόοΫ͕ ྑ͍λΠϛϯάͰཉ͍͠ʙ ˒ར༻͍ͯ͠Δ͔Θ͍͍Πϥετ͸ʮ͍Β͢ͱΜʯ͞ΜͰ͢ʂ http://www.irasuton.com/ త֬ ໌֬ ਝ଎

Slide 19

Slide 19 text

໌֬ ਝ଎ త֬ 問題のあるファイル/⾏に いろんなツール、いつものルールで PR出したらスグ! (=⼈間のレビューが⼊る前)

Slide 20

Slide 20 text

& ͦΜͳ΋ͷ͕ ؆୯ʹ࢖͑ͨΒ خ͍͠ͳ ˒ར༻͍ͯ͠Δ͔Θ͍͍Πϥετ͸ʮ͍Β͢ͱΜʯ͞ΜͰ͢ʂ http://www.irasuton.com/

Slide 21

Slide 21 text

10⾏に満たないstepsで・・ ؆୯ʹ

Slide 22

Slide 22 text

ͦ͏ɺDTQSͳΒͶ 動きます! ؆୯ʹ

Slide 23

Slide 23 text

§2 ざっくり概要

Slide 24

Slide 24 text

cs2prͬͯͳΜͰ͔͢ʁ • GItHub Actions༻ͷπʔϧ • ֤ςετ(δϣϒ)ͷ࣮ߦ݁Ռ͔Βɺ PRͷΞϊςʔγϣϯΛೖΕͯ͘ΕΔػೳΛఏڙ͍ͯ͠Δ “Turns checkstyle based XML-Reports into GitHub Pull Request Annotations via the Checks API. This script is meant for use within your GitHub Action.”

Slide 25

Slide 25 text

ओͳొ৔ਓ෺͸2ਓ͔ʂʁ DTQS΁ͷೖྗܗࣜ checkstyle based XML-Reports Checks API DTQSͷग़ྗઌ

Slide 26

Slide 26 text

Checkstyle? • “Checkstyle͸ɺιϑτ΢ΣΞ։ൃʹ͓͍ͯ࢖ΘΕΔ੩తίʔ υղੳπʔϧͷ1ͭͰ͋ΓɺJavaͷιʔείʔυʹରͯ͠ίʔ σΟϯάϧʔϧ΁ͷ४ڌΛ֬ೝ͢Δ” (via Wikipedia) • ͜͜Ͱఆٛ͞Ε͍ͯΔݕग़݁Ռ(໰୊Օॴɺ಺༰)ͷग़ྗϑΥʔ Ϛοτ͕ɺଞݴޠ΍ଞπʔϧͰ΋ར༻͞Ε͍ͯΔ • PHPͷ੩తղੳπʔϧͳͲͰ΋ɺCheckstyleϑΥʔϚοτͰ ͷग़ྗػೳΛ࣋ͭ΋ͷ͕਺ଟ͘ଘࡏ͢Δ

Slide 27

Slide 27 text

(さっきの例)Phanがその⼀例 ऄ଍N͸ŠNPEFͰ͢

Slide 28

Slide 28 text

Checks API? • “Check Runs APIΛ࢖͏ͱɺϦϙδτϦͷίʔυมߋʹରͯ͠ڧྗͳ νΣοΫΛ࣮ߦ͢ΔGitHub AppΛߏஙͰ͖·͢ɻ ܧଓతΠϯςάϨʔ γϣϯɺίʔυͷߏจνΣοΫɺίʔυͷεΩϟϯαʔϏεΛ࣮ߦ͠ɺ ίϛοτʹ͍ͭͯৄࡉͳϑΟʔυόοΫΛߦ͏ΞϓϦΛ࡞੒Ͱ͖·͢ɻ” (via https://docs.github.com/ja/rest/guides/getting-started-with-the- checks-api) • “νΣοΫ࣮ߦʹ͸λΠϜελϯϓɺৄࡉ৘ใ͕هࡌ͞Εͨ֎෦αΠτ΁ ͷϦϯΫɺίʔυͷಛఆͷߦʹର͢ΔΞϊςʔγϣϯɺ͓Αͼ࣮ߦͨ͠ ෼ੳʹ͍ͭͯͷ৘ใΛؚΊΔ͜ͱ͕Ͱ͖·͢ɻ” (ಉ)

Slide 29

Slide 29 text

ݕࠪΛ࣮ߦ͢ΔΑ Checkstyle Format cs2pr Checks API 13ʹ݁ՌΛग़͢Α $4Λ13ʹUP͢Δ͍ͬͯ͏πʔϧͬͯ͜ͱʂ

Slide 30

Slide 30 text

§3 使い⽅

Slide 31

Slide 31 text

ɾɾɾͱݴͬͯ΋ෳࡶͳ͜ͱ͸ͳ͍Ͱ͢ʂ • CheckstyleͷϑΥʔϚοτʹରԠ͍ͯ͠Δπʔϧ͔Β • ࣮ߦ݁ՌΛྑ͍ײ͡ʹ౉͍ͯͩ͘͠͞ • `hoge | cs2pr` Ͱ΋ɺϑΝΠϧʹམͱͯ͠ड͚औͬͯ΋

Slide 32

Slide 32 text

ಋೖํ๏ᶃ Composerܦ༝ͰೖΕΔ `composer require staabm/annotate-pull-request-from-checkstyle` • PJͷcomposer.jsonʹؚΊΔ༁Ͱ͸ͳ͘ɺ GitHub Actionsͷworkflow্ͰೖΕΔײ͡ʹͳΓͦ͏ʁ

Slide 33

Slide 33 text

ಋೖํ๏ᶄ Setup PHP ActionͰೖΕΔ • shivammathur/setup-php@v2ͷରԠπʔϧʹؚ·Ε͍ͯΔ(!) • ݸਓతʹ͸ίϨ͕ັྗʹײ͍ͯ͡Δ෦෼Ͱ͢ɾɾʂ • ੩తղੳͷ৔߹ɺಠࣗͷίϯςφΠϝʔδΛ༻ҙ͢Δඞཁ ੑ΋௿͍͸ͣ • ൚༻ੑ͕ߴ͍workflowΛ࡞ΕΔ(ίϐϖ࢖͍ճͤΔ)

Slide 34

Slide 34 text

(さっきの例)`tools:cs2pr`を指定 ऄ଍1IBO͸DPNQPTFSMPDLܦ༝ͰೖΕΔํ͕ຊ౰͸޷͖

Slide 35

Slide 35 text

実際に動かすとこうなる XMLをパースして、別の形式に変換する動きを担う

Slide 36

Slide 36 text

§4 他のツール(とか)

Slide 37

Slide 37 text

PHPStan, PsalmͱChecks API ࠷ۙͷόʔδϣϯͩͱɺπʔϧࣗମ͕ `github`ϑΥʔϚοτ Λαϙʔτ͍ͯ͠Δ => cs2prΛհ͞ͳͯ͘΋ΞϊςʔγϣϯΛ෇͚ΒΕΔ • `phpstan --error-format=github` • `psalm --output-format=github`

Slide 38

Slide 38 text

PHPUnitͱChecks API PHPUnitࣗମ͸CheckstyleϑΥʔϚοτΛαϙʔτ͍ͯ͠ͳ ͍͕ɺϓϥάΠϯ΍GItHub Actions͕࡞੒͞Ε͍ͯΔ => https://github.com/mheap/phpunit-matcher-action

Slide 39

Slide 39 text

Reviewdog • “reviewdog provides a way to post review comments to code hosting service, such as GitHub, automatically by integrating with any linter tools with ease.” (via https://github.com/reviewdog/reviewdog) • ActionsҎ֎ͷCIͰ΋࢖͑Δ • ChecksҎ֎ʹ΋ɺcomment/review commentʹ΋ରԠ͍ͯ͠Δ • ෯޿͍πʔϧʹରԠ͍ͯͯ͠ɺ೔ຊޠ৘ใ΋ଟ͍ • ݸਓతʹ͸ɺsetup-phpΛ࢖͑Δέʔεͩͱcs2prͷํ͕खܰͦ͏

Slide 40

Slide 40 text

§4 まとめ

Slide 41

Slide 41 text

ࣗಈԽ͍͜͞ʙʂ • ܧଓతΠϯςάϨʔγϣϯ͍͜͞ʙʂ • ؆୯ʹೖΕΒΕΔศརπʔϧ͍͜͞ʙʂ • ͜͏͍͏ܥ౷͸ʮೖΕͳ͍ख͸ͳ͍ʯͩͱࢥ͏ͷͰɺ ΨϯΨϯ΍͍͖͍ͬͯͨͰ͢Ͷʂ ˒ར༻͍ͯ͠Δ͔Θ͍͍Πϥετ͸ʮ͍Β͢ͱΜʯ͞ΜͰ͢ʂ http://www.irasuton.com/

Slide 42

Slide 42 text

ࢀߟ৘ใ • PHPͰ࢝ΊΔGitHub Actions - Speaker Deck https://speakerdeck.com/yahiru/phpdeshi-merugithub-actions • => cs2prͷݴٴ΋͋Γ·͢Α • GitHub Actions Toolkit: Problem Matchers https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md • => Problem Matcherͱ͸ʁ • setup-phpͱphpunit-problem-matcher ͷProblem Matcherʹ͍ͭͯ https://daisuki.nichiyoubi.land/entry/phperkaigi-2022-lt-hosoku • => ຊLTͷิ଍తͳهࣄ • πʔϧ໊ͷ༝དྷ(࡞ऀʹڭ͍͖͑ͯͨͩ·ͨ͠ʂ) https://twitter.com/markusstaab/status/1498552535900164105

Slide 43

Slide 43 text

ご清聴 ありがとうございました🎉