Upgrade to Pro — share decks privately, control downloads, hide ads and more …

#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_
    [ൃද൛]

    View Slide

  2. 開発をしている時の叫び

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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ͷʮίίʹ໰୊͕͋Δʯ͕ߦϨϕϧͰ෼͔ΔΑ͏ʹͳΔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 開発者は叫ぶ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. §2
    ざっくり概要

    View Slide

  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.”

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. §3
    使い⽅

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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ͷํ͕खܰͦ͏

    View Slide

  40. §4
    まとめ

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide