🐕

# 2.2 Django のモデルベース開発

に公開

モデルベースの開発(Django の強み)

Django の特徴のひとつが モデルベースの開発
「モデル」を中心にアプリを設計することで、DB 定義・管理画面・フォームなどが一貫して構築できる。


モデルベースとは何か

Django ではデータ構造を Model クラス として定義する。
このモデルを軸に、以下の機能が自動的に(または最小限のコードで)利用できるようになる。

  • マイグレーション
    モデルを定義すれば、そのまま DB テーブルに反映できる

  • 管理画面
    モデルを admin.py に登録するだけで、自動生成された管理 UI が使える

  • フォーム
    モデルを元に入力チェックや HTML フォームを組み立てられる

  • クエリ
    モデルクラス経由で ORM を使った DB アクセスができる

👉 この仕組みにより「モデルがシステムの中核」となり、業務ルールを自然にアプリへ落とし込める。


コード例

モデル定義

# models.py
from django.db import models

class Order(models.Model):
    customer_name = models.CharField(max_length=100)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.customer_name} ({self.total_amount}円)"

マイグレーション

python manage.py makemigrations
python manage.py migrate

上記で DB に order テーブルが作成される。


管理画面に登録

# admin.py
from django.contrib import admin
from .models import Order

@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = ("id", "customer_name", "total_amount", "created_at")

これだけで 管理画面から注文の一覧・追加・編集・削除 ができるようになる。


フォームに展開

# forms.py
from django import forms
from .models import Order

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ["customer_name", "total_amount"]

このフォームを view に組み込めば、バリデーション付きの入力画面をすぐに用意できる。


AI 活用とモデルベース

AI に「Django モデルを作って」と依頼すると、即座に雛形コードを生成してくれる。
ただし、プロンプトの与え方によって結果が大きく変わる

プロンプト例 1(単純な依頼)

Django で注文を管理する Order モデルを作ってください。

AI 出力(例)

class Order(models.Model):
    customer_name = models.CharField(max_length=100)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

プロンプト例 2(業務ルールを踏まえた依頼)

顧客と注文の関係を考慮したモデルを Django で作ってください。
顧客は複数の注文を持てるようにしてください。

AI 出力(例)

class Customer(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

このように、AI は「業務ルールをどれだけプロンプトに含めるか」で出力が変わる。
雛形を作るスピードは圧倒的だが、実際の業務に合わせて修正・判断するのは人間の役割 になる。


モデルベース開発のメリット

  • DB とコードの乖離が少ない
    モデルがソースコードにあるので、仕様がコードでそのまま確認できる

  • 一貫性がある
    モデルを基点に管理画面やフォームがつながるため、余計な重複実装が減る

  • 開発スピードが速い
    ちょっとしたマスタ管理なら「モデルを定義して管理画面に登録するだけ」で完成する

  • 保守性が高い
    モデルがそのまま設計書の役割を果たす

  • AI 活用との相性が良い

    • 雛形は AI が高速生成
    • 業務ルールを反映する判断は人間が担当
    • この分担によりスピードと精度を両立できる

まとめ

Django の強みは 「モデルベースでアプリを設計できる」 点にある。
さらに AI を組み合わせることで、
「雛形は AI」「整合性は人間」 という分担が可能になり、開発スピードと品質を両立できる。

Discussion