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
forrep
April 24, 2024
Programming
660
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
最近コードレビューで指摘したこと
forrep
April 24, 2024
Transcript
8 slides
最近コードレビューで 指摘したこと 1 株式会社ラクーンホールディングス 技術戦略部 羽山純
自己紹介 • 名前 ◦ 羽山 純(Jun Hayama) ◦ @forrep •
所属 ◦ 株式会社ラクーンホールディングス 技術戦略部 • 技術領域 ◦ バックエンド・インフラ ◦ パフォーマンス改善 ◦ AI(企業審査AI) • 個人活動 ◦ アプリ開発 2
後でコードを読む人の消費時間を最小化する 3
後でコードを読む人の消費時間を最小化する • 次のパターンは正常系に進む ◦ form.hasErrors() == false かつ firstError !=
null ◦ form.hasErrors() == true かつ firstError == null • 後から読む人は上記パターンの調査が必要になる ◦ あえてそういうコードとなっている、無視できない public String controller(Form form) { if (form.hasErrors()) { Error firstError = form.getFirstError(); if (firstError != null) { return firstError.getMessage() } } // 正常系の処理 // ... } 4
後でコードを読む人の消費時間を最小化する • 必要のない条件は削除する、でないと後の人が困る • 必要な条件なら、再現できるテストケースを書く public String controller(Form form) {
Error firstError = form.getFirstError(); if (firstError != null) { return firstError.getMessage() } // 正常系の処理 // ... } 5
要件外/想定外の責任をしっかり放棄する 6
要件外/想定外の責任をしっかり放棄する • 赤枠のフィルタ処理は必要なさそう • from.getErrors() はフレームワーク内の処理で不透明 ◦ null 要素が混じる可能性はゼロではない(ほぼゼロだけど) •
後で修正する人は、この行を簡単に削除できない ◦ この状態で数年間動いてたら、消すのは怖い ◦ 必要性は分からないが、修正後も維持するしかない ◦ null 要素を含むテストは不可能でモヤモヤする Optional<Error> firstError = form .getErrors() // Stream<Error> .filter(Objects::nonNull) // Stream<Error> .findFirst(); // Optional<Error> 7
要件外/想定外の責任をしっかり放棄する • 要件外/想定外の事象には対処しない ◦ 想定しない null 要素は致命的な問題の可能性 ◦ 動作を続けるよりもフェイルファストで落とす方が安全 ▪
動き続けたら問題の発生自体に気づけない • 想定外へ対処するとあなたは安心するが後の人は不安になる ◦ 責任をしっかり放棄することが、責任を取るということ ▪ この状態でしばらく正常稼働すれば問題ないと確認できる ◦ 「想定しない状態だけど動くように」は害でしかない Optional<Error> firstError = form .getErrors() // Stream<Error> .findFirst(); // Optional<Error> 8
More Decks by forrep
See All by forrep
サービスに組み込むAIのパターン/アンチパターン
forrep
0
200
Linux && Docker 研修/Linux && Docker training
forrep
28
6k
RAGにベクトルDBは必要ない!DBも不要で運用めちゃ楽な RAG Chatbot を作った話
forrep
38
18k
Google Analytics でサイト速度を計測する / Measure site speed with Google Analytics
forrep
2
480
「プログラマーのためのCPU入門」は入り口として丁度よい!
forrep
54
39k
DevTools でパフォーマンスチューニング入門 / Introduction to Performance Tuning with DevTools
forrep
2
570
技術的負債に対する視力を得る / How to View Technical Debt
forrep
0
990
しくじり先生 - NFS+sqliteで苦労した話から学ぶ、問題解決の考え方 / problem-solving approach
forrep
1
1.4k
理屈で考える、データベースのチューニング / Database tuning How-To
forrep
28
9.9k
Other Decks in Programming
See All in Programming
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
仕様駆動開発入門 (何を作るかを先に決めて渡す) | 目指せ Kiro マスター 05
inariku
PRO
2
160
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
320
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2.1k
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
230
Spec-driven Development with AI
simas
PRO
0
2.3k
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
170
あなたはMCPの機能を、まだ知らない。
4geru
1
140
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
340
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
570
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
290
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
830
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
HDC tutorial
michielstock
2
1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
What's in a price? How to price your products and services
michaelherold
247
13k
A Modern Web Designer's Workflow
chriscoyier
699
190k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
460
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
600
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k