$30 off During Our Annual Pro Sale. View Details »

#phperkaigi GitHub Actions使っていますか?では、cs2prも一緒にいかがですか?

#phperkaigi GitHub Actions使っていますか?では、cs2prも一緒にいかがですか?

hideki kinjyo
PRO

April 09, 2022
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. GitHub Actions使っていますか? では、cs2prも⼀緒にいかがですか? PHPerKaigi 2022 Hideki Kinjyo GitHub: o0h /

    Twitter: @o0h_ [ൃද൛]
  2. 開発をしている時の叫び

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

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

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

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

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

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

    また⾷べたいな
  9. §1 お⾒せする!これがcs2prだ

  10. ·ͱΊ • GitHub ActionsͰCIճ͍ͯ͠ΔͳΒɺcs2prΦεεϝͰ͢ʂ • cs2pr: CodeStyle (check) to Pull

    Request • Annotate a Pull Request based on a Checkstyle XML- report • GitHub ActionsͷఆٛΛ࣮࣭10ߦఔ౓͚ͩೖΕΔͱɺ PRͷʮίίʹ໰୊͕͋Δʯ͕ߦϨϕϧͰ෼͔ΔΑ͏ʹͳΔ
  11. こんな感じで、 diff上に指摘が⼊りますよ!

  12. PHP_CodeSniffer͕੠Λ্͛Δʂ • File changed্Ͱɺର ৅ߦʹίϝϯτ͕ೖΓ ·͢ • Conversation΍ Review commentͰ͸

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

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

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

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

    ͳ͍ͷͰɺ࠷৽ͷdiff ʹର͢Δ݁Ռ͚͕ͩ࢒ Γ·͢
  17. 開発者は叫ぶ

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

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

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

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

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

  23. §2 ざっくり概要

  24. 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.”
  25. ओͳొ৔ਓ෺͸2ਓ͔ʂʁ DTQS΁ͷೖྗܗࣜ checkstyle based XML-Reports Checks API DTQSͷग़ྗઌ

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

    • PHPͷ੩తղੳπʔϧͳͲͰ΋ɺCheckstyleϑΥʔϚοτͰ ͷग़ྗػೳΛ࣋ͭ΋ͷ͕਺ଟ͘ଘࡏ͢Δ
  27. (さっきの例)Phanがその⼀例 ऄ଍N͸ŠNPEFͰ͢

  28. Checks API? • “Check Runs APIΛ࢖͏ͱɺϦϙδτϦͷίʔυมߋʹରͯ͠ڧྗͳ νΣοΫΛ࣮ߦ͢ΔGitHub AppΛߏஙͰ͖·͢ɻ ܧଓతΠϯςάϨʔ γϣϯɺίʔυͷߏจνΣοΫɺίʔυͷεΩϟϯαʔϏεΛ࣮ߦ͠ɺ

    ίϛοτʹ͍ͭͯৄࡉͳϑΟʔυόοΫΛߦ͏ΞϓϦΛ࡞੒Ͱ͖·͢ɻ” (via https://docs.github.com/ja/rest/guides/getting-started-with-the- checks-api) • “νΣοΫ࣮ߦʹ͸λΠϜελϯϓɺৄࡉ৘ใ͕هࡌ͞Εͨ֎෦αΠτ΁ ͷϦϯΫɺίʔυͷಛఆͷߦʹର͢ΔΞϊςʔγϣϯɺ͓Αͼ࣮ߦͨ͠ ෼ੳʹ͍ͭͯͷ৘ใΛؚΊΔ͜ͱ͕Ͱ͖·͢ɻ” (ಉ)
  29. ݕࠪΛ࣮ߦ͢ΔΑ Checkstyle Format cs2pr Checks API 13ʹ݁ՌΛग़͢Α $4Λ13ʹUP͢Δ͍ͬͯ͏πʔϧͬͯ͜ͱʂ

  30. §3 使い⽅

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

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

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

    ੑ΋௿͍͸ͣ • ൚༻ੑ͕ߴ͍workflowΛ࡞ΕΔ(ίϐϖ࢖͍ճͤΔ)
  34. (さっきの例)`tools:cs2pr`を指定 ऄ଍1IBO͸DPNQPTFSMPDLܦ༝ͰೖΕΔํ͕ຊ౰͸޷͖

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

  36. §4 他のツール(とか)

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

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

  39. 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ͷํ͕खܰͦ͏
  40. §4 まとめ

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

  42. ࢀߟ৘ใ • 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
  43. ご清聴 ありがとうございました🎉