Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
cccccc
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
moznion
July 08, 2026
Technology
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
cccccc
Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜の発表資料です
https://findy.connpass.com/event/390197/
moznion
July 08, 2026
More Decks by moznion
See All by moznion
履歴テーブル、今回はこう作りました 〜 Delegated Types編 〜 / How We Built Our History Table This Time — With Delegated Types
moznion
16
14k
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
11
7.4k
避けられないI/O待ちに対処する: Rails アプリにおけるSSEとasync gemの活用 / Tackling Inevitable I/O Latency in Rails Apps with SSE and the async gem
moznion
4
8.3k
RubyKaigi Hack Space in Tokyo & 函館最速 "予習" 会 / RubyKaigi Hack Space in Tokyo & The Fastest Briefing of RubyKaigi 2026 in Hakodate
moznion
1
430
地に足の付いた現実的な技術選定から魔力のある体験を得る『AIレシート読み取り機能』のケーススタディ / From Grounded Tech Choices to Magical UX: A Case Study of AI Receipt Scanning
moznion
7
5.1k
Chrome Extension Techniques from Hell
moznion
1
320
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
4
8.9k
AIレシート読み取り機能をRuby on Rails on AWSで実現するLLMにまつわるアレコレ / AI-based receipt reading function powered by LLM on Ruby on Rails on AWS
moznion
3
1.3k
Develop to Survive - YAPC::Hakodate 2024 Keynote
moznion
11
25k
Other Decks in Technology
See All in Technology
Type-safe IaC for Dart
coborinai
0
110
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.4k
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
1
120
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.2k
Claude Codeとハーネスについて考えてみる
oikon48
19
9.5k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
130
知らん間に、回ってる
ming_ayami
0
620
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
2
3.9k
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
410
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.2k
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
160
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Test your architecture with Archunit
thirion
1
2.3k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
340
Docker and Python
trallard
47
4k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Technical Leadership for Architectural Decision Making
baasie
3
440
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
320
How STYLIGHT went responsive
nonsquared
100
6.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
Embracing the Ebb and Flow
colly
88
5.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Transcript
© Timeleap Inc. 1 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun
2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion
@moznion タイムリープ株式会社 ソフトウェアエンジニア プロダクト責任者
© Timeleap Inc. Cyclomatic Complexity / Cognitive Complexity 3 •
Cyclomatic Complexity - 循環的複雑度 ◦ 制御フローを使ってプログラムの複雑さを数学的に定義して 指標としたもの ▪ ソフトウェア⼯学的な理論的メトリクス ◦ ざっくり⾔うと: どれくらい分岐 (経路) があって複雑なのか • Cognitive Complexity - 認知的複雑度 ◦ ⼈間の認知負荷を数値化して指標としたもの ▪ 循環的複雑度の⾜りていない部分を補う⽬的 ▪ 開発者体験を重視した実務的メトリクス
© Timeleap Inc. Cyclomatic Complexity 4 • 分岐が増えるほど独⽴した実⾏経路が増える ◦ =>
テストすべき経路数を複雑さとして測る ◦ 理論上はコードのグラフを描画して計算して求める • 定義 ◦ M = E - N + 2P ▪ M = Cyclomatic Complexity ▪ E = Edge(辺) ▪ N = Node(ノード) ▪ P = 連結成分数 ◦ 実質上はグラフを描かず 1 + 分岐数 で計測されることが多い ▪ 分岐‧制御構⽂が発⽣するとスコアが+1
© Timeleap Inc. Cyclomatic Complexity 5 • 課題 ◦ ネストを考慮しない
これらはどちらもスコア4
© Timeleap Inc. Cyclomatic Complexity 6 • 課題 ◦ 理解容易性を測ることはできない
スコアだけでは負荷の差を考慮できない
© Timeleap Inc. Cognitive Complexity 7 • Cyclomatic Complexityを補うための指標 •
原則 ◦ 線形な流れを壊すと加点 ◦ ネストするとネスト階層ぶん加点 ◦ シンタックスシュガーは無視
© Timeleap Inc. Cyclomatic Complexity / Cognitive Complexity 8 •
Cyclomatic Complexityで⾒れるもの ◦ テスト容易性 ◦ バグ混⼊リスク • Cognitive Complexityで⾒れるもの ◦ 可読性 ◦ 保守性 ◦ (「ネストは悪い」「早期 return は良い」「switch は思った ほど悪くない」というような熟達者の経験則のスコア化)
© Timeleap Inc. 有⽤なメトリクスなのか? 9 • YES! ◦ 例) ▪
分岐経路は多い (Cyclomatic⾼) ▪ 理解は⽐較的容易 (Cognitive低) ▪ => テストケースは増えるが保守性は それほど悪くない
© Timeleap Inc. 有⽤なメトリクスなのか? 10 • YES! ◦ 例) ▪
経路数は少ない (Cyclomatic低) ▪ 理解が難しい (Cognitive⾼) ▪ => テストはそれほど⼤変ではないが コードレビューや保守は⾟い
© Timeleap Inc. • No… ◦ 現在のソフトウェアの複雑さは「関数」だけに閉じない ◦ このメトリクスの値だけを改善してもソフトウェアが 良くなるわけではない
▪ むしろいびつになる可能性がある ▪ グッドハートの法則 ™ とはいえ数値が低ければ多くの場合良いというのはそう。 有⽤なメトリクスなのか? 11
© Timeleap Inc. なぜ今? 12 • Cyclomatic Complexity は 1976
年、 Cognitive Complexity は 2017 年の概念 • 依然として有効 ◦ 関数の複雑さの測定 • ⼤規模なアーキテクチャ‧構造の変化による効果を追える ◦ ヘルスチェック的にメトリクスを追える ▪ どんな変更がどこで起こったのかがわかる ▪ ⼤きなリファクタリングをやっている間などでは有益 ◦ LLMの台頭によって⼤きな変更が容易になった ◦ (LLMにスコアを下げさせる指⽰をすることに意味は……?)
© Timeleap Inc. というわけで 13 https://github.com/moznion/cccc • Cyclomatic/Cognitive Complexity計測器‧CLI •
特徴 ◦ Rust製 ◦ ⾼速 ◦ Language agnostic (es, rust, goがdefault supported)
© Timeleap Inc. cccc 14 • GitHub Actionsでトラッキングできるようにしている ◦ https://github.com/moznion/cccc-es-action
• k1LoW/octocovを使って継続トラッキング
© Timeleap Inc. cccc 15 • コーディングエージェント華の時代 ◦ コードの治安がおかしなことになっていないかを 確認できるに越したことはない
(ヘルスチェック) ◦ 何か⼤きな変更が加えられた時に、それがどのように影響した のかを数値トレンドを追うことで認識できる ▪ 逆に数値が⼤きく変化したことから何か⼤規模な変更を 加えられたことに気付ける • コーディングエージェント⾃体にスコアは追わせていない ◦ ⼈間がこれを追うのは無意味だがAIだとどうか……?
© Timeleap Inc. 16 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun
2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion
© Timeleap Inc. 17 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun
2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion Cyclomatic Complexity & Cognitive Complexity
© Timeleap Inc. 18 CONFIDENTIAL https://timeleap.co.jp/ cccccc Thu, 25 Jun
2026 Findy オフラインシリーズ感謝祭 〜先陣たちの宴〜 @moznion Cyclomatic Complexity & Cognitive Complexity Claude Code
© Timeleap Inc. なぜこの話を????? 19 • かつてPerl::Lintというものを作っていました ◦ めっちゃ発表しました ▪
YAPC::Asia 2014 ▪ YAPC::EU 2015 ◦ 登壇って良いものですね • このPerl::Lintの中でもCyclomatic Complexity計測器を書いていた ◦ 10年ぶりに再実装 ◦ そしてここで発表 ◦ 登壇って良いものですね
© Timeleap inc. All Rights Reserved.