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
70
Djangoで「良い」Factoryを書きたい
みんなのPython勉強会#105でのLT資料
Yasshieeee
June 20, 2024
Tweet
Share
More Decks by Yasshieeee
See All by Yasshieeee
「他の人が理解できる」を掘り下げる_リーダブルコード LT会 - vol.4
yacpotato
0
83
はんなりPython 47回LT回
yacpotato
0
180
Other Decks in Technology
See All in Technology
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
0
160
Context Engineeringの取り組み
nutslove
0
380
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
130
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
850
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
400
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
110
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
610
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
210
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
85
Abbi's Birthday
coloredviolet
1
4.8k
Crafting Experiences
bethany
1
52
Building AI with AI
inesmontani
PRO
1
710
Producing Creativity
orderedlist
PRO
348
40k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
Code Review Best Practice
trishagee
74
20k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Accessibility Awareness
sabderemane
0
56
Leo the Paperboy
mayatellez
4
1.4k
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を使い倒す