0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Djangoで開発を行う際にやっておいて良かったこと

Posted at

はじめに

案件内でDjangoでの開発環境の構築を行った際にやっておいて良かったことを紹介しようと思います。
開発環境は下記を利用しています。

Django==3.2.5
djangorestframework==3.12.4
factory-boy==3.3.0
pytest==7.4.3

models.pyの分割

多くのテーブルを扱うとmodels.pyが肥大化します。
可読性向上を目的とし、テーブルごとにファイルを作成しました。

やり方

  • models.pyは削除し、models.pyがあった場所にmodels ディレクトリを用意する
  • modelsディレクトリに各テーブルのファイルを用意する
  • 各テーブルのファイルの中身はmodels.pyと同じ書き方で問題ない
models/
 ├ __init__.py
 ├ user.py
 └ book.py
  • modelsディレクトリに__init__.pyファイルを用意する
  • __init__.py ファイルで各テーブルのファイルをimportする
from .user import User
from .book import Book

SQLのログを表示する

  • N+1問題が発生していないか簡単に確認できるよう、発行されたSQLをログに出力するよう設定を行いました。

やり方

  • settings.pyに以下を記述
# 発行されたSQLをログに出力
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
        },
    },
    "loggers": {
        "django.db.backends": {
            "handlers": ["console"],
            "level": "DEBUG",
        },
    },
}

ログレベルや出力フォーマットのカスタムなども可能です。詳しい方法は公式ドキュメントを参照ください。

リンター・フォーマッター導入

コードの一貫性を保つために、リンター・フォーマッターを導入しました。
今回はPEP8に準拠したかったため、flake8とblackを採用しています。

やり方

以下のライブラリをインストールする

pip install flake8
pip install black

.flake8ファイルに以下記述

[flake8]
max-line-length = 88
extend-ignore = E203

// 対象外ファイルの設定。必要に応じて設定
exclude = api/migrations, api/models/__init__.py, api/views/__init__.py
  • flake8では1行の最大文字数を79文字に規定している一方で、Blackでは88文字まで許容しているため、この競合を回避するためmax-line-lengthを88に設定

  • flake8ではコロンの前に空白がある場合に警告を出す(E203)が、black は算術演算子の周りの空白を許可するため、この競合を回避するためE203を無視

pyproject.tomlに以下を記述

[tool.black]

// 対象外ファイルの設定。必要に応じて設定
exclude = '''
/(
    api/migrations
  | app/models/__init__.py
  | api/views/__init__.py
)/
'''
コマンドの実行
flake8 --show-source {対象ディレクトリ}
例)flake8 --show-source app
black {対象ディレクトリ}
例)black app

GithubActions

GitHubのCI/CDでflake8とblackのコマンドを実行し、PR作成じとコミット時にチェックを自動的に行うようにしました。

.github/workflows/backend-ci.ymlに以下を記述

name: backend-ci

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.10'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install flake8 black
    - name: Run flake8
      run: flake8 .
    - name: Run black
      run: black --check .

最後に

Djangoで開発を行う際にやっておいて良かったことを紹介してきました。
どれも簡単に行えるものなので、初期段階でささっと行っておくのが良さそうだと個人的に思いました。
Djangoでの開発の助けになれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?