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

もう細かいレビューは したくない、されたくない

もう細かいレビューは したくない、されたくない

Laravel MeetUp Okinawa で話した内容です。

Laravelを使った Github Actions, 静的解析(Larastan), 自動整形(PHP-CS-Fixer)の説明と使い方について発表しました。

namizatork

August 25, 2021
Tweet

More Decks by namizatork

Other Decks in Programming

Transcript

  1. www.bengo4.com
    もう細かいレビューは
    したくない、されたくない
    Laravel MeetUp Okinawa
    2021.8.25 namizato

    View Slide

  2. 2
    2
    並里 辰也(ナミザト タツヤ)
    自己紹介
    弁護士ドットコム株式会社 在籍そろそろ1年
    Laravelが好きでたまにQiitaに投稿してます
    最近 Github Actions が楽しい
    @namizatork

    View Slide

  3. Bengo4.com, Inc.
    弁護士ドットコム
    というサービス
    ● 一般市民と弁護士を結びつ
    け、お悩み解決を目指す
    ● 2005年サービス開始
    ● 約900万セッション/ 月
    ● 約300件の法律相談/ 日
    3

    View Slide

  4. Bengo4.com, Inc.
    目次
    ● 今回話す内容
    ● 静的解析(PHPStan)
    ● 自動整形(PHP-CS-Fixer)
    ● CI(Github Actions)
    4

    View Slide

  5. 今回話す内容
    5

    View Slide

  6. Bengo4.com, Inc. 6
    突然だが、レビューでこんなことを
    言われた / 言ったこと経験はないだろうか

    View Slide

  7. Bengo4.com, Inc. 7
    「インデント!!これもう指摘、3度目!!!」

    View Slide

  8. Bengo4.com, Inc. 8
    「ここの変数未定義だし、ここも型合ってないよ!!!」

    View Slide

  9. Bengo4.com, Inc. 9
    指摘された側も反省して、
    気をつけるけど人間だし、同じミスはしてしまう。
    指摘する側もロジックのレビューに集中したいし、
    こんな細かいレビューを毎回やり取りするのも大変。

    View Slide

  10. Bengo4.com, Inc.
    そういう時は
    CIで自動整形と
    静的解析を導入しよう
    10

    View Slide

  11. 静的解析
    (PHPStan)
    11

    View Slide

  12. Bengo4.com, Inc.
    静的解析(PHPStan)
    プログラムコードを実行せずにドキュメントやソースコードなどのチェックによって誤りや脆弱性を検出す
    るテスト手法。
    それらをPHPで提供されているのが静的解析ツール(今回は PHPStan)です。
    今回はLaravel専用のPHPStanのラッパーライブラリ Larastanを使用します。
    12

    View Slide

  13. Bengo4.com, Inc.
    静的解析とは
    ● 仕様
    ○ プログラムを実行せずに解析される(ただし PHPstanは一部実行する)
    ○ 未定義の変数/メソッド/Class/プロパティなどを検出
    ○ その他PHPDocの構文不備や分岐のチェックも
    ● メリット
    ○ 静的に解析される箇所は網羅的にテストができる
    ○ テストを書く必要がないのでコストが少ない
    ○ 変数の未定義など細かいエラーが事前に分かるのでコードレビューの手間が省ける
    ● デメリット
    ○ 無限ループなどは検出できない
    13

    View Slide

  14. Bengo4.com, Inc.
    PHPDoc
    14
    ● コードの見通しが良くなる
    ● IDEの補完が効くようになる
    ● 静的解析ができる

    View Slide

  15. Bengo4.com, Inc.
    Levelや範囲などの設定
    15
    /phpstan.neon
    ● includes
    ○ 設定ファイルの読み込み
    ● paths
    ○ 対象ファイル
    ● level
    ○ 静的解析のレベル 1 ~ 7
    ● excludePaths
    ○ 無視ファイル

    View Slide

  16. Bengo4.com, Inc.
    使い方
    16
    ./vendor/bin/phpstan analyze
    と実行するだけで手動で静的解析が
    走ります。

    View Slide

  17. 自動整形
    (PHP-CS-Fixer)
    17

    View Slide

  18. Bengo4.com, Inc.
    自動整形(PHP-CS-Fixer)
    コーディング規約を設定した基準沿って自動でコーディングを統一する機能。
    その機能をPHPで提供されているのが PHP-CS-Fixer (他にもPHP_CodeSnifferなどがある) で
    す。
    PHP-CS-Fixer では公式で PSR-1 や PSR-2 、他にも Symfonyコミュニティ の標準 などが用意され
    ていて、それらを使うことも自身でカスタマイズして使用することができる。
    また VSCode でプラグインも用意されており、保存時に自動整形することも可能です。
    18

    View Slide

  19. Bengo4.com, Inc.
    カスタマイズ
    19
    /.php-cs-fixer.dist.php
    ver3.0.0 からphpファイル
    ● Finder::create()
    ○ 対象ファイル
    ● setRiskyAllowed
    ○ リスクが高い変更の許可
    ● setRules
    ○ カスタマイズするルール設定
    を記述

    View Slide

  20. Bengo4.com, Inc.
    使い方
    20
    ./vendor/bin/php-cs-fixer fix -v --diff
    --dry-run
    整形箇所のピックアップ
    ./vendor/bin/php-cs-fixer fix -v --diff
    自動整形を適用する

    View Slide

  21. CI(Github
    Actions)
    21

    View Slide

  22. Bengo4.com, Inc.
    CI(GithubActions)
    CIとは、Continuous Integrationの略で、継続的インテグレーションと呼ばれていて、
    開発、テスト、リリースのサイクルが継続的に行われていく様子の事であり、それらを円滑に使用出来る
    様にしたものがCIツールです。
    CIツールは Github Actions だけでなく、複数のツールが存在している( Circle CIなど)
    Github Actions を使うメリットは無料( privateリポジトリは月2,000時間まで)という点と、普段利用し
    ている Github内のプロジェクトに .github/workflows/ ディレクトリを用意して設定ファイルを書くだけ
    で利用できる手軽さにあります。(個人的見解)
    他にも公式が用意しているテンプレートを使用することもできます。
    22

    View Slide

  23. Bengo4.com, Inc.
    Github Actions の
    設定ファイル
    23
    ● /.github/workflows/ に
    yaml形式で記入する
    ● on: CIが走るタイミングを決め

    ● jobs: stepsの集まり
    ● steps: jobを構成するAction
    ● などなど

    View Slide

  24. Bengo4.com, Inc. 24
    では、ここまで学んだ静的解析と自動整形を
    CIで設定してみよう!

    View Slide

  25. Bengo4.com, Inc.
    PHPStan(Larastan)
    25
    /.github/workflows/larastan.yml
    マスターに対してプルリクエスト、
    マージが行われたタイミングでテスト
    が走るように設定。

    View Slide

  26. Bengo4.com, Inc.
    PHP-CS-Fixer
    26
    /.github/workflows/php-cs-fixe
    r.yml
    こちらもLarastanと同様のトリガー
    でテストを実行します。
    今回は `dry-run` で差分を出力ま
    でしかしていません。
    自動整形を適用させたい人は ↓追加
    ./vendor/bin/php-cs-fixer fix -v --diff

    View Slide

  27. Bengo4.com, Inc.
    CIで落ちる実装
    27
    あえてテストが落ちるように実装し
    て、CIが走るようにプルリクを作って
    みた。

    View Slide

  28. Bengo4.com, Inc.
    プルリクを作成
    28
    先ほどの実装でプルリクを作ってみ
    た。
    Github Actions を使っていると、
    Merge pull request の上にテスト
    が走っているのが分かる。
    テストが落ちると右の図のように、ど
    のテストが落ちていて、 Merge pull
    request が不活性になっているのが
    確認できる。
    CIが走っている
    CIが落ちている

    View Slide

  29. Bengo4.com, Inc.
    Larastanのテスト結果
    29
    確認すると以下の内容で、怒られて
    いるのが確認できる。
    ● 引数の型不一致
    ● 戻り値の型不一致
    ● 未定義の変数の使用

    View Slide

  30. Bengo4.com, Inc.
    PHP-CS-Fixerのテスト結果
    30
    確認すると以下の内容で、怒られて
    いるのが確認できる。
    ● declareの改行
    ● namespaceの改行
    ● array()の使用

    View Slide

  31. Bengo4.com, Inc.
    修正して再度プッシュ
    31
    先ほどの内容をfixupで修正して、
    再度プッシュしてみました。
    そうするとテストが全部通って、
    Merge pull requestが活性化して
    いるのが確認できました。
    これでプルリクでレビュワーをアサイ
    ンする前に細かいレビューで指摘さ
    れることがなくなりました!ヤッタネ (
    ^ω^ )

    View Slide

  32. Bengo4.com, Inc. 32
    ここまで学んだ内容をGithubのリポジトリに上げています。
    https://github.com/namizatork/larave-environment

    View Slide

  33. ご清聴ありがとう
    ございました。
    33

    View Slide