この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: ユーザーの作成
SEOタイトル: Django ユーザー作成完全ガイド (createsuperuser/User Model)

この記事の要点
  • 管理者を作るなら python manage.py createsuperuser。対話形式で username / email / password
  • プログラムから作るなら User.objects.create_user(username, email, password)。パスワードは自動でハッシュ化される
  • create() ではなく create_user() を使う。前者は生パスワードを保存してしまう
  • 独自フィールドを追加したい場合は AbstractUser を継承して AUTH_USER_MODEL に設定
  • fixtures / data migration で初期ユーザーを自動投入することも可能

Django におけるユーザーの基本

Django の認証システムは django.contrib.auth アプリにまとめられており、デフォルトでUser モデルが提供されます。User はユーザー名・メールアドレス・パスワード・権限情報を持つモデルです。

フィールド説明
usernameCharField(150)ユーザー名(一意)
emailEmailFieldメールアドレス
passwordCharField(128)ハッシュ化されたパスワード
first_name / last_nameCharField氏名(任意)
is_staffBoolean管理画面にログインできるか
is_superuserBoolean全権限を持つスーパーユーザー
is_activeBooleanログイン可能か(ソフト削除に使う)
date_joinedDateTime登録日時
last_loginDateTime最終ログイン

方法1: createsuperuser コマンドで管理者を作る

Django 管理画面(/admin/)にログインできるスーパーユーザーを作る最も簡単な方法:

# 対話形式
python manage.py createsuperuser

# プロンプト:
# Username: admin
# Email address: admin@example.com
# Password: ********
# Password (again): ********
# Superuser created successfully.

# 非対話モード(CI 用)
DJANGO_SUPERUSER_USERNAME=admin \
DJANGO_SUPERUSER_EMAIL=admin@example.com \
DJANGO_SUPERUSER_PASSWORD=secret123 \
python manage.py createsuperuser --noinput

作成後、/admin/ にアクセスして作成した認証情報でログインできれば成功です。

方法2: ORM から create_user() でユーザーを作る

登録機能やシード処理など、Python コードからユーザーを作るときの定番:

from django.contrib.auth import get_user_model

User = get_user_model()  # ★ カスタム User にも対応する書き方

# 一般ユーザーを作る
user = User.objects.create_user(
    username='taro',
    email='taro@example.com',
    password='secret123',  # 自動でハッシュ化される
)

# 追加情報を後から設定
user.first_name = '太郎'
user.last_name = '山田'
user.save()

# スーパーユーザーを作る
admin = User.objects.create_superuser(
    username='admin',
    email='admin@example.com',
    password='adminpass',
)

絶対に User.objects.create() を使わないでください。生パスワードが DB に保存されてしまいます:

# ❌ 危険: パスワードが平文で保存される
User.objects.create(username='taro', password='secret123')

# ✅ 正解
User.objects.create_user(username='taro', password='secret123')

# create() を使うなら set_password() でハッシュ化
user = User(username='taro')
user.set_password('secret123')
user.save()

方法3: 管理画面(Admin UI)で作る

スーパーユーザーでログインした後、Admin UI から GUI でユーザーを作れます:

  1. /admin/ にログイン
  2. 「Users」セクションの「Add」をクリック
  3. username と password を入力 → Save
  4. 編集画面で email / first_name / 権限 / グループを設定

方法4: UserCreationForm で登録機能を作る

Django には登録フォームとして UserCreationForm が用意されています:

# accounts/views.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from django.shortcuts import render, redirect

def signup(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)  # 登録後すぐログイン状態に
            return redirect('home')
    else:
        form = UserCreationForm()
    return render(request, 'signup.html', {'form': form})
{# signup.html #}
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">登録</button>
</form>

カスタム User モデルを作る

標準の User に独自フィールド(プロフィール画像、電話番号、会社名など)を追加したい場合は、プロジェクト初期からカスタム User を設計します。後から差し替えるのは非常に困難なので、最初の migrate 前に必ず実装してください。

# accounts/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    phone = models.CharField(max_length=20, blank=True)
    company = models.CharField(max_length=100, blank=True)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)

    def __str__(self):
        return self.username
# settings.py
AUTH_USER_MODEL = 'accounts.User'  # ★ 必須

INSTALLED_APPS = [
    # ...
    'accounts',  # カスタム User がある app
]

メールアドレスでログインさせたい場合

標準ではログイン ID は username ですが、email でログインさせたい場合は AbstractBaseUser + BaseUserManager で独自実装します:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models

class UserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra):
        if not email:
            raise ValueError('Email is required')
        email = self.normalize_email(email)
        user = self.model(email=email, **extra)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password=None, **extra):
        extra.setdefault('is_staff', True)
        extra.setdefault('is_superuser', True)
        return self.create_user(email, password, **extra)

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=100)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    objects = UserManager()
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

fixtures で初期ユーザーを投入

テスト・デモ環境用に初期ユーザーをまとめて投入したい場合:

// accounts/fixtures/initial_users.json
[
  {
    &quot;model&quot;: &quot;auth.user&quot;,
    &quot;pk&quot;: 1,
    &quot;fields&quot;: {
      &quot;username&quot;: &quot;demo&quot;,
      &quot;password&quot;: &quot;pbkdf2_sha256$390000$xxx...&quot;,
      &quot;is_active&quot;: true
    }
  }
]
# 投入
python manage.py loaddata initial_users

# パスワードハッシュは事前にシェルで生成
python manage.py shell
>>> from django.contrib.auth.hashers import make_password
>>> make_password('demo123')
'pbkdf2_sha256$...'

data migration で安全に投入

# accounts/migrations/0002_create_admin.py
from django.db import migrations

def create_admin(apps, schema_editor):
    from django.contrib.auth import get_user_model
    User = get_user_model()
    if not User.objects.filter(username='admin').exists():
        User.objects.create_superuser(
            username='admin',
            email='admin@example.com',
            password='changeme',
        )

class Migration(migrations.Migration):
    dependencies = [('accounts', '0001_initial')]
    operations = [migrations.RunPython(create_admin, migrations.RunPython.noop)]

FAQ

Q: パスワードを忘れた
A: python manage.py changepassword <username> でリセットできます。

Q: User モデルを途中で差し替えたい
A: ほぼ不可能です。新規データベースから作り直しになります。プロジェクト開始時に必ず判断してください。

Q: 認証情報の保存場所は?
A: デフォルトでは auth_user テーブル。カスタム User の場合は <app>_user テーブル。

Q: パスワードハッシュアルゴリズムは?
A: デフォルトで PBKDF2 + SHA256PASSWORD_HASHERS 設定で Argon2 / bcrypt にも切り替え可能。