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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryo Tomidokoro
November 07, 2025
Technology
3.7k
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
1.6k
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
1.4k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.9k
フロントエンドが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
290
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.8k
集中して作業する技術/how_to_work_deeply
hanhan1978
68
60k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
Other Decks in Technology
See All in Technology
AI時代の強いチームの作り方
yuukiyo
23
15k
SnowflakeCoCoでデータエンジニアリング!
foursue
0
160
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
320
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
170
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
260
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
750
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
19k
Digitization部 紹介資料
sansan33
PRO
2
7.7k
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
160
ガバメントクラウドでのランサムウェア対策
techniczna
1
700
『モンスターストライク』 の運営に伴走する! データ民主化への 解析グループの3つのアプローチ
mixi_engineers
PRO
0
220
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
420
Marketing to machines
jonoalderson
1
5.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
How to Talk to Developers About Accessibility
jct
2
470
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
The Spectacular Lies of Maps
axbom
PRO
1
880
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
おしまい