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
MonotaRO
PRO
December 12, 2024
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「良いコード」を探し求めて
2024/12/11開催
~モノタロウ式~ドメインモデリングとリアーキテクチャ Vol.2
MonotaRO
PRO
December 12, 2024
More Decks by MonotaRO
See All by MonotaRO
AIでSDLCは変わろうとしている では、人と組織をどう再設計すべきか
monotaro
PRO
0
260
モノタロウにおけるSREの現在地:モダナイゼーションの過程で変化していく組織に、SREはどう向き合ったか
monotaro
PRO
2
720
AIと共に、組織をどう進化させるか?
monotaro
PRO
1
410
ビジネスを駆動するアーキテクチャへ ~AI-Agentという新しいアクター
monotaro
PRO
2
17k
事業成長を支えるためのデータ アーキテクチャの取り組み - Data Engineering Summit
monotaro
PRO
0
660
AIと共に進化するモノタロウ - AI駆動開発 Conference Autumn 2025
monotaro
PRO
8
4.4k
映えないObservability
monotaro
PRO
3
990
Datadogを活用した マイクロサービスの可観測性向上 ~モノタロウの導入効果と実践ノウハウ~
monotaro
PRO
0
360
FastAPIの魔法をgRPC/Connect RPCへ
monotaro
PRO
1
2.7k
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
699
190k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Paper Plane (Part 1)
katiecoart
PRO
1
11k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
440
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
420
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
It's Worth the Effort
3n
188
29k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
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.