Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
Search
Ryo Tomidokoro
November 07, 2025
Technology
3.9k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
PHPカンファレンス福岡2025の登壇資料です。
Ryo Tomidokoro
November 07, 2025
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
2.6k
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
1.9k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
2k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
14k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
15k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
310
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
4k
集中して作業する技術/how_to_work_deeply
hanhan1978
69
62k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
12k
Other Decks in Technology
See All in Technology
Essential architectural thinking (revised edition)
ufried
0
110
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
Deep Data Security 機能解説
oracle4engineer
PRO
2
780
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
130
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.7k
FOSS4Gを活用した自治体業務DXの試み
470715
0
150
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
1
150
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
120
DGX Spark でどこまでハッキングができるのか?
kash1064
0
590
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
610
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.5k
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
350
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
800
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Site-Speed That Sticks
csswizardry
13
1.6k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
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
おしまい