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
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
Search
Ryo Tomidokoro
November 07, 2025
Technology
6
2.9k
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
PHPカンファレンス福岡2025の登壇資料です。
Ryo Tomidokoro
November 07, 2025
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
1
1.1k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
210
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.2k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
52k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.5k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
5.7k
Other Decks in Technology
See All in Technology
生成AIシステムとAIエージェントに関する性能や安全性の評価
shibuiwilliam
2
250
IaC を使いたくないけどポリシー管理をどうにかしたい
kazzpapa3
1
170
Kill the Vibe?Architecture in the age of AI
stoth
1
100
AIで加速する次世代のBill Oneアーキテクチャ〜成長の先にある軌道修正〜
sansantech
PRO
1
140
TypeScript 6.0で非推奨化されるオプションたち
uhyo
15
5.5k
レガシーシステム刷新における TypeSpec スキーマ駆動開発のすゝめ
tsukuha
4
800
ABEJA FIRST GUIDE for Software Engineers
abeja
0
3.2k
信頼性が求められる業務のAIAgentのアーキテクチャ設計の勘所と課題
miyatakoji
0
190
adk-samples に学ぶデータ分析 LLM エージェント開発
na0
3
820
20251127 BigQueryリモート関数で作る、お手軽AIバッチ実行環境
daimatz
0
190
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
21k
mablでリグレッションテストをデイリー実行するまで #mablExperience
bengo4com
0
420
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
57k
For a Future-Friendly Web
brad_frost
180
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Speed Design
sergeychernyshev
33
1.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Faster Mobile Websites
deanohume
310
31k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Code Review Best Practice
trishagee
72
19k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Navigating Team Friction
lara
190
16k
Transcript
開発者が知っておきたい 複雑さの正体 PHPカンファレンス福岡2025 2025-11-08 / hanhan1978 This presentation is built
with ❤ and k1LoW/deck
Name : hanhan1978 / Ryo Tomidokoro From : 横浜市 Job
: Backend Expert @ kaonavi inc Podcast : Yokohama North AM
目次 1. 複雑さとは? 2. ソフトウェア開発の流れ 3. 複雑さがやってくる物語 4. まとめ
1. 複雑さとは?
『A Philosophy of Software Design』より 複雑さとは「開発者がシステムを理解・変更することを妨げるものすべて」
『ソフトウェア設計の結合バランス』より 2章 結合と複雑性:クネビン 2-1 複雑性とは何か 複雑性とは理解のしにくさ 複雑性は主観
ようするに
「 分かりにくい!」と感じたら複雑
数字で測れる複雑さもある • 循環的複雑度 (Cyclomatic Complexity) • 結合度 (Coupling) • 凝集度
(Cohesion)
循環的複雑度の高いコード例
循環的複雑度の高いコード例
結合度の高いコード例
結合度の高いコード例
クラス図だと理解しやすい
結合度を下げる改善例
凝集度の低いコード例
凝集度の低いコード例
Laravelで稀によく見るコード
Laravelで稀によく見るコード 同じキー名を何回使う気だ!!!
複雑なコードは、なんとなく分かった
では
複雑なコードはなぜ書かれるのか?
単に技術力の不足? そのif文はどこからやってくる?
2. ソフトウェア開発の流れ
ソフトウェア開発プロセス
エンジニアが目にする複雑さは 実装段階にて表出する ソフトウェア開発プロセス
しかし複雑さは どの段階からでも入り込んで来る
3. 複雑さがやってくる物語
要件で生じる複雑さ
例えば • 事業の成長に伴う要件増加 • 特定顧客からのカスタマイズ要望 • 時代の変化・外部環境の変動
具体的なケース • 「来季までに、X個の新機能を作ろう!」 • 「A社さんだけ、処理が変わるようにしよう」 • 「GDPRによるCookie利用の許諾チェック」 • 「消費税xx%に変更、商品に軽減税率適用」
消費税計算のコード例
購入時期によって、税率が変わる仕様変更
商品種別、消費者行動で、税率が変わる仕変
設計で生じる複雑さ
例えば • アーキテクト不在/役割不明確 • 流行や技術選定の影響 • いわゆるコンウェイの法則
具体的なケース • 「何を作るか不明確だが戦術DDD風?のディレク トリ構造が先に決まっている」 • 「CI/CDが計画されていない」 • 「組織共通が決まってない」 • 「職能組織内のコミュニケーション不全」
普通のMVCフレームワーク
無根拠な設計判断で戦術DDD風にすると
ファイル数が ...
ちょっとつらい ...
こっちの方が適切なパターンが多々ある
実装で生じる複雑さ
例えば • 条件分岐の安易な追加 • Switch文 • オプション引数の追加 • テストしづらい構造 •
わかりにくい命名
とはいえ... • 技術は技術課題しか解決できない • 適応課題から生じる複雑さは視野の広い解決策が必要 • 最初から良い解決策は思いつけないことも多い
参考資料
SOLIDの原則ってどんなふうに使うの? https://speakerdeck.com/hidenorigoto/solidfalseyuan-ze-tutedonnahuunishi-ufalse
予防に勝る防御なし - 堅牢なコードを導く様々な設計のヒント https://speakerdeck.com/twada/growing-reliable-code-phperkaigi-2022
A Philosophy of Software Design, 2nd Edition 「複雑さ」がメインテーマ
まとめ
どうすれば「複雑」を予防できる?
普段の心構え • 越境した学習を行う • コミュニケーションを取る • システム思考で考える • フィードバックループを回す
でも 初手では防げないことも多い
だからこそ • 要件・設計へと視野を広げて解決策を探る • やれることから、少しでも改善をいれていく • 諦めない!くじけない!
None
おしまい