Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
設計と複雑さのはなし
Search
Naoya Furudono
May 19, 2025
Programming
0
59
設計と複雑さのはなし
社内でのLT会に用いた資料
Naoya Furudono
May 19, 2025
Tweet
Share
More Decks by Naoya Furudono
See All by Naoya Furudono
「型システムのしくみ」輪講 第一章
naoyafurudono
0
86
waiwai-aiを入社2ヶ月の エンジニア3人と作るための さいきょうのアーキテクチャ
naoyafurudono
0
460
CLIツール開発をProtocol Buffers スキーマで駆動する
naoyafurudono
1
820
Protocol Buffersスキーマ定義から GoのCLIを生成する
naoyafurudono
0
94
Other Decks in Programming
See All in Programming
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
300
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
780
関数実行の裏側では何が起きているのか?
minop1205
1
660
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.2k
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
2k
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
5.2k
AIコーディングエージェント(Manus)
kondai24
0
150
AIコーディングエージェント(skywork)
kondai24
0
130
ゲームの物理 剛体編
fadis
0
290
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
37
23k
AWS CDKの推しポイントN選
akihisaikeda
1
240
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
19k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Docker and Python
trallard
46
3.7k
The Invisible Side of Design
smashingmag
302
51k
Mobile First: as difficult as doing things right
swwweet
225
10k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
How GitHub (no longer) Works
holman
316
140k
[SF Ruby Conf 2025] Rails X
palkan
0
470
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
複雑さと設計のはなし 古殿直也 2025-05-19
自己紹介 古殿直也 (Furudono Naoya) @furudono2 (Twitter) 酒、旅行、ランニングが好き ロリポップ・ムームードメイン事業部 事業開発チーム ホスティング環境とユーザを繋げるWebアプリケーションを作っている
13th 学生の頃はプログラミング言語意味論の勉強をしていた 好きな専門書は EoPL 2
今日の目的 設計を上手くやれるようになる動機を得ること 輪講会への勧誘 A Philosophy of Software Designをみんなで完全に理解したい すべてのエンジニアが潜在的な対象者だと考えている 事務的な話(開催形態とか)は扱わない。技術の話をする
3
複雑さと設計のはなし 4
ソフトウェアを簡単に作れるようになって、よりすごいシステムをより安価に 作れるようになりたい システムを作る人たちの願いである 個人として 楽しい 実現したいことを実現できるようになる 事業会社として ユーザに価値を提供できる 事業の試行錯誤ができる 自由自在にソフトウェアを作れないとき、それは何が原因だろうか
5
作るシステムを理解することがソフトウェア開発を律速する ソフトウェアを書くために必要な能力で支配的なのは、作るシステムがどんなもので あるか(つまり設計)を理解する能力(つまり設計する能力) ソフトウェアはどんなものを作るのかを明らかにすることが難しい どんなものが欲しいかを表現できれば(つまり設計をアウトプットできれば) 作れたも同然 例えば僕は愚かなのでどんな感じに作ればいいかを作りながら考える 既存のシステムを拡張する設計のためには、既存のシステムの理解を元に新しい 拡張を理解する必要がある 全く新しくソフトウェアを作ることはない
例えばCLIツールを作る場合は、コマンドラインインターフェースとかファイ ルみたいな既存のシステムの上にソフトウェアを作ることになる 高速にするためにできることは何か 6
理解する主体が賢くなるか、理解する対象を簡単にするかすればよい 主体が賢くなる コードリーディングの能力を高める エディタとかツールを使いこなす 設計の能力を高める 対象を簡単にすること インクリメンタルに開発するようにする ドキュメントやテストを書く ソフトウェアをシンプルに保つ 7
ソフトウェアをシンプルに保つことにフォーカスしたい 人間は流動的だしプロダクトはいくらでも複雑になれるので、何も工夫しなければ誰 も理解できない状態になれる 主体が賢くなる コードリーディングの能力を高める エディタとかツールを使いこなす 設計の能力を高める 対象を簡単にすること インクリメンタルに開発するようにする ドキュメントやテストを書く
ソフトウェアをシンプルに保つ シンプルにすることは複雑さを減らすこと 8
複雑さを減らすためのアプローチ コードをシンプルに保つこと 名前をちゃんとつける 例外的な処理を減らすこと 複雑性をカプセル化すること (モジュールの実装が複雑になったとしても)インターフェースを簡単にし て、システム全体としての複雑さを下げる戦略 moduler designと呼ばれる これだけではピンとこないだろう
9
これからできること 複雑さを理解すること 複雑さとは何を意味するか どんな問題があるのか 設計しているときや作り込んだ後に、いかに不必要な複雑さを認知するか 複雑さを減らす手法を身につけること 先人の知恵を勉強すること 開発を通じて練習すること 人のコードをレビューするとき 自分のコードをレビューしてもらったとき
10
輪講への勧誘 11
本に期待できること 一人で読むのも良いし、みんなで読むのも良いでしょう 複雑さを理解すること 複雑さとは何を意味するか どんな問題があるのか 設計しているときや作り込んだ後に、いかに不必要な複雑さを認知するか 複雑さを減らす手法を身につけること 先人の知恵を勉強すること 開発を通じて練習すること :
輪講ではなく普段の開発でやる 人のコードをレビューするとき 自分のコードをレビューしてもらったとき 12
参考文献・輪講で読みたい本 この発表ではA Philosophy of Software DesignのPrefaceと Chapter 1を参考にした 全体で200-300ページほど 日本語訳はないけど英語はわか
りやすい 13