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
「良いコード」を探し求めて
Search
MonotaRO
PRO
December 12, 2024
0
110
「良いコード」を探し求めて
2024/12/11開催
~モノタロウ式~ドメインモデリングとリアーキテクチャ Vol.2
MonotaRO
PRO
December 12, 2024
Tweet
Share
More Decks by MonotaRO
See All by MonotaRO
ビジネスとアプリケーションを繋げるモデリング
monotaro
PRO
0
140
20241004 モノタロウ式~ドメインモデリングとリアーキテクチャ
monotaro
PRO
2
1k
BigQueryとCloud Composerを使って大規模バッチ処理をデータパイプラインに再構築する
monotaro
PRO
5
390
ビジネスの構造をアーキテクチャに落とし込みソフトウェアに可変性を注入する
monotaro
PRO
20
7k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
800
4 Signs Your Business is Dying
shpigford
181
21k
Building Your Own Lightsaber
phodgson
103
6.1k
Rails Girls Zürich Keynote
gr2m
94
13k
Fireside Chat
paigeccino
34
3.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
430
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Transcript
「良いコード」を探し求めて ~開発現場からお伝えします~ 頼(らい) SWE@株式会社MonotaRO 1 2024.12.11 LT@MonotaRO Tech Talk © 2020
MonotaRO Co., Ltd. All Rights Reserved.
🥅ゴール 2 みなさんがチーム内で 良いコード 保守性 設計原則 について話し合うきっかけになれたら
今日の話 3 そうだ、 について認識を合わせよう 良いコード 保守性 設計原則 私たちのチームが とした話
🙋「良いコード」を書きたいですか? 4
🙋リファクタリングしていますか? 5
私たちもリファクタリングしています 6
🤔そういえば、私たちは何を目指して リファクタリングしているんだっけ 7
私たちは「良いコード」を目指して リファクタリングしています 8
🤔私たちが目指している「良いコード」とは? 9
🤔 10
🤔 11
🤔 12
🚩そうだ、「良いコード」について認識を合わせよう 13
私たちが目指している良いコードとは? 14 リファクタリング しやすい テストしやすい 疎結合
ソフトウェアの品質特性から考えてみる 15 • システム・ソフトウェア製品品質モデル(JIS X 25010) ◦ 機能適合性 ◦ 性能効率性
◦ 互換性 ◦ 使用性 ◦ 信頼性 ◦ セキュリティ ◦ 保守性 ◦ 移植性 📖参照: IPA『つながる世界のソフトウェア品質ガイド』
ソフトウェアの品質特性から考えてみる 16 • システム・ソフトウェア製品品質モデル ◦ 保守性 ▪ モジュール性 / 再利用性
/ 解析性 / 修正性 / 試験性 変更しやすい テストしやすい 疎結合
🤔保守性の良いコードとは? 17
🤔 18
🤔 19
🤔 20
💡そうだ、保守性について認識を合わせよう 21 🚩「良いコード」 ↑
保守性の良いコードとは? ちょっと寄り道 ➥パフォーマンスの良いコードとは? 22
線形探索と二分探索を例に 23 def 線形探索(arr: list[int], target: int) -> int: for
i in range(len(arr)): if arr[i] == target: return i return -1 def 二分探索(arr: list[int], target: int) -> int: left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid if arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 🎨 Colors: Catppuccin Latte from https://github.com/catppuccin/catppuccin
パフォーマンスを解析してみる 24 20ms ⏱ 1ms👑 O(N) ✏ O(logN)👑 実行してみる vs
計算量を 分析してみる
パフォーマンス 動的解析 ◯(実行時間) 静的解析 ◯(計算量) パフォーマンスは解析できる 25
パフォーマンス 保守性 動的解析 ◯(実行時間) △ 静的解析 ◯(計算量) 🤔 保守性は解析できる? 26
フィードバック ループが長い これを探したい
保守性は解析できそう 27 パフォーマンス 保守性 動的解析 ◯(実行時間) △ 静的解析 ◯(計算量) 💡設計原則(との適合度)
設計原則 28 • 保守性につながる設計の経験則 ◦ 保守性を分析し、言語化するツール ◦ 保守性を高める指針 • いろいろある📚
• 抽象度が高い🌀
💡そうだ、設計原則について認識を合わせよう 29 🚩「良いコード」 ↑ 保守性 ↑
• 読み合わせ式 ◦ 社内研修資料の振り返り ▪ テストとリファクタリングのワークショップ[1] ◦ 解説記事など ▪ SOLID原則完全に理解した!になるための本
▪ 7つの設計原則とオブジェクト指向プログラミン グ 30 勉強会を開いた 👉 [1] ワークショップの様子はこちらの記事で紹介されています リファクタリングを文化にする 〜組織が技術的負債と向き合うワークショップ〜 - MonotaRO Tech Blog
• 抽象度の高い原則を読み解くため、できるだけ掘り下 げた • 自分たちのコードベースと業務に照らし合わせてみた 31 設計原則の読み合わせ方 なにがうれしい? つまり? 例えばこのコードのこと?
ここは単一責任原則を守ら れていない?
• 読んだだけでは「さじ加減」がわからない ◦ 単一責任の原則 → 責任の単位は? ◦ DRY → 重複の判定基準は?行数?[1]
• 感覚を身につけるには実践が必要 ◦ リファクタリング! 32 原則から実践へ ⛳ 🏌 💪? 📖[1] Read more: Google Testing Blog: Don't DRY Your Code Prematurely
• 違和感を感じたら「リファクタリングチケット」に追記 • 例えば ◦ テストが長い ▪ 💡テスト対象が責任を持ちすぎ?密結合になってい る? ◦
機能追加するのに変更しないといけないレイヤーが多い ▪ 💡レイヤーの分け方が不適切?抽象化しすぎ? 33 リファクタリングの対象を追跡する
• 定期リファクタリング ◦ リファクタリングチケットにストーリーポイントを 割り当てる • 予備のためのリファクタリング[1] ◦ 綺麗にしてから拡張/変更を加える 34
リファクタリングの時間を作る 📖[1] Read more: リファクタリング(第 2版) 既存のコードを安全に改善する
まとめ • 「良いコード」→保守性→設計原則 ◦ という道をたどって認識を合わせた • 設計原則🔁リファクタリング ◦ 設計原則がリファクタリングの指針となった ◦
リファクタリングで設計原則の理解を深めた 35
36 みなさんもチーム内で について話し合ってみませんか? 良いコード 保守性 設計原則
37 Thank you!
38 © 2020 MonotaRO Co., Ltd. All Rights Reserved.