Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cccccc

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for moznion moznion
July 08, 2026

 cccccc

Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜の発表資料です
https://findy.connpass.com/event/390197/

Avatar for moznion

moznion

July 08, 2026

More Decks by moznion

Other Decks in Technology

Transcript

  1. © Timeleap Inc. 1 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun

    2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion
  2. © Timeleap Inc. Cyclomatic Complexity / Cognitive Complexity 3 •

    Cyclomatic Complexity - 循環的複雑度 ◦ 制御フローを使ってプログラムの複雑さを数学的に定義して 指標としたもの ▪ ソフトウェア⼯学的な理論的メトリクス ◦ ざっくり⾔うと: どれくらい分岐 (経路) があって複雑なのか • Cognitive Complexity - 認知的複雑度 ◦ ⼈間の認知負荷を数値化して指標としたもの ▪ 循環的複雑度の⾜りていない部分を補う⽬的 ▪ 開発者体験を重視した実務的メトリクス
  3. © Timeleap Inc. Cyclomatic Complexity 4 • 分岐が増えるほど独⽴した実⾏経路が増える ◦ =>

    テストすべき経路数を複雑さとして測る ◦ 理論上はコードのグラフを描画して計算して求める • 定義 ◦ M = E - N + 2P ▪ M = Cyclomatic Complexity ▪ E = Edge(辺) ▪ N = Node(ノード) ▪ P = 連結成分数 ◦ 実質上はグラフを描かず 1 + 分岐数 で計測されることが多い ▪ 分岐‧制御構⽂が発⽣するとスコアが+1
  4. © Timeleap Inc. Cognitive Complexity 7 • Cyclomatic Complexityを補うための指標 •

    原則 ◦ 線形な流れを壊すと加点 ◦ ネストするとネスト階層ぶん加点 ◦ シンタックスシュガーは無視
  5. © Timeleap Inc. Cyclomatic Complexity / Cognitive Complexity 8 •

    Cyclomatic Complexityで⾒れるもの ◦ テスト容易性 ◦ バグ混⼊リスク • Cognitive Complexityで⾒れるもの ◦ 可読性 ◦ 保守性 ◦ (「ネストは悪い」「早期 return は良い」「switch は思った ほど悪くない」というような熟達者の経験則のスコア化)
  6. © Timeleap Inc. 有⽤なメトリクスなのか? 9 • YES! ◦ 例) ▪

    分岐経路は多い (Cyclomatic⾼) ▪ 理解は⽐較的容易 (Cognitive低) ▪ => テストケースは増えるが保守性は それほど悪くない
  7. © Timeleap Inc. 有⽤なメトリクスなのか? 10 • YES! ◦ 例) ▪

    経路数は少ない (Cyclomatic低) ▪ 理解が難しい (Cognitive⾼) ▪ => テストはそれほど⼤変ではないが コードレビューや保守は⾟い
  8. © Timeleap Inc. • No… ◦ 現在のソフトウェアの複雑さは「関数」だけに閉じない ◦ このメトリクスの値だけを改善してもソフトウェアが 良くなるわけではない

    ▪ むしろいびつになる可能性がある ▪ グッドハートの法則 ™ とはいえ数値が低ければ多くの場合良いというのはそう。 有⽤なメトリクスなのか? 11
  9. © Timeleap Inc. なぜ今? 12 • Cyclomatic Complexity は 1976

    年、 Cognitive Complexity は 2017 年の概念 • 依然として有効 ◦ 関数の複雑さの測定 • ⼤規模なアーキテクチャ‧構造の変化による効果を追える ◦ ヘルスチェック的にメトリクスを追える ▪ どんな変更がどこで起こったのかがわかる ▪ ⼤きなリファクタリングをやっている間などでは有益 ◦ LLMの台頭によって⼤きな変更が容易になった ◦ (LLMにスコアを下げさせる指⽰をすることに意味は……?)
  10. © Timeleap Inc. というわけで 13 https://github.com/moznion/cccc • Cyclomatic/Cognitive Complexity計測器‧CLI •

    特徴 ◦ Rust製 ◦ ⾼速 ◦ Language agnostic (es, rust, goがdefault supported)
  11. © Timeleap Inc. cccc 15 • コーディングエージェント華の時代 ◦ コードの治安がおかしなことになっていないかを 確認できるに越したことはない

    (ヘルスチェック) ◦ 何か⼤きな変更が加えられた時に、それがどのように影響した のかを数値トレンドを追うことで認識できる ▪ 逆に数値が⼤きく変化したことから何か⼤規模な変更を 加えられたことに気付ける • コーディングエージェント⾃体にスコアは追わせていない ◦ ⼈間がこれを追うのは無意味だがAIだとどうか……?
  12. © Timeleap Inc. 16 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun

    2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion
  13. © Timeleap Inc. 17 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun

    2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion Cyclomatic Complexity & Cognitive Complexity
  14. © Timeleap Inc. 18 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun

    2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion Cyclomatic Complexity & Cognitive Complexity Claude Code
  15. © Timeleap Inc. なぜこの話を????? 19 • かつてPerl::Lintというものを作っていました ◦ めっちゃ発表しました ▪

    YAPC::Asia 2014 ▪ YAPC::EU 2015 ◦ 登壇って良いものですね • このPerl::Lintの中でもCyclomatic Complexity計測器を書いていた ◦ 10年ぶりに再実装 ◦ そしてここで発表 ◦ 登壇って良いものですね