Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

X : @kotomin_m #phpcon_nagoya 早速ですが、 質問です!

Slide 3

Slide 3 text

X : @kotomin_m #phpcon_nagoya 複雑なプロダクトコード、 リファクタリングしてますか? 󰢧

Slide 4

Slide 4 text

X : @kotomin_m #phpcon_nagoya リファクタリングの効果を ちゃんと測れてますか? 󰢧

Slide 5

Slide 5 text

X : @kotomin_m #phpcon_nagoya そんなあなたに・・

Slide 6

Slide 6 text

X : @kotomin_m #phpcon_nagoya PhpMetricsを紹介!

Slide 7

Slide 7 text

X : @kotomin_m #phpcon_nagoya ことみんです! ●所属:ウィルゲート ●出身:北海道 ●好きなリファクタリング 「使ってないコードを消す」

Slide 8

Slide 8 text

X : @kotomin_m #phpcon_nagoya 名古屋メシ満喫してきました! 矢場とん ラケル

Slide 9

Slide 9 text

X : @kotomin_m #phpcon_nagoya 1. PhpMetrics とは? 2. メトリクスってどうやって出してるの? 3. リファクタリングに活用した事例 4. 今後の展望・締め 残り4分15秒で

Slide 10

Slide 10 text

X : @kotomin_m #phpcon_nagoya 「PhpMetrics」とは 美しく、 わかりやすい、 静的解析ツール

Slide 11

Slide 11 text

X : @kotomin_m #phpcon_nagoya 「PhpMetrics」とは コードを解析し 数値化した レポートを出力

Slide 12

Slide 12 text

X : @kotomin_m #phpcon_nagoya PhpMetricsのメリット 5分で はじめられます

Slide 13

Slide 13 text

X : @kotomin_m #phpcon_nagoya $ composer global require 'phpmetrics/phpmetrics' $ php ./vendor/bin/phpmetrics --report-html=myreport コマンド2回打つだけ

Slide 14

Slide 14 text

X : @kotomin_m #phpcon_nagoya コマンド2回打つだけ 簡単でうれしい! $ composer global require 'phpmetrics/phpmetrics' $ php ./vendor/bin/phpmetrics --report-html=myreport

Slide 15

Slide 15 text

X : @kotomin_m #phpcon_nagoya 出力されたレポート

Slide 16

Slide 16 text

X : @kotomin_m #phpcon_nagoya コード行数

Slide 17

Slide 17 text

X : @kotomin_m #phpcon_nagoya コード行数 クラス数

Slide 18

Slide 18 text

X : @kotomin_m #phpcon_nagoya コード行数 クラス数 バグ指数(バグりやすさ)

Slide 19

Slide 19 text

X : @kotomin_m #phpcon_nagoya これどうやって 計算してるの?

Slide 20

Slide 20 text

X : @kotomin_m #phpcon_nagoya メトリクスの計算式

Slide 21

Slide 21 text

X : @kotomin_m #phpcon_nagoya メトリクスの計算式 演算子 オペランド と

Slide 22

Slide 22 text

X : @kotomin_m #phpcon_nagoya メトリクスの計算式 演算子 オペランド 算術演算子 +, - 比較演算子 >, == etc……

Slide 23

Slide 23 text

X : @kotomin_m #phpcon_nagoya メトリクスの計算式 演算子 オペランド 算術演算子 +, - 比較演算子 >, == etc…… 変数 $a, $hoge 配列 $array[0] 関数名 etc……

Slide 24

Slide 24 text

X : @kotomin_m #phpcon_nagoya メトリクスの計算式 ●     と      の、 個数 と 種類数 を使って、それぞれ計算 演算子 オペランド n1 演算子の種類数 n2 オペランドの種類数 N1 演算子の個数 N2 オペランドの個数

Slide 25

Slide 25 text

X : @kotomin_m #phpcon_nagoya 複雑度 バグ指数 メトリクスの計算式 ※詳しくは公式ドキュメントを読んでね

Slide 26

Slide 26 text

X : @kotomin_m #phpcon_nagoya PhpMetricsで リファクタリング前後の 数値を比較してみた

Slide 27

Slide 27 text

X : @kotomin_m #phpcon_nagoya リファクタ手順 1. リファクタ対象決め 2. クラスの分割方法の検討 3. テストコードの実装 4. リファクタを実装

Slide 28

Slide 28 text

X : @kotomin_m #phpcon_nagoya 1.リファクタ対象決め ●バグ指数等が高いクラスから、いくつか ピックアップして比較検討

Slide 29

Slide 29 text

X : @kotomin_m #phpcon_nagoya ●全体で2番目に複雑なクラスに決定 ○ 中〜小規模の計71メソッドがあるクラス 1.リファクタ対象決め

Slide 30

Slide 30 text

X : @kotomin_m #phpcon_nagoya 1.リファクタ対象決め バグ指数 4.26 ●全体で2番目に複雑なクラスに決定 ○ 中〜小規模の計71メソッドがあるクラス

Slide 31

Slide 31 text

X : @kotomin_m #phpcon_nagoya 1.リファクタ対象決め バグ指数 4.26 ●全体で2番目に複雑なクラスに決定 ○ 中〜小規模の計71メソッドがあるクラス 通常より4.26倍 バグになりやすい

Slide 32

Slide 32 text

X : @kotomin_m #phpcon_nagoya 2.分割方法の検討 ●メソッド一覧をスプシに洗い出して整理 ○ 引数や呼び出し元などを調査 ●最終的なディレクトリ/ファイル構成を決定

Slide 33

Slide 33 text

X : @kotomin_m #phpcon_nagoya 3.テストコードの実装 ●移植後の動作を担保する目的 ●全メソッドにテストコードがある状態に ○ 今回は3~4割のメソッドのテストを追加 ○ ChatGPTを活用

Slide 34

Slide 34 text

X : @kotomin_m #phpcon_nagoya 4.実装 1.新しいクラスに実装&テストをコピー 2.新しいクラスを利用するように差し替え 3.古いクラスを削除

Slide 35

Slide 35 text

X : @kotomin_m #phpcon_nagoya バグ指数を比較 Before After 4.26 1クラス

Slide 36

Slide 36 text

X : @kotomin_m #phpcon_nagoya バグ指数を比較 Before After 4.26 9クラス 1クラス

Slide 37

Slide 37 text

X : @kotomin_m #phpcon_nagoya バグ指数を比較 0.52 0.52 0.54 0.4 0.23 0.15 0.51 0.06 0.36 4.26 Before After 1クラス 9クラス

Slide 38

Slide 38 text

X : @kotomin_m #phpcon_nagoya やってみた感想 ●数値での判断軸が1つ増える → 対象を決めるときの参考にしやすい ●リファクタ後の成果が数値で見れる → けっこう嬉しい

Slide 39

Slide 39 text

X : @kotomin_m #phpcon_nagoya 今後の展望 ●数値で見れることを活用して改善サイクル を回したい ●社内の複数プロダクトでの活用

Slide 40

Slide 40 text

X : @kotomin_m #phpcon_nagoya Let's! 5分ではじめる PhpMetrics活用 リファクタリング!