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

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

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

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

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

1998b7a88550e8c58f7efb17d7b72a29?s=128

namizatork

August 25, 2021
Tweet

Transcript

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

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

    Github Actions が楽しい @namizatork
  3. Bengo4.com, Inc. 弁護士ドットコム というサービス • 一般市民と弁護士を結びつ け、お悩み解決を目指す • 2005年サービス開始 •

    約900万セッション/ 月 • 約300件の法律相談/ 日 3
  4. Bengo4.com, Inc. 目次 • 今回話す内容 • 静的解析(PHPStan) • 自動整形(PHP-CS-Fixer) •

    CI(Github Actions) 4
  5. 今回話す内容 5

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

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

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

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

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

  11. 静的解析 (PHPStan) 11

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

  13. Bengo4.com, Inc. 静的解析とは • 仕様 ◦ プログラムを実行せずに解析される(ただし PHPstanは一部実行する) ◦ 未定義の変数/メソッド/Class/プロパティなどを検出

    ◦ その他PHPDocの構文不備や分岐のチェックも • メリット ◦ 静的に解析される箇所は網羅的にテストができる ◦ テストを書く必要がないのでコストが少ない ◦ 変数の未定義など細かいエラーが事前に分かるのでコードレビューの手間が省ける • デメリット ◦ 無限ループなどは検出できない 13
  14. Bengo4.com, Inc. PHPDoc 14 • コードの見通しが良くなる • IDEの補完が効くようになる • 静的解析ができる

  15. Bengo4.com, Inc. Levelや範囲などの設定 15 /phpstan.neon • includes ◦ 設定ファイルの読み込み •

    paths ◦ 対象ファイル • level ◦ 静的解析のレベル 1 ~ 7 • excludePaths ◦ 無視ファイル
  16. Bengo4.com, Inc. 使い方 16 ./vendor/bin/phpstan analyze と実行するだけで手動で静的解析が 走ります。

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

  18. Bengo4.com, Inc. 自動整形(PHP-CS-Fixer) コーディング規約を設定した基準沿って自動でコーディングを統一する機能。 その機能をPHPで提供されているのが PHP-CS-Fixer (他にもPHP_CodeSnifferなどがある) で す。 PHP-CS-Fixer

    では公式で PSR-1 や PSR-2 、他にも Symfonyコミュニティ の標準 などが用意され ていて、それらを使うことも自身でカスタマイズして使用することができる。 また VSCode でプラグインも用意されており、保存時に自動整形することも可能です。 18
  19. Bengo4.com, Inc. カスタマイズ 19 /.php-cs-fixer.dist.php ver3.0.0 からphpファイル • Finder::create() ◦

    対象ファイル • setRiskyAllowed ◦ リスクが高い変更の許可 • setRules ◦ カスタマイズするルール設定 を記述
  20. Bengo4.com, Inc. 使い方 20 ./vendor/bin/php-cs-fixer fix -v --diff --dry-run 整形箇所のピックアップ

    ./vendor/bin/php-cs-fixer fix -v --diff 自動整形を適用する
  21. CI(Github Actions) 21

  22. Bengo4.com, Inc. CI(GithubActions) CIとは、Continuous Integrationの略で、継続的インテグレーションと呼ばれていて、 開発、テスト、リリースのサイクルが継続的に行われていく様子の事であり、それらを円滑に使用出来る 様にしたものがCIツールです。 CIツールは Github Actions

    だけでなく、複数のツールが存在している( Circle CIなど) Github Actions を使うメリットは無料( privateリポジトリは月2,000時間まで)という点と、普段利用し ている Github内のプロジェクトに .github/workflows/ ディレクトリを用意して設定ファイルを書くだけ で利用できる手軽さにあります。(個人的見解) 他にも公式が用意しているテンプレートを使用することもできます。 22
  23. Bengo4.com, Inc. Github Actions の 設定ファイル 23 • /.github/workflows/ に

    yaml形式で記入する • on: CIが走るタイミングを決め る • jobs: stepsの集まり • steps: jobを構成するAction • などなど
  24. Bengo4.com, Inc. 24 では、ここまで学んだ静的解析と自動整形を CIで設定してみよう!

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

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

  28. Bengo4.com, Inc. プルリクを作成 28 先ほどの実装でプルリクを作ってみ た。 Github Actions を使っていると、 Merge

    pull request の上にテスト が走っているのが分かる。 テストが落ちると右の図のように、ど のテストが落ちていて、 Merge pull request が不活性になっているのが 確認できる。 CIが走っている CIが落ちている
  29. Bengo4.com, Inc. Larastanのテスト結果 29 確認すると以下の内容で、怒られて いるのが確認できる。 • 引数の型不一致 • 戻り値の型不一致

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

    • array()の使用
  31. Bengo4.com, Inc. 修正して再度プッシュ 31 先ほどの内容をfixupで修正して、 再度プッシュしてみました。 そうするとテストが全部通って、 Merge pull requestが活性化して

    いるのが確認できました。 これでプルリクでレビュワーをアサイ ンする前に細かいレビューで指摘さ れることがなくなりました!ヤッタネ ( ^ω^ )
  32. Bengo4.com, Inc. 32 ここまで学んだ内容をGithubのリポジトリに上げています。 https://github.com/namizatork/larave-environment

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