【初心者向け】Django で API 開発を始める前に知っておくべき django-admin と manage.py の基本


django-admin

django-admin は、Django プロジェクトの管理に特化したコマンドラインツールです。プロジェクトの作成、アプリの登録、データベースのマイグレーション、各種コマンドの実行など、プロジェクトの基盤構築から運用まで、幅広いタスクを支援します。

API 開発における django-admin の主な役割

  • 管理コマンドの実行
    • Django には、ユーザー管理、セッション管理、キャッシュ管理など、様々な管理コマンドが用意されています。
    • django-admin <command_name> コマンドで、それぞれの管理コマンドを実行できます。
  • データマイグレーション
    • django-admin makemigrations コマンドで、モデルに変更を加えた際に必要なマイグレーションファイルを生成できます。
    • django-admin migrate コマンドで、生成されたマイグレーションファイルを適用し、データベースのスキーマを更新できます。
  • アプリの登録
    • django-admin startapp <app_name> コマンドで、API を実装するアプリを新規作成できます。


# 仮想環境を有効化
source <path_to_venv>/bin/activate

# 新しい Django プロジェクトを作成
django-admin startproject myproject

# API 用のアプリを作成
django-admin startapp api

# マイグレーションファイルを生成
django-admin makemigrations

# マイグレーションファイルを適用
django-admin migrate

# 開発サーバーを起動
django-admin runserver

manage.py は、Django プロジェクトに対して様々な操作を実行するための汎用コマンドラインスクリプトです。django-admin コマンドと同様に、プロジェクトの管理や設定に関わる操作を支援します。

API 開発における manage.py の主な役割

  • カスタムコマンドの実行
    • python manage.py <custom_command> コマンドで、プロジェクト独自のカスタムコマンドを実行できます。
    • カスタムコマンドは、プロジェクトの特定のタスクを自動化するために作成できます。
  • テストの実行
    • python manage.py test コマンドで、テストスイートを実行できます。
    • テストスイートは、コードの整合性や機能性を検証するのに役立ちます。
  • 開発サーバーの起動
    • python manage.py runserver コマンドで、Django 開発サーバーを起動できます。
    • 開発サーバーは、コード変更を反映しながらリアルタイムにアプリケーションを実行し、デバッグを容易にします。


# 開発サーバーを起動
python manage.py runserver

# テストを実行
python manage.py test

# カスタムコマンドを実行 (例: データベースのダンプ)
python manage.py dumpdata

django-adminmanage.py は、Django で API 開発を行う際に欠かせないツールです。それぞれのツールの特徴を理解し、適切に使い分けることで、効率的に API を構築することができます。

上記の説明に加えて、以下の点にも留意しておくと良いでしょう。



プロジェクトの作成と設定

# 仮想環境を有効化
source <path_to_venv>/bin/activate

# 新しい Django プロジェクトを作成
django-admin startproject myproject

このコマンドを実行すると、myproject という名前のプロジェクトディレクトリが作成されます。このディレクトリには、プロジェクトの設定ファイルや各種コードファイルが格納されます。

API 用のアプリを作成

django-admin startapp api

このコマンドを実行すると、api という名前のアプリディレクトリが作成されます。このディレクトリに、API のモデル、ビュー、シリアライザなどを定義するコードファイルを配置します。

モデルの定義

api/models.py ファイルに、API で扱うデータのモデルを定義します。

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.IntegerField()

この例では、Product というモデルを定義しています。このモデルは、商品名、価格、在庫数などの属性を持つ商品を表します。

ビューの定義

api/views.py ファイルに、API のエンドポイントとなるビューを定義します。

from django.http import JsonResponse
from .models import Product

def product_list(request):
    products = Product.objects.all()
    product_data = [
        {
            'id': product.id,
            'name': product.name,
            'price': product.price,
            'stock': product.stock,
        }
        for product in products
    ]
    return JsonResponse(product_data)

この例では、product_list というビューを定義しています。このビューは、GET リクエストを受け付け、すべての商品データの JSON 表現を返します。

シリアライザの定義

api/serializers.py ファイルに、モデルデータをシリアライズするためのシリアライザを定義します。

from rest_framework import serializers
from .models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'

この例では、ProductSerializer というシリアライザを定義しています。このシリアライザは、Product モデルのすべてのフィールドをシリアライズします。

URL の設定

myproject/urls.py ファイルに、API エンドポイントへの URL パターンを定義します。

from django.urls import path, include
from . import views

urlpatterns = [
    path('api/', include('api.urls')),
]

この例では、api/ プレフィックスを持つすべての URL パターンは、api アプリの urls.py ファイルに定義されているビューにルーティングされるように設定しています。

API アプリの URL 設定

api/urls.py ファイルに、API エンドポイントの詳細な URL パターンを定義します。

from django.urls import path
from .views import product_list

urlpatterns = [
    path('products/', product_list, name='product-list'),
]

この例では、products/ URL に対して product_list ビューを割り当てています。

マイグレーションの作成と適用

# マイグレーションファイルを生成
django-admin makemigrations

# マイグレーションファイルを適用
django-admin migrate

これらのコマンドを実行すると、Django はデータベースのスキーマをモデルに合わせて更新します。

開発サーバーの起動

python manage.py runserver

このコマンドを実行すると、Django 開発サーバーが起動します。ブラウザで http://localhost:8000/api/products/ にアクセスすると、すべての商品データの JSON 表現が表示されます。

  • Django ドキュメント
  • Django REST Framework などのライブラリを使用すると、より簡単に API を開発することができます。


Poet

Poet は、Django プロジェクトのセットアップ、管理、開発を支援するタスクランナーです。シンプルな構文で様々なタスクを実行でき、開発効率を大幅に向上させることができます。

主な機能

  • カスタムコマンドの実行
  • 開発サーバーの起動
  • テストの実行
  • データベースのマイグレーション
  • アプリの登録と管理
  • プロジェクトの作成と設定

特徴

  • django-admin と manage.py の機能をほぼ網羅
  • 高い拡張性
  • 豊富なタスクとプラグイン
  • 使いやすい YAML ファイルベースの構成


# Poet 設定ファイル (poetry.yaml)

name: myproject
version: 1.0.0
description: My Django API project

dependencies:
    - Django
    - djangorestframework

tasks:
    build:
        cmds:
            - python manage.py makemigrations
            - python manage.py migrate

    run:
        cmds:
            - python manage.py runserver

上記の設定ファイルで poetry build コマンドを実行すると、マイグレーションが生成・適用され、開発サーバーが起動します。

django-admin と manage.py との比較

  • django-admin と manage.py の主要な機能を網羅しているため、これらのツールからの移行も容易です。
  • 豊富なタスクとプラグインにより、様々な開発タスクを自動化することができます。
  • Poet は、YAML ファイルベースの構成により、設定内容をよりわかりやすく、メンテナンスしやすくしています。

Make

Make は、シンプルな構文でプロジェクトのビルド、テスト、実行などのタスクを自動化する汎用ツールです。Django プロジェクトの開発にも広く活用されています。

主な機能

  • プラグインによる機能拡張
  • 条件分岐やループ処理
  • 依存関係の管理
  • タスクの定義と実行

特徴

  • Poet ほど包括的な機能はない
  • プラグインエコシステムが豊富
  • 汎用性が高く、様々なタスクに利用可能
  • シンプルでわかりやすい構文


# Makefile

build:
    $(call makemigrations)
    $(call migrate)

run:
    python manage.py runserver

test:
    python manage.py test

上記 Makefile で make build コマンドを実行すると、マイグレーションが生成・適用され、開発サーバーが起動します。

django-admin と manage.py との比較

  • 他のツールとの連携も容易です。
  • Poet ほど包括的な機能はありませんが、基本的な開発タスクを自動化するには十分な機能を備えています。
  • Make は、シンプルで汎用性の高いツールであり、特定のフレームワークに依存していません。

Click は、Python 向けの強力なコマンドラインインターフェースライブラリです。高度なコマンドラインアプリケーションを構築するための機能を提供します。

主な機能

  • コマンドグループ化
  • ヘルプメッセージの生成
  • 引数検証
  • オプション処理
  • コマンドの定義と装飾

特徴

  • Poet や Make よりも高度な機能
  • 洗練されたユーザーエクスペリエンスの実現
  • 柔軟性と拡張性に優れたコマンドラインインターフェース構築


import click

@click.group()
def cli():
    pass

@cli.command()
@click.option('--migrate', is_flag=True)
def build(migrate):
    if migrate:
        click.echo('マイグレーションを実行します')
        $(call makemigrations)
        $(call migrate)
    else:
        click.echo('マイグレーションを実行しません')

    click.echo('開発サーバーを起動します')
    python manage.py runserver

上記コードで click build コマンドを実行すると、オプション --migrate が指定されていればマイグレーションが生成・適用され、開発サーバーが起動します。