386 Views
March 05, 25
スライド概要
つくてくトーク 〜ウチのとこ〜
https://tsukulink.connpass.com/event/344807/
がんばります
ウチのrails stats #つくてくトーク 〜ウチのとこ〜 #6 ツクリンク株式会社 あっきー(@kuronekopunk)
⾃⼰紹介 ● あっきー @kuronekopunk ● ツクリンク株式会社 ● 経歴 ○ ○ エンジニアリングマネージャー 2011年 新卒 SESでPHP 2012年 ㈱ハンズシェア創業(現:ツクリンク㈱) ■ ツクリンクの0→1の開発 ■ PHP→Railsのリプレイス ■ SEO、グロースハック ■ データアナリスト ■ 採⽤広報 ● イベント『EMゆるミートアップ』『カクカクシカジカモデリング』 ● ポッドキャスト『ぐんぐんfm』
まずはrails statsを⾒てみよう
rails statsを⾒てみよう
stats項⽬のおさらい Lines: コードの⾏数(コメント⾏や空⾏も含む合計⾏数) LOC (Lines of Code): ソースコード⾏数(コメント⾏‧空⾏を除いた実際のコード⾏数) Classes: クラスの数(定義されているクラス数) Methods: メソッドの数(定義されているメソッド数) M/C (Methods per Class): 1クラスあたりの平均メソッド数 LOC/M (LOC per Method): 1メソッドあたりの平均コード⾏数 Code to Test Ratio: コードとテストの⽐率
statsの各項⽬を⾒てみよう
メソッドあたりのコード⾏数 (LOC/M)
メソッドあたりのコード⾏数(LOC/M) Controllers: 7⾏ Models: 10⾏ メソッドは短いほうが読みやすく保守しやすいため⼩さい値が望ましい
メソッドあたりのコード⾏数(LOC/M) Sandi Metz⽒のガイドライン⽈く5⾏以内 (オブジェクト指向設計実践ガイドの著者) https://yiming.dev/blog/2017/08/23/sandi-metzs-rules-for-oop/#org30afdda RubocopのMetrics/MethodLengthデフォルトは10⾏ https://github.com/rubocop/rubocop/blob/4decbc32dfbc30497866a2799328b82fb0be5029/config/default.yml#L2748 →推奨は5〜10⾏程度らしい
メソッドあたりのコード⾏数(LOC/M) ツクリンクではRubocopの設定が50⾏ ⼀部に神メソッドがいるかも
クラスあたりのメソッド数(M/C) コード⾏数(LOC/C)
クラスあたりのメソッド数(M/C) Controllers,Models: 6method/class 神クラス、Fat Model、Fat Controllerなどを避けたい
クラスあたりのメソッド数(M/C)→クラスあたりのコード⾏数(LOC/C) メソッド数は処理にもよるのでクラスあたりのコード⾏数を参照してみる Sandi Metz⽒のガイドライン⽈く1クラス100⾏以内 https://yiming.dev/blog/2017/08/23/sandi-metzs-rules-for-oop/#orgf9800e1 RubocopのMetrics/ClassLengthも100⾏ https://github.com/rubocop/rubocop/blob/4decbc32dfbc30497866a2799328b82fb0be5029/config/default.yml#L2720
クラスあたりのコード⾏数(LOC/C) ツクリンクではRubocopの設定が250⾏ ⼀部に神クラスがいるかも
コードとテストの⽐率 (Code to Test Ratio)
コードとテストの⽐率 (Code to Test Ratio) 本番コード⾏数と同程度か それ以上のテスト⾏数が望ましい 「1:0.7」は少ない?
テストコードを深堀りしてみよう 2025/02/20時点でのCoverageAllのカバレッジ 79.1% ⼀般的には80~90%くらいがベター どんどん増やせばいいの? → No テスト実⾏にもコストがかかるので過不⾜なくテストしていきたい。
テスト実⾏時間を⾒てみる test_unit(Unitテスト、Integrationテスト) 実⾏時間7分、1.5万件、2並列 test_system(E2Eテスト) 実⾏時間9分、600件、4並列
テストにはコストがかかる CIを待つ時間、レビューやデプロイの遅れるビジネス的な影響 CIを実⾏するコンピューティングの料⾦ 1⽇あたりのPush回数(エンジニア数 x ⽇あたりのエンジニアのPush数) 組織が⼤きくなる、Push頻度が増えるほどCI実⾏コストは⾼くなっていく テストが消されるまで永続的にコストがかかっていく💰
良いテストコードを書いていくために テスト設計について学び、コストの低いテストで担保できないか考慮して テストコードを書いていきたい 出典: https://speakerdeck.com/twada/building-automated-test-culture-2024-winter-edition?slide=60
さいごに rails statsの話から、最近気になっているテストのコストの話をしました。 statsの指標のLOC/MやM/Cも、ただ分割すれば良いわけではなく、オブジェクト 指向の原則にそって適切に設計し分割していくことが⼤事です。 また設計次第でテスト容易性も変わるためテストにも響いていきます。 より良いソフトウェアを作っていくためにオブジェクト指向から改めて学んでい きましょう。
Thanks. 🙌