Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コードの複雑さを定量的に評価してみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
bqnq
October 09, 2025
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コードの複雑さを定量的に評価してみた
bqnq
October 09, 2025
More Decks by bqnq
See All by bqnq
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
110
メタプログラミングと モンキーパッチの話
bqnq
0
16
35歳までの若手エンジニア限定LT大会
bqnq
0
33
Other Decks in Technology
See All in Technology
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
920
Tab5をRubyで動くパソコンにする
kishima
2
270
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
270
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
240
AIで仕事のやり方を変える
matsu7874
3
1k
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
560
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
970
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
340
Claude Code本って、 読む必要あるの?
oikon48
1
190
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
180
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
300
Webとヘルスデータ
yukukotani
1
200
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Making Projects Easy
brettharned
120
6.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Skip the Path - Find Your Career Trail
mkilby
1
220
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
Tell your own story through comics
letsgokoyo
1
1.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
HDC tutorial
michielstock
2
850
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Amusing Abliteration
ianozsvald
1
290
Transcript
1 コードの複雑さを 定量的に評価してみた @bqnq d2i-25 2025/10/08 GMO ペパボ株式会社 EC事業部
2 ⾃⼰紹介 EC事業部 プロダクトチーム 2025年 新卒⼊社 bqnq(ばな) Kikuchi Shinji 普段はRailsとMySQLと向き合っています。 •
今⽇給料⽇だと浮かれていたら明⽇でした 💴 • チェーンソーマン レゼ編を⾒ました 💣🌺 • Twitter : @_bqnq
突然ですが 3
AIが書いたコードを読むの つらくないですか? 4
AIが書いたコードに機能を追加する のが⼤変だったので評価してみました 5
なぜLTでこの話をしようと思ったのか? 6 • 研修の⼀環で成果物を⾃分たちで考えてアウトプット • 期間は2週間でゼロから実装、⾔語はGoを選択 • AI Agentを使う前提で、開発を進めた •
新しく機能を追加するのに時間がかかってしまった きっかけ: 機能追加に時間がかかった
AIが書いたコードが複雑だった 7 • ファイル処理の機能を追加 .csv形式に加えて.xlsx形式にも対応したい • 簡単そうに⾒えて⼤変だった 処理の中に、外部からファイルを取得、.csv形式 のみに対応したエンコード処理が含まれていた ⼤変だったこと
コードリーディングが下⼿? or 実装が複雑になっている? 8
複雑性を評価指標で評価してみる 9
循環的複雑度 10 • Thomas J. McCabeによって提案された指標 • M = E
- N + 2P E: エッジ数, N:ノード数, P:連結成分 循環的複雑度 (Cyclomatic Complexity: CC ) https://www.mccabe.com/pdf/mccabe-nist235r.pdf if (n == 0) { x += 1; } else if n >= 1 { x += 2; } else { x = 0; } else if if start x+=1 x+=2 x=0 end E = 8 N = 7 P = 1 M = 2
循環的複雑度の数値と実装の対応 11 循環的複雑度が⾼い実装と低い実装 条件分岐が複雑化するほど循環的複雑度も⾼くなる price = input() if price >
10000: if price > 50000: tax = price * 0.2 else: tax = price * 0.15 else: if price > 5000: tax = price * 0.1 else: if price > 1000: tax = price * 0.05 price = input() rate = 0.0 if price > 50000: rate = 0.2 elif price > 10000: rate = 0.15 elif price > 5000: rate = 0.1 elif price > 1000: rate = 0.05 tax = price * rate if price % 2 == 0: tax += 50 print(price + tax)
循環的複雑度 12 • 循環的複雑度の値についてMathWorksが意味付け • 10以下が望ましく、30以上でリファクタ対象 循環的複雑度の値の意味 https://jp.mathworks.com/discovery/cyclomatic-complexity.html
循環的複雑度 CC を計算してみる 13 • プロジェクトのコードはGoで実装 • gocyclo: Go向けの循環的複雑度を計算するコマンド 実際に調査してみた
https://github.com/fzipp/gocyclo
調査結果 14 調査結果: 循環的複雑度が⾼いファイルが存在 ファイル処理を⾏っている実装箇所のCCが29と⾼い値に 循環的複雑度が20を超える実装が4つ
最初からCCが⾼かった? or 機能追加によって⾼くなった? 15
調査結果 16 commitを遡り循環的複雑度の推移を計算 commit毎に循環的複雑度は増加 ある時点から急激に増加している commit、古いほど左 循環的複雑度の総和
調査結果 17 commitを遡り循環的複雑度の推移を計算 commit、古いほど右 循環的複雑度の総和 Excel処理、計算処理、検証ロジック追加 基本的なCSV処理 データ抽出機能追加
調査結果 18 循環的複雑度が10以上の関数の数の推移 循環的複雑度が10以上の関数の数 commit、古いほど右 グラフが右肩上がり コミットが増えるたび関数が複雑化
調査結果の分析 19 1. 要件変更に伴い1つの関数への責任が増加 情報抽出 + エラーハンドリング + データ計算, ⽣成
2. 条件分岐の複雑化 if → switch、多重if 3. 関数のネストの深さが増加。2層から6層へ CCが⾼くなった要因
まとめ 20 • コード品質を評価する指標に循環的複雑度がある • 機能追加により、循環的複雑度が急に増加する可能性 • 複雑度が増加する要因には、機能追加の際に 関数の責務が増えてしまうことが挙げられる •
CIで循環的複雑度を計算して、対策できそう まとめ
コードを定量評価してみると 発⾒があって⾯⽩いかもしれません! 21