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
8
3.2k
開発者が知っておきたい複雑さの正体/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
2
1.4k
フロントエンドが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
230
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.3k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
53k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.6k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
5.8k
Other Decks in Technology
See All in Technology
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
350
ECS_EKS以外の選択肢_ROSA入門_.pdf
masakiokuda
1
120
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
140
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
4
640
2025年 山梨の技術コミュニティを振り返る
yuukis
0
140
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
280
あの夜、私たちは「人間」に戻った。 ── 災害ユートピア、贈与、そしてアジャイルの再構築 / 20260108 Hiromitsu Akiba
shift_evolve
PRO
0
270
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
130
M&Aで拡大し続けるGENDAのデータ活用を促すためのDatabricks権限管理 / AEON TECH HUB #22
genda
0
310
Claude Codeを使った情報整理術
knishioka
16
11k
Oracle Cloud Infrastructure:2025年12月度サービス・アップデート
oracle4engineer
PRO
0
170
チームで安全にClaude Codeを利用するためのプラクティス / team-claude-code-practices
tomoki10
0
500
Featured
See All Featured
Paper Plane
katiecoart
PRO
0
45k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Mobile First: as difficult as doing things right
swwweet
225
10k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
360
How to build a perfect <img>
jonoalderson
1
4.8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Embracing the Ebb and Flow
colly
88
4.9k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
130
エンジニアに許された特別な時間の終わり
watany
106
220k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
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
おしまい