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.