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
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
y_ahiru
February 21, 2025
Programming
3.2k
10
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
PHP Conference 名古屋 2025 の登壇資料です
https://phpcon.nagoya/2025/
y_ahiru
February 21, 2025
More Decks by y_ahiru
See All by y_ahiru
恣意性から考える、変更に強いモデルの作り方
yahiru
1
2.8k
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
1.2k
フロントエンドエンジニアも知っておきたい HTTP/3 で変わること
yahiru
16
13k
ゆるふわCQRS入門
yahiru
2
840
設計におけるソリューションドメイン
yahiru
3
1.9k
PHPで始めるGitHub Actions
yahiru
1
890
5ヶ月でカバレッジを20%から90%にあげた話
yahiru
2
7.1k
入門ミューテーションテスト/ A bigginer's guide to Mutation testing
yahiru
0
1.7k
Eloquentに別れを告げるタイミングについて考えた
yahiru
2
2.2k
Other Decks in Programming
See All in Programming
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
Heart of Swift Concurrency
koher
0
230
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
3
1.2k
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
130
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
typoなんかねぇよ
raspython3
0
690
Building an Out-of-Order CPU
latte72
1
750
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
190
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
650
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
38k
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
420
We Have a Design System, Now What?
morganepeng
55
8.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Chasing Engaging Ingredients in Design
codingconduct
0
310
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
450
Design in an AI World
tapps
1
310
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Transcript
責務と認知負荷を整える ! 抽象レベルを意識した関心の分離 PHPカンファレンス名古屋 2025
名前: 吉田あひる (@strtyuu) 仕事: エンジニア 所属: スターフェスティバル株式会社 自己紹介
こんなことありませんか? • 「この関数の実装、頭に入りきらないな...」 • 「結局このコード何がしたいんだ...?」
それ、抽象レベルが 合ってないせいかも
このセッションでお話しすること • 抽象レベルを整えることによって読み手の認知負荷を下げることができる • 抽象レベルを整えることで関心の分離を進めることができる
抽象レベルと認知負荷 〜自然言語編〜
今日の夜、友達とご飯にいってくるわ • 家族との日常会話であれば違和感のない、適切な抽象レベルの文章
2025年2月22日17時15分に家を出て 17時30分発◦◦行き の電車に乗って ◦◦駅で中学の頃から仲の良い ◦◦くんと合 流した後、愛知県名古屋市 ◦◦の1−2−3◦◦ビル6Fにある ◦◦っていう中華料理屋に行ってエビチリを食べてくる • いや、要点を話してくれ!
• 抽象レベルが下がりすぎた例 • 抽象度が下がり具体的になってくると情報が増えていき、情報が多すぎると認知 負荷がかかってくる
今年中に生き物と愛を実感してくるわ • (困惑) • 抽象度が上がると情報量が削られる • そのため、抽象度が高すぎると必要な情報が消えて理解不能になる ◦ 今日の夜 ->
今年 ◦ 友達 -> 生き物 ◦ 食事 -> 愛を実感する行為※1 • 一方で、情報が削られた代わりに包含される具象の数は増える ※1 wikipedia 「食事」より
ここまでのまとめ • 抽象レベルは高い・低いでグラデーションがある • 抽象レベルは情報量を変える力を持つ • 抽象レベルが低すぎると不要な情報が多くなり認知負荷が上がる • 抽象レベルが高すぎると必要な情報が消えて理解が難しくなる •
日常の会話は情報の過不足が少ない適切な抽象度であることが多い
抽象レベルと認知負荷 〜プログラム編〜
会員登録ロジック 1. メールアドレスの重複がないか確認 2. 重複があればエラーを返す 3. 重複がなければパスワードをハッシュ化 4. 入力値から会員を作成する
実際に書くと こうなりがち
実際に書くと こうなりがち users テーブルから email カラムの値 が一致するレコードを取得
実際に書くと こうなりがち users テーブルから email カラムの値 が一致するレコードを取得 レコードが空でない場合は 例外を投げる
実際に書くと こうなりがち users テーブルから email カラムの値 が一致するレコードを取得 レコードが空でない場合は 例外を投げる パスワードをハッシュ化
実際に書くと こうなりがち users テーブルから email カラムの値 が一致するレコードを取得 レコードが空でない場合は 例外を投げる パスワードをハッシュ化
入力値を元に users テーブル にレコードを追加する
自然言語の説明と乖離が発生している 自然言語 1. メールアドレスの重複がないか確 認 2. 重複があればエラーを返す 3. 重複がなければパスワードをハッ シュ化
4. 入力値から会員を作成する プログラム 1. users テーブルから email カラム の値が一致するレコードを取得し、 レコードが空であるか確認する 2. 空でない場合は例外を投げる 3. 重複がなければパスワードをハッ シュ化 4. 入力値を元に users テーブルにレ コードを追加する
自然言語の抽象レベルが低すぎた例 に似ていませんか?
何が問題か ? このサンプルコードレベルであれば大きく問題にはならないものの... • 「やりたいこと」と「書かれていること」に抽象レベルのギャップが生まれている • そのため作者の気持ちを考えて意訳するコストが発生する ◦ レコードが空ではない状態は何を意味するのか?など •
これが認知負荷の上昇につながる ◦ 意訳コスト ◦ それに伴う脳のメモリ圧迫
なぜ認知負荷が向上するのか? 脳のメモリ問題
読み手の気持ちを 考えてみる
読み手の気持ちを 考えてみる なんでいきなりクエリを投げてる んだろうか?
読み手の気持ちを 考えてみる records が空でない状態は 何を意味するんだろうか? なんでいきなりクエリを投げてる んだろうか?
読み手の気持ちを 考えてみる records が空でない状態は 何を意味するんだろうか? なんでいきなりクエリを投げてる んだろうか? なるほど records が空でない状態はメアド
が重複しているということか!
意訳できるまでコードを忘れられない • この例では Exception を投げている行を読むまでそれ以前のコードを意訳できな いことがわかる • そのため、それ以前のコードを全て覚えておく必要がある • これによって脳のメモリを消費するので、認知負荷の上昇につながる
ここまでのまとめ • 「やりたいこと」と「コードで書かれていること」の抽象レベルのギャップが発生する と、認知負荷の上昇につながる • コードの抽象レベルが低すぎる場合の認知負荷上昇の原因は以下の2つがある ◦ 意訳コスト ◦ 脳のメモリ圧迫
どうすればいいか
自然言語を手がかりに抽象レベルを整える • もしそのロジックを自然言語で説明するとしたらどのような文章になるか • その文章に近づけるためにどのようなコードを書けばいいのか
なぜ自然言語? • 読みやすさ・読みにくさは読み手に依存している ◦ 関数型に慣れていると map や reduce は読みやすい ◦
そうでない人は for 文の方が読みやすい • そのため、ある程度多くの人が馴染みやすいコードを目指していきたい • 自然言語との乖離が少ないものは多くの人に馴染みやすいのでは?
コードの抽象レベルを整える 3つのアプローチ • 別クラス(あるいは関数)化 • プライベート関数化 • コメント追加
別クラス化 抽象レベルの異なる部分を 別クラスとして切り出す 自然言語を元にこういう書き方が できると良さそうという API を考え る それに合わせた API
を作る
プライベート関数化 再利用性を考える必要のない場合に 有効。 切り出す際の考え方はクラス化と ほぼ同じ
コメント追加 • 意訳を読み手にさせない • 対象となるコードの行数が 少ない場合に有効
3つのアプローチのフローチャート
抽象レベルと関心の分離
抽象レベルに応じた関心の分離 会員登録ロジック メールアドレスの重複がないか確認 重複確認ロジック users テーブルから email カラムの値が一致するレコー ドを取得し、レコードの件数を確認する 重複しているかどうかだけが関心に
どのように重複チェックをするかが関心 に
ロジックが「何をしたいのか」にフォーカスされる • 自然言語で考えるとその抽象レベルにおいて関心のない情報が自然と省かれや すくなる • 省かれる情報はその抽象レベルからすると How に見えることが多い • その結果「つまり何がしたいんだっけ?」をロジックが端的に表現してくれるように
なる
抽象レベルを揃えると 抽象レベルに応じた関心の分離ができる ※あくまで抽象レベルの観点からの話あって、関心の分離自体はもっとさまざまな軸からアプ ローチされるべきではある
まとめ • 抽象レベルにギャップがあると認知負荷が高い • 自然言語に頼ると抽象レベルを整えやすい • 抽象レベルが整うと認知負荷が下がり、ついでに関心の分離も少しできる
We Are Hiring !!