cccccc
by
moznion
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
© Timeleap Inc. 1 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun 2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion
Slide 2
Slide 2 text
@moznion タイムリープ株式会社 ソフトウェアエンジニア プロダクト責任者
Slide 3
Slide 3 text
© Timeleap Inc. Cyclomatic Complexity / Cognitive Complexity 3 ● Cyclomatic Complexity - 循環的複雑度 ○ 制御フローを使ってプログラムの複雑さを数学的に定義して 指標としたもの ■ ソフトウェア⼯学的な理論的メトリクス ○ ざっくり⾔うと: どれくらい分岐 (経路) があって複雑なのか ● Cognitive Complexity - 認知的複雑度 ○ ⼈間の認知負荷を数値化して指標としたもの ■ 循環的複雑度の⾜りていない部分を補う⽬的 ■ 開発者体験を重視した実務的メトリクス
Slide 4
Slide 4 text
© Timeleap Inc. Cyclomatic Complexity 4 ● 分岐が増えるほど独⽴した実⾏経路が増える ○ => テストすべき経路数を複雑さとして測る ○ 理論上はコードのグラフを描画して計算して求める ● 定義 ○ M = E - N + 2P ■ M = Cyclomatic Complexity ■ E = Edge(辺) ■ N = Node(ノード) ■ P = 連結成分数 ○ 実質上はグラフを描かず 1 + 分岐数 で計測されることが多い ■ 分岐‧制御構⽂が発⽣するとスコアが+1
Slide 5
Slide 5 text
© Timeleap Inc. Cyclomatic Complexity 5 ● 課題 ○ ネストを考慮しない これらはどちらもスコア4
Slide 6
Slide 6 text
© Timeleap Inc. Cyclomatic Complexity 6 ● 課題 ○ 理解容易性を測ることはできない スコアだけでは負荷の差を考慮できない
Slide 7
Slide 7 text
© Timeleap Inc. Cognitive Complexity 7 ● Cyclomatic Complexityを補うための指標 ● 原則 ○ 線形な流れを壊すと加点 ○ ネストするとネスト階層ぶん加点 ○ シンタックスシュガーは無視
Slide 8
Slide 8 text
© Timeleap Inc. Cyclomatic Complexity / Cognitive Complexity 8 ● Cyclomatic Complexityで⾒れるもの ○ テスト容易性 ○ バグ混⼊リスク ● Cognitive Complexityで⾒れるもの ○ 可読性 ○ 保守性 ○ (「ネストは悪い」「早期 return は良い」「switch は思った ほど悪くない」というような熟達者の経験則のスコア化)
Slide 9
Slide 9 text
© Timeleap Inc. 有⽤なメトリクスなのか? 9 ● YES! ○ 例) ■ 分岐経路は多い (Cyclomatic⾼) ■ 理解は⽐較的容易 (Cognitive低) ■ => テストケースは増えるが保守性は それほど悪くない
Slide 10
Slide 10 text
© Timeleap Inc. 有⽤なメトリクスなのか? 10 ● YES! ○ 例) ■ 経路数は少ない (Cyclomatic低) ■ 理解が難しい (Cognitive⾼) ■ => テストはそれほど⼤変ではないが コードレビューや保守は⾟い
Slide 11
Slide 11 text
© Timeleap Inc. ● No… ○ 現在のソフトウェアの複雑さは「関数」だけに閉じない ○ このメトリクスの値だけを改善してもソフトウェアが 良くなるわけではない ■ むしろいびつになる可能性がある ■ グッドハートの法則 ™ とはいえ数値が低ければ多くの場合良いというのはそう。 有⽤なメトリクスなのか? 11
Slide 12
Slide 12 text
© Timeleap Inc. なぜ今? 12 ● Cyclomatic Complexity は 1976 年、 Cognitive Complexity は 2017 年の概念 ● 依然として有効 ○ 関数の複雑さの測定 ● ⼤規模なアーキテクチャ‧構造の変化による効果を追える ○ ヘルスチェック的にメトリクスを追える ■ どんな変更がどこで起こったのかがわかる ■ ⼤きなリファクタリングをやっている間などでは有益 ○ LLMの台頭によって⼤きな変更が容易になった ○ (LLMにスコアを下げさせる指⽰をすることに意味は……?)
Slide 13
Slide 13 text
© Timeleap Inc. というわけで 13 https://github.com/moznion/cccc ● Cyclomatic/Cognitive Complexity計測器‧CLI ● 特徴 ○ Rust製 ○ ⾼速 ○ Language agnostic (es, rust, goがdefault supported)
Slide 14
Slide 14 text
© Timeleap Inc. cccc 14 ● GitHub Actionsでトラッキングできるようにしている ○ https://github.com/moznion/cccc-es-action ● k1LoW/octocovを使って継続トラッキング
Slide 15
Slide 15 text
© Timeleap Inc. cccc 15 ● コーディングエージェント華の時代 ○ コードの治安がおかしなことになっていないかを 確認できるに越したことはない (ヘルスチェック) ○ 何か⼤きな変更が加えられた時に、それがどのように影響した のかを数値トレンドを追うことで認識できる ■ 逆に数値が⼤きく変化したことから何か⼤規模な変更を 加えられたことに気付ける ● コーディングエージェント⾃体にスコアは追わせていない ○ ⼈間がこれを追うのは無意味だがAIだとどうか……?
Slide 16
Slide 16 text
© Timeleap Inc. 16 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun 2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion
Slide 17
Slide 17 text
© Timeleap Inc. 17 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun 2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion Cyclomatic Complexity & Cognitive Complexity
Slide 18
Slide 18 text
© Timeleap Inc. 18 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun 2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion Cyclomatic Complexity & Cognitive Complexity Claude Code
Slide 19
Slide 19 text
© Timeleap Inc. なぜこの話を????? 19 ● かつてPerl::Lintというものを作っていました ○ めっちゃ発表しました ■ YAPC::Asia 2014 ■ YAPC::EU 2015 ○ 登壇って良いものですね ● このPerl::Lintの中でもCyclomatic Complexity計測器を書いていた ○ 10年ぶりに再実装 ○ そしてここで発表 ○ 登壇って良いものですね
Slide 20
Slide 20 text
© Timeleap inc. All Rights Reserved.