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
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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コードの複雑さを定量的に評価してみた
Search
bqnq
October 09, 2025
Technology
140
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
210
メタプログラミングと モンキーパッチの話
bqnq
0
25
35歳までの若手エンジニア限定LT大会
bqnq
0
41
Other Decks in Technology
See All in Technology
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
290
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
200
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
140
Running Kotlin + Quarkus with Lambda
nealle
1
4k
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
120
How to Design Configuration for Rails Applications
willnet
1
860
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
350
AI導入は済んだ。次は統制を作り替える番だ_AI×開発組織 Summit 2026
techtekt
PRO
0
390
freeeにおけるSoftware Factory
freee
PRO
0
100
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
210
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
310
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
WCS-LA-2024
lcolladotor
0
900
Speed Design
sergeychernyshev
33
2.2k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
What's in a price? How to price your products and services
michaelherold
247
13k
Scaling GitHub
holman
464
140k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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