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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Phase08_クイックウィン実装
overflowinc
0
1.6k
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
0
100
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
110
_Architecture_Modernization_から学ぶ現状理解から設計への道のり.pdf
satohjohn
2
730
スピンアウト講座01_GitHub管理
overflowinc
0
1.2k
Phase10_組織浸透_データ活用
overflowinc
0
1.5k
生成AIで速度と品質を両立する、QAエンジニア・開発者連携のAI協調型テストプロセス
shota_kusaba
0
510
新規事業×QAの挑戦:不確実性を乗りこなす!フェーズごとに求められるQAの役割変革
hacomono
PRO
0
180
スピンアウト講座04_ルーティン処理
overflowinc
0
1.1k
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
430
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
170
既存アプリの延命も,最新技術での新規開発も:WebSphereの最新情報
ktgrryt
0
160
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
2
290
Side Projects
sachag
455
43k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
エンジニアに許された特別な時間の終わり
watany
106
240k
Unsuck your backbone
ammeep
672
58k
How GitHub (no longer) Works
holman
316
150k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
160
sira's awesome portfolio website redesign presentation
elsirapls
0
200
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
180
Evolving SEO for Evolving Search Engines
ryanjones
0
170
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を使い倒す