Djangoで開発を楽にする

こんにちは。日頃はスタートアップで主にScalaで金融サービスのバックエンドアプリケーションを書いているのですが、アプリケーションの検証やテストデータの作成のためにPythonも使っています。

この記事では、自ら関わっているサービス開発に対して、Djangoアプリケーションがどういう経緯で採用し、変わっていったかについて振り返る記事を書きました。

2019年1月

サービス開始する直前の時期になり、多くの顧客がサービスを利用した場合を想定した試験をする必要が出てきました。SQLを直接Insertすることも可能でしたが、その時の仕様に合わせて正しいSQLを作成するというコストが高く、APIレベルで所定のシナリオを実行して、それを利用して数千人分のテスト用の顧客データを作成しました。それまでDjangoは利用したことがありませんでしたが、この件に使える時間が少ない、Tutorialが超親切、Viewが簡単につくれる、管理画面も初めから用意されていることなどから選択しました。

2019年5月

サービスが成長して多様な機能を持つようになるにつれ、DjangoのViewのみで様々な試験の要望を満たすことが困難になってきました。そこで、テストデータの条件設定とテストデータの作成部分を分離し、前者をNuxt.js、後者を以前から利用していたDjangoアプリケーションを拡張することで対応することにしました。

Django側はAPIを実行するとともに、各シナリオを実行するAPIを提供されることにしました。探した所、便利なプラグインを見つけました。

一方でNuxt.jsも既に色々な機能がBundleされているフレームワークであるという認識ですが、テンプレートコーディングそのものは助けてくれません。日々主にバックエンドを書いている私としてはCSSをイチから構築するのが辛いため、JSと喧嘩しなさそうなCSSフレームワークを探して、導入することにしました。

2020年4月

さらにサービスとして大きくなるだけでなく、テスト専門の方がJOINするようになり、エンジニアのローカル環境だけではなく、サーバー環境で動かせるようにしてほしいとの要望が出てきました。まずはDocker上で動かせるように各種調整するとともに、サービス本体も載せているManagedのk8s上で動かすことになりました(k8sへの乗せ換えは同僚が進めてくれました 感謝)。

2020年10月

・・・なんか、サーバー環境にDeployしたDjangoアプリケーションがまともに安定的に動いていないなと思ったら致命的なミスに気が付きました。​

DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone through security audits or performance tests. (And that’s how it’s gonna stay. We’re in the business of making Web frameworks, not Web servers, so improving this server to be able to handle a production environment is outside the scope of Django.)

ごめんなさい。読んでいませんでした。

production用の起動方法はいくつかあるようですが、DjangoがWSGIをサポートしているため(Pythonのフレームワークは大抵この規約に則っているとのこと)、WSGIに則ったアプリケーションを動かすためのAPサーバーとしてuWSGIを利用することにしました。 

所感

まだ課題はいくつも残っていますが、必要に迫られて初めたこのプロジェクトは、サービスの成長とともにここまでたどり着きました。

プログラムは誰かの仕事を自動的に行う、人間が直接行うよりも高い質と多い量の価値を出すためのものだと思いますが、プログラム開発自体も短時間で、楽しく、高いクオリティのものを出せるようにするためのコードを書くことで自分の時間を節約し、よりフォーカスすべき仕事に専念できるようにすることが大事だと思います。

Pythonの各種フレームワーク、ライブラリはドキュメントが充実しているものが多いです。このプロジェクトは、そういったドキュメントにサポートしてもらい進めてこられました。日頃貢献されている方に感謝です👏


この記事が気に入ったらサポートをしてみませんか?