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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
akkiee76
June 29, 2022
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
オブジェクト指向で類型化するコードレビュー
akkiee76
June 29, 2022
More Decks by akkiee76
See All by akkiee76
EmptyViewは本当に“空”なのか?
akkie76
0
45
Graph Art with Charts API – Beyond Data Visualization
akkie76
0
270
Meet the Translation API
akkie76
0
520
コードレビューで開発を加速させるAIコードレビュー
akkie76
1
790
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
6.2k
コードレビューを支援するAI技術の応用
akkie76
5
1.3k
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
10k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
1.3k
Observationではじめる値監視
akkie76
4
4.9k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Speed Design
sergeychernyshev
33
2.1k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
WCS-LA-2024
lcolladotor
0
830
Optimising Largest Contentful Paint
csswizardry
37
4k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Evolving SEO for Evolving Search Engines
ryanjones
0
300
How to build a perfect <img>
jonoalderson
1
6k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Transcript
〜 チームで育てるオブジェクト指向 〜 オブジェクト指向で 類型化するコードレビュー Akihiko Sato オブジェクト指向 LT 会
vol.4 #ooltjp
自己紹介 Akihiko Sato / 株式会社ラクス Lead Engineer SaaS 開発 (Backend,
Frontend) / Mobile 開発 (iOS, Android) 上流工程、コードレビュー、チームの課題改善など 読書 / コーヒー / HHKB / 縄跳び
今日伝えたいこと コードレビューを通して オブジェクト指向をチームで育てよう!
レビューの取り組み 現在、私のチームではレビューガイドラインを明文化して、 レビュアーはガイドラインに従ってコードレビューを行ってます。
私が join した当時の課題 ・実装のセオリーが分からない ・レビューの観点が分からない レビューがしっかり行われていない体制だった モバイル開発経験者が少なく実装のノウハウがない
その結果・・・ ・技術力がなかなか伸びない ・定期的にバグが発生する
レビュー指摘を類型化できないか? チームメンバーの弱点を表せないか? どうやって課題を改善するか ガイドライン(明文)を作って、レビューコメントを類型化しよう! ( レビュー指摘は財産 )
ガイドライン作成にあたって 基本的なアウトラインを決めよう! 7 つの観点でレビューコメントを類型化することに
観点について ① 指摘の観点を 7 つに分類 1. Design (設計) 2. Simplicity
(理解容易性) 3. Naming (クラス、メソッド、変数名などの命名) 4. Style (コードスタイル)
観点について ② 指摘の観点を 7 つに分類 5. Functionality (機能を充足しているか) 6. Tests
(自動テストが適切である) 7. Document (コメント、ドキュメンに関連)
観点について ③ オブジェクト指向の観点で重要な項目 ・ Design (設計) ・ Simplicity (理解容易性) ・
Naming (クラス、メソッド、変数名などの命名) ・ Style (コードスタイル)
Design (設計) システムにとって適切な責務、振る舞いになっているか。システムと してアーキテクチャを遵守できているか。また、システム全体として 一貫性ある設計になっているか。 ・関心の分離(≒単一責任の原則)違反 ・密結合 ・低凝集 ・ DRY
原則違反
Design (設計) class SummerDiscountManager { lateinit var manager: DiscountManager /**
* 商品を追加する */ fun add(product: Product): Boolean { if (product.id < 0) { // バリデーション ① throw IllegalArgumentException() } if (product.name.isEmpty()) { // バリデーション ② throw IllegalArgumentException() } val temp: Int = if (product.canDiscount) { // 条件分岐 ① discountMmanageranager.totalPrice + manager.getDiscountPrice(product.price) } else { manager.totalPrice + product.price } return if (temp < 3000) { // 条件分岐 ② manager.totalPrice = temp manager.discountProducts.add(product) true } else { false } } } 「良いコード / 悪いコードで学ぶ設計入門」より
Simplicity (理解容易性) システムとして可読性あるコーディングになっているか。処理ができ るだけシンプルな振る舞いになっているか。 ・ネストが深い if 分 ・複雑な三項演算子文 ・ stream,
filter, map を多用した Object 整形文
Simplicity (理解容易性) 分岐が多い if 分例 val hitPointRate: float = member.hitPoint
/ menber.maxHitPoint var currentHealthCondition: HealthCondition = HealthCondition.NONE if (hitPointRate == 0) { currentHealthCondition = HealthCondition.DEAD } else if (hitPointRate < 0.3) { currentHealthCondition = HealthCondition.DANGER } else if (hitPointRate < 0.5) { currentHealthCondition = HealthCondition.CAUTION } else { currentHealthCondition = HealthCondition.FINE } return currentHealthCondition 「良いコード / 悪いコードで学ぶ設計入門」より
Simplicity (理解容易性) コメントでの指摘例 val hitPointRate: float = member.hitPoint / menber.maxHitPoint
var currentHealthCondition: HealthCondition = HealthCondition.NONE if (hitPointRate == 0) { return currentHealthCondition = HealthCondition.DEAD } if (hitPointRate < 0.3) { return currentHealthCondition = HealthCondition.DANGER } if (hitPointRate < 0.5) { return currentHealthCondition = HealthCondition.CAUTION } return currentHealthCondition = HealthCondition.FINE
Naming (クラス、メソッド、変数名などの命名) 変数やクラス、メソッドに責務を意図した明確な名前が付けられて いるか。英語文法に誤りがないか。 typo もこれに含まれる。 ・振る舞いと一致しない変数名、関数名 ・責務と一致しない関数名 ・英文法の誤り
Style (コードスタイル) コードスタイル言語仕様に準拠しているか。 ・静的解析違反 ・不適切なアクセス修飾子 ・表記違反(スネーク、キャメルなど) ・公式( Apple 、 Google
等)が公開しているガイドライン違反
具体的な利用方法 指摘例 MUST ( Design ):ドメインロジックが Controller クラスに実装されてます。 domain 層の対象
package に新しくクラスを作成して実装を移してください。 コメントの prefix として利用する。
[ 発展編 ] prefix を付けたコメントを集計 GitLab API ( Note API
)を利用してコメントを集計します。 具体的な方法は、 ラクス Advent Calendar 2021 ( 12/23 ) 「 GitLab API で Merge Request のコメントを一括取得する方法」 をご覧ください。
まとめ レビューガイドラインを明文化すると ① コードレビューでオブジェクト指向が学べる ② 苦手分野が明らかになる ③ スキルアップのためのアクションプランが検討しやすい チームでの導入を検討してみてはいかがでしょうか
オンラインイベントや中途採用を積極的に行ってます! 最後に
ご清聴ありがとうございました