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
Djangoで「良い」Factoryを書きたい
Search
Yasshieeee
June 20, 2024
Technology
0
68
Djangoで「良い」Factoryを書きたい
みんなのPython勉強会#105でのLT資料
Yasshieeee
June 20, 2024
Tweet
Share
More Decks by Yasshieeee
See All by Yasshieeee
「他の人が理解できる」を掘り下げる_リーダブルコード LT会 - vol.4
yacpotato
0
81
はんなりPython 47回LT回
yacpotato
0
180
Other Decks in Technology
See All in Technology
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
はじめてのOSS開発からみえたGo言語の強み
shibukazu
3
930
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい勘所を集めてみました! - / How to start Scrum that is not written in the Scrum Guide 2nd
takaking22
1
110
AI開発ツールCreateがAnythingになったよ
tendasato
0
130
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
230
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
210
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
210
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
220
Create Ruby native extension gem with Go
sue445
0
100
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
1k
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
530
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Transcript
Djangoで「良い」 Factoryを書きたい やっしー みんなのPython勉強会#105
自己紹介 名前 やっしー https://github.com/YaCpotato https://www.leadingmark.jp/ 現在業務でDjangoを使っています その他Rails, Nuxt.jsなどなど、3年ほどのWebエンジニアです :@Yasshieeee
今回の発表はトークメインで、発表しきれないことなど具体 例はQiitaに書いてあります! https://qiita.com/leadingmark_yashiro/items/0e38b0cbccd88505c9e8
「良い」Factory、書きたいですよね 問題提起:テスト導入初期、新しい viewsのテストの度にFactoryが修正される → 割れ窓的にできがちになる不完全な Factory → テストだけに集中したいのに Factoryもみなければならず、コスト増 → 絶賛改修中の機能周りのモデルだった場合、コンフリクトの可能性 ここ最近書くことが多くなり、知見をシェアさせていただきます。 ※本当にモデルに仕様変更はいったらしょうがないですコレ
「良い」Factoryとはなにか考える • 読みやすい、修正しやすい →作って終わりではない。使い続ける、変化に対応させるため • 使い方がわかりやすい →自分にしかわからないオレオレ Factoryはダメ (大体みんな同じ書き方にはなるのだが、 細かい部分で自身の想定との差異はコー
ディングが統一されない原因となる。細かいから指摘する優先度が下がる ) • データは現実に即している →自動生成してくれるFaker、便利だけれど、そのデータ、実際に入りうるの?
読みやすい、修正しやすい • 書き方(ルール)が統一されている ◦ f文字列、.format()など、文字列内の変数使用の方法 ◦ fakerの使用メソッドの統一 ◦ 変数をどう受け取り、どう作るか
使い方がわかりやすい DocStringを使おう! 引数としてカラム名で渡せば、 Factoryで参照し ていなくても使ってくれるが、極力書いてあげた い 上記でもこれができてしまう →
データは現実に即している Fakerから現実に即した出力を満たすメソッド探すの、つらいけど頑張らないとですね https://faker.readthedocs.io/en/master/locales/ja_JP.html# こういうときはぶっちゃけrandomパッケージ使ってます。 → ChoiceField:選択肢形式。データベース的に varchar
そのテストのための要件を満た すFactoryは、必ずしも他のテ ストの要件を満たすとは限らな い →新しいviewsのテストの度に 修正されがちになる
ではどうするか 新しいテスト書く度に仕様変更されないモデ ルのFactoryが修正されないために • テスト、Factoryにもコーディングルール • Factoryも詳細設計 • viewsではなくmodelのテストをまず書き、 Factoryを使い倒す