Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture ...
Search
Isana
January 25, 2023
Programming
2
1.2k
PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture Metrics in PHP Applications
以下のイベントの発表資料です。
https://increments.connpass.com/event/270421/
Isana
January 25, 2023
Tweet
Share
More Decks by Isana
See All by Isana
Web Industory Super Beginners Guide
isanasan
0
150
開発組織の生産性を可視化するState of DevOpsとFour Keysとは(増補改訂版) / Introduction to State of DevOps and Four Keys for Visualizing Productivity in Development Organizations expanded and revised edition
isanasan
23
9.8k
今あらためて考える PHPに型定義をする理由 / why use type hint and static analyse at php
isanasan
0
2k
「LeanとDevOpsの科学」を実践して LancersのDevOps的取り組みとこれから / Lancers' DevOps efforts and the future
isanasan
0
1.5k
開発組織の生産性を可視化する State of DevOpsとFour Keysとは / deep dive into State of DevOps
isanasan
0
1.2k
Other Decks in Programming
See All in Programming
2ヶ月で生産性2倍、お買い物アプリ「カウシェ」4チーム同時改善の取り組み
ike002jp
1
110
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
PHP で学ぶ OAuth 入門
azuki
1
220
Cursor/Devin全社導入の理想と現実
saitoryc
27
20k
エンジニア向けCursor勉強会 @ SmartHR
yukisnow1823
2
10k
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
190
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
180
個人開発の学生アプリが企業譲渡されるまで
akidon0000
0
1.1k
Compose Hot Reload is here, stop re-launching your apps! (Android Makers 2025)
zsmb
1
580
AI時代の開発者評価について
ayumuu
0
230
大LLM時代にこの先生きのこるには-ITエンジニア編
fumiyakume
7
3.2k
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
310
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
770
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Code Reviewing Like a Champion
maltzj
523
40k
Visualization
eitanlees
146
16k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
Transcript
PHPアプリケーションにおける アーキテクチャメトリクスについて Qiita Night PHP by @isanasan_ 1
自己紹介 Qiita Night PHP by @isanasan_ 2
Lancers Productivity Team DevOpsに興味関心がある @isanasan_ @isanasan @isana Qiita Night PHP
いさな by @isanasan_ 3
対象者 Qiita Night PHP by @isanasan_ 4
負債に苦しむエンジニア テックリード プレイングマネージャー Qiita Night PHP 対象者 by @isanasan_ 5
Qiita Night PHP アーキテクチャメトリクスとは by @isanasan_ 6
アーキテクチャの保守性を測定するための指標 Qiita Night PHP アーキテクチャメトリクスとは by @isanasan_ 7
Qiita Night PHP 保守性とは by @isanasan_ 8
システム/ソフトウェア製品品質(SQuaRE) Qiita Night PHP 保守性とは by @isanasan_ 9
Qiita Night PHP システム/ソフトウェア製品品質(SQuaRE) https://www.ipa.go.jp/sec/reports/20150331_1.html 10
以下の項目が今どのくらいヤバいのかを数字で示すためのもの モジュール性 再利用性 理解容易性 修正性 テスト容易性 Qiita Night PHP つまりアーキテクチャメトリクスとは
by @isanasan_ 11
Qiita Night PHP ?? by @isanasan_ 12
Qiita Night PHP 具体的なユースケース by @isanasan_ 13
Qiita Night PHP とあるサービス by @isanasan_ 14
Qiita Night PHP 疲弊した現場 by @isanasan_ 15
荒みきったコード Qiita Night PHP by @isanasan_ 16
Qiita Night PHP 爆弾処理のようなリリース by @isanasan_ 17
Qiita Night PHP 改善したい!!!!!!! by @isanasan_ 18
Qiita Night PHP 今動いているものを直す必要ある? 効果測定どうやんの? 費用対効果はどれくらい? by @isanasan_ 19
説得失敗 Qiita Night PHP by @isanasan_ 20
Qiita Night PHP 改善の黄金パターン by @isanasan_ 21
1. 課題を認識する 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める 3. 改善施策を実施する 4. 振り返りを行う Qiita Night
PHP 改善の黄金パターン by @isanasan_ 22
Qiita Night PHP ソフトウェア開発の現場では? by @isanasan_ 23
もちろんソフトウェア開発の現場でも考え方は同じ 特に「正確な現状把握」は必要不可欠 パフォーマンスチューニングはその代表的な例 Qiita Night PHP ソフトウェア開発の現場では? by @isanasan_ 24
Qiita Night PHP アーキテクチャの保守性を改善する時は? by @isanasan_ 25
Qiita Night PHP コードスメル(不吉な匂い) by @isanasan_ 26
定性的指標(≒ 暗黙知) 経験値に依存する 効果測定や優先順位付けが難しい 対外的な説明には使えない Qiita Night PHP コードスメルの欠点 by
@isanasan_ 27
再掲 Qiita Night PHP by @isanasan_ 28
1. 課題を認識する 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める 3. 改善施策を実施する 4. 振り返りを行う Qiita Night
PHP 改善の黄金パターン by @isanasan_ 29
1. 課題を認識する コードスメル 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める 3. 改善施策を実施する 4. 振り返りを行う Qiita
Night PHP 改善の黄金パターン by @isanasan_ 30
1. 課題を認識する 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める アーキテクチャメトリクス 3. 改善施策を実施する 4. 振り返りを行う Qiita
Night PHP 改善の黄金パターン by @isanasan_ 31
Qiita Night PHP 定性的指標から定量的指標へ by @isanasan_ 32
利点 Qiita Night PHP by @isanasan_ 33
コードスメルのような暗黙知を形式知にすることが出来る 効果測定を行うことでフィードバックサイクルを回せる 測定基準を設けることで負債を未然に防ぐ Qiita Night PHP 利点 by @isanasan_ 34
Qiita Night PHP 代表例と測定ツール by @isanasan_ 35
理解容易性に関連するメトリクス テスト容易性に関連するメトリクス その他 Qiita Night PHP 代表例と測定ツール by @isanasan_ 36
循環的複雑度(CCN) 要するに分岐の数 24以上の値ではエラーレートが急速に増加すると言われている 加重平均を用いることで時系列推移を計測できる Qiita Night PHP 理解容易性に関連するメトリクス by @isanasan_
37
bmitch/churn-php 変更頻度で重み付けしたCCNのスコアを計測するツール Qiita Night PHP PHPの循環的複雑度を計測するツール by @isanasan_ 38
Qiita Night PHP churn-php by @isanasan_ 39
terryyin/lizard CCNを含む複数の指標で複雑さを計測するツール 行数、CCN、token、引数の数を計測してくれる 出力形式にxmlやhtmlを選べる Qiita Night PHP PHPの循環的複雑度を計測するツール by @isanasan_
40
============================================================== NLOC CCN token param function@line@file -------------------------------------------------------------- 10 2 29
2 start_new_player@26@./html_game.c Qiita Night PHP lizard by @isanasan_ 41
テストカバレッジ テストコードとプロダクトコードの割合 テストの実行時間 Qiita Night PHP テスト容易性に関連するメトリクス by @isanasan_ 42
k1LoW/octocov カバレッジ、コードの割合、実行時間を全て計測できる CIフレンドリー PRにコメントしたり 複数リポジトリの数値を収集したりできる Qiita Night PHP テスト容易性を計測するツール by
@isanasan_ 43
Qiita Night PHP octocov by @isanasan_ 44
edsonmedina/php_testability 密結合になっている箇所(new演算子とか)を数えて テスト容易性のリストを出力できる Qiita Night PHP テスト容易性を計測するツール by @isanasan_ 45
Qiita Night PHP php_testability by @isanasan_ 46
変更頻度と変更人数 あまりにも多くの人が頻繁に変更を加えるソースは責務が大きすぎる可能性がある churn-php もこれで循環的複雑度を重み付けしている PRのリードタイム アーキテクチャ のメトリクスとは言えないが、アーキテクチャメトリクスの遅行指標 として扱える 例えば,「理解容易性が悪化すればPRのリードタイムは伸びる」みたいな Qiita
Night PHP その他のもの by @isanasan_ 47
最後に Qiita Night PHP by @isanasan_ 48
Qiita Night PHP アーキテクチャメトリクスはめっちゃ種類ある by @isanasan_ 49
累積コンポーネント依存度(CCD) 平均コンポーネント依存度(ACD) 伝搬コスト(PC) 相対循環依存度(RC) 構造的負債指数(SDI) Qiita Night PHP アーキテクチャメトリクスはめっちゃ種類ある by
@isanasan_ 50
Qiita Night PHP 現場によって抱えている課題は異なる by @isanasan_ 51
Qiita Night PHP あなただけのメトリクスを見つけよう by @isanasan_ 52
Qiita Night PHP PHPで使えるツールも沢山ある by @isanasan_ 53
exakat/php-static-analysis-tools このリポジトリにまとまっている メンテされなくなったものも紛れてるので注意 DeGraciaMathieu/php-arguments-detector 引数が多すぎないかどうかをチェックするツール phpmetrics/PhpMetrics 結構色々取れるツール。 結果がHTMLでしか出力できないのでCIと組み合わせたりするのはちょっと手間 Qiita Night
PHP PHPで使えるツールも沢山ある by @isanasan_ 54
Qiita Night PHP 測りたい指標を決めたら探してみよう by @isanasan_ 55
まとめ Qiita Night PHP by @isanasan_ 56
保守性を改善するときはアーキテクチャメトリクスを計測しよう 現場の課題に合ったメトリクスを見つけよう PHPの現場で使えるツールは沢山あるので探してみよう Qiita Night PHP まとめ by @isanasan_ 57