Python

DjangoのN+1問題はpytestで検知しよう

こんにちは!
デバイスソフトウエア開発部の米森です。 担当している案件で、Webアプリ開発にDjangoを使用しています。
 
DjangoはPythonの「batteries included」という思想を踏襲しており、「バッテリー同梱なので、セットアップ作業無しですぐに色々な便利機能が使える」という考えをモットーの1つとして掲げています。
 
Webアプリ開発に必要な機能がほとんど全て揃っているようなDjangoですが、中でもORMが非常に強力で、SQLを意識することなく高速にWebアプリケーションを構築できます。しかし、その強力な抽象化の裏側で「いつの間にか意図せぬクエリが発行されていた」という恐怖を味わったことがあるエンジニアは多いのではないでしょうか。
 
その代表例が「N+1問題」です。
 
テストデータが少ない開発環境では問題が顕在化することが少ないので、動作確認の目をすり抜け、リリースされてしまうこともあります。
 
select_relatedや prefetch_relatedなどの回避策がDjangoから提供されていますが、これらが適切に使用されているかをコードレビューで確認するのには限界があります。
 
なので、今回はpytestを使ってN+1問題を機械的に検知する方法をご紹介します。 続きを読む

【AWS SES】2年目エンジニアがhCaptchaでボットを撃退した話

こんにちは!開発本部 SJC 共同開発推進室の對島です。

皆さんは、Webサイトで「車を選んでください」とか「信号機はどれ?」といった画像認証が出てきて、「あぁ〜!もう面倒くさいな!」と思ったことはありませんか?

以前までは私もそう思っていました、、、

でも最近、業務でボット対策を任され、裏側で繰り広げられていたボットとの闘いがそこにはありました。今回は、AWS初心者の私が知ったAmazon SESの危機と、それを救うhCaptchaについて、等身大でお届けします!

続きを読む

DRFのシリアライザとto_internal_value()

こんにちは!開発部の米森です! 現在のプロジェクトでDjango Restframework(以下DRF)を使用してWeb APIを実装しています。とても便利なフレームワークなので効率的に開発を進めることができるのですが、DRF固有の概念であるシリアライザーにハマってしまったので、そのあたりの情報共有をさせてください! 続きを読む