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
1
190
開発者が知っておきたい複雑さの正体/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
670
フロントエンドが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
200
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.6k
Other Decks in Technology
See All in Technology
触れるけど壊れないWordPressの作り方
masakawai
0
680
JAWS UG AI/ML #32 Amazon BedrockモデルのライフサイクルとEOL対応/How Amazon Bedrock Model Lifecycle Works
quiver
1
830
어떤 개발자가 되고 싶은가?
arawn
1
440
GTC 2025 : 가속되고 있는 미래
inureyes
PRO
0
150
AIエージェントを導入する [ 社内ナレッジ活用編 ] / Implement AI agents
glidenote
1
210
文字列操作の達人になる ~ Kotlinの文字列の便利な世界 ~ - Kotlin fest 2025
tomorrowkey
2
500
MCP サーバーの基礎から実践レベルの知識まで
azukiazusa1
18
8.7k
CLIPでマルチモーダル画像検索 →とても良い
wm3
2
800
パフォーマンスチューニングのために普段からできること/Performance Tuning: Daily Practices
fujiwara3
2
200
abema-trace-sampling-observability-cost-optimization
tetsuya28
0
480
AIエージェントは「使う」だけじゃなくて「作る」時代! 〜最新フレームワークで楽しく開発入門しよう〜
minorun365
PRO
5
910
The Twin Mandate of Observability
charity
1
350
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
8
330
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Embracing the Ebb and Flow
colly
88
4.9k
Building an army of robots
kneath
306
46k
Thoughts on Productivity
jonyablonski
72
4.9k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Become a Pro
speakerdeck
PRO
29
5.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Keith and Marios Guide to Fast Websites
keithpitt
412
23k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
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
おしまい