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
秘伝のタレ.pdf
Search
SatoshiN
May 28, 2019
0
23
秘伝のタレ.pdf
SatoshiN
May 28, 2019
Tweet
Share
More Decks by SatoshiN
See All by SatoshiN
開発スピード向上Tipsその2.pdf
satoshin303
0
45
担当しているiOSアプリを全部作り直す開発中に_いろいろ半自動化した事_簡易版.pdf
satoshin303
0
65
GitHub小技集.pdf
satoshin303
0
26
iOS_DC_2018_参加レポート.pdf
satoshin303
0
23
量子コンピュータ_の仕組みとQ_.pdf
satoshin303
0
160
モバイルアプリ_開発スピード向上Tips.pdf
satoshin303
0
20
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
334
57k
Debugging Ruby Performance
tmm1
73
12k
Navigating Team Friction
lara
183
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
6
230
Being A Developer After 40
akosma
84
590k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
324
23k
The World Runs on Bad Software
bkeepers
PRO
65
11k
What's in a price? How to price your products and services
michaelherold
243
11k
How STYLIGHT went responsive
nonsquared
94
5.1k
Building a Scalable Design System with Sketch
lauravandoore
459
32k
Transcript
秘伝のタレ
自己紹介 佐藤慎 (さとしん) Twitter @satoshin2071 GitHub https://github.com/SatoshiN303 最近の趣味 肩甲骨はがしなど ストレッチ全般
2019上半期 買って良かったもの
アジェンダ • はじめに • 立ちはだかる秘伝のタレを味わう • 秘伝のタレを生み出さないために • 秘伝のタレを紐解く・改善案を出す •
まとめ
はじめに 各社 新卒も入ってきたタイミングかと思いますが エンジニアならいつかは遭遇する確率の高い (実際に私が遭遇した) 秘伝のタレの話をします。
受託案件あるある 過去に実装した ソースコードを元に 「機能を追加して再リリース」 「フルスクラッチで作り直して再リリース」 Web, モバイル, インスタレーション, どんな案件でも誰しもいつかは遭遇するかと思います。
(立ちはだかる) 秘伝のタレ
秘伝のタレは会社や個人に悪循環を発生させます • 修正する場合の工数が増える • 大規模改修が許されない状況では暫定的な修正しかできなく なる • だんだん飽きてくる • だんだんその案件から離れたくなる
• だが新しい案件に関われない状況が続いたら? • テンション下がりきる • そして退職へ…
秘伝のタレを解きほぐしてみる
まずは秘伝のタレの特徴を抽出する • 非同期処理の完了通知にNSNotificationCenter • 一つのViewController や ◯◯Manager に複数の責務 • 同じ責務の処理がバラバラに管理
• MethodSwizzlingなど黒魔術の利用
まずは秘伝のタレの特徴を抽出する • 非同期処理の完了通知にNSNotificationCenter • → 可読性低下・複雑性循環 • 一つのViewController や ◯◯Manager
に複数の責務 • → 責務肥大化 • 同じ責務の処理がバラバラに管理 • → 一貫性のなさ • MethodSwizzlingなど黒魔術の利用 • → 標準的な方法からの逸脱
イメージ
ただし状況によっては最適なケースもある • 非同期処理の完了通知にNSNotificationCenter • → 小規模で設計がMVCなら有り • ViewController や ◯◯Manager
に複数の責務 • → 小規模・納期短い場合 なら有り • 同じ責務の処理がバラバラに管理 • → 逆に極端な再利用を考えると実装スピード落ちる • MethodSwizzlingなど黒魔術の利用 • → 黒魔術使ったほうがいい場合なら有り
設計選択の簡易フローチャート (フルスクラッチ版) 目的達成を 最優先で 最低限責務 (例 MVC) 小規模責務 (例 MVP)
中規模責務 (例 VIPER) 大規模責務 (例Clean Architecture) 納期の余裕 案件の規模 継続開発見込み 納期の余裕 ネガティブ ポジティブ
私が引き継いだ案件は大規模案件に該当 ↓ 設計は最低限規模〜小規模向けだった ↓ 秘伝のタレを少しずつアレンジ
秘伝のタレを紐解く・改善する • 非同期処理の完了通知にNSNotificationCenter • → 可読性低下・複雑性循環 • → 静的解析ツールをビルド毎に走らせる •
→ NSNotificationCenter による完了通知はMVC向きなの で方法を変更。Delegateパターンや closure, Promiseパ ターン, async / await を検討し利用する。
秘伝のタレを紐解く・改善する • ViewController や ◯◯Manager に複数の責務 • → 責務肥大化 •
同じ責務の処理がバラバラに管理 • → 一貫性のなさ • → 静的解析ツールをビルド毎に走らせる • → Clean Architectureを採用。設計レベルで責務を分ける ことで実装者の関心を出来る限り責務分けから離す。設計に 一貫性をもたせる。
参考
秘伝のタレを紐解く・改善する • MethodSwizzlingなど黒魔術の利用 • → 標準的な方法からの逸脱 • → 個人的興味で標準的な方法から逸脱したいときは状況を 見て楽しみましょう。(フローチャート参考)
私もこの間 脱線したあげくに結局直しました…
まとめ • 常に状況を観察して 最適な責務で分ける • 秘伝のタレが立ちはだかったときは大きな問題から一つ一つ 紐解いて 最適解を適用していく • 昨日かいたコードは既に秘伝のタレかもしれない…
参考書籍 プリンシプル オブ プログラミング
エクストリームリーディング会を 定期的に開催してます やってること • その場で全員で同じ項目を読んで疑問点を共有し合うスタイル • コードの「匂い」を嗅ぐ • 設計手法を学ぶ 次回5/31(金)
12-13