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
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
890
Classmethod Company Deck
satoshi7
1
740
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
260
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.4k
夫婦で子育てするための育児標準化
codmoninc
PRO
0
480
CloudWatch Logsのコスト最適化:どこまでAIに任せてどこから人間が承認すべきか
yama3133
0
120
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
310
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
160
Running Kotlin + Quarkus with Lambda
nealle
1
4k
「エーアイ」をバズワードにしないために RPA 導入経験と Kiro 上での Claude モデル利用経験から
kazzpapa3
0
100
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
800
Designing for Performance
lara
612
70k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
890
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Amusing Abliteration
ianozsvald
1
350
First, design no harm
axbom
PRO
2
1.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
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