MeWrite Docs

ImproperlyConfigured

Djangoの設定が不正または不足している場合に発生するエラー

概要

ImproperlyConfigured は、Djangoの設定ファイル(settings.py)に問題がある場合に発生するエラーです。必須設定の欠落、不正な値、環境変数の未設定などが原因です。

エラーメッセージ

django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured.
django.core.exceptions.ImproperlyConfigured: WSGI application 'myproject.wsgi.application' could not be loaded

原因

  1. SECRET_KEY未設定: 本番環境でSECRET_KEYが空
  2. データベース設定不備: 接続情報が間違っている
  3. INSTALLED_APPSの問題: アプリが正しく登録されていない
  4. 環境変数未設定: 必要な環境変数が設定されていない
  5. DJANGO_SETTINGS_MODULE未設定: 設定モジュールが指定されていない

解決策

1. SECRET_KEYを設定

開発環境(settings.py):

1
SECRET_KEY = 'your-secret-key-here'

本番環境(環境変数から取得):

1
2
3
4
5
import os

SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
if not SECRET_KEY:
    raise ImproperlyConfigured('Set the DJANGO_SECRET_KEY environment variable')

SECRET_KEYを生成:

1
2
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())

または:

1
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

2. データベース設定を確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('DB_NAME', 'mydb'),
        'USER': os.environ.get('DB_USER', 'myuser'),
        'PASSWORD': os.environ.get('DB_PASSWORD', ''),
        'HOST': os.environ.get('DB_HOST', 'localhost'),
        'PORT': os.environ.get('DB_PORT', '5432'),
    }
}

SQLiteの場合:

1
2
3
4
5
6
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

3. INSTALLED_APPSを確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # サードパーティ
    'rest_framework',
    'corsheaders',

    # 自作アプリ(apps.pyのnameと一致させる)
    'myapp.apps.MyappConfig',
    # または
    'myapp',
]

apps.py:

1
2
3
4
5
from django.apps import AppConfig

class MyappConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'  # INSTALLED_APPSと一致させる

4. 環境変数を設定

.envファイル:

1
2
3
4
5
DJANGO_SECRET_KEY=your-secret-key
DJANGO_DEBUG=True
DB_NAME=mydb
DB_USER=myuser
DB_PASSWORD=mypassword

settings.py(python-dotenv使用):

1
2
3
4
5
6
7
from dotenv import load_dotenv
import os

load_dotenv()

SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
DEBUG = os.getenv('DJANGO_DEBUG', 'False') == 'True'

5. DJANGO_SETTINGS_MODULEを設定

manage.py:

1
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

wsgi.py:

1
2
3
4
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

環境変数で設定:

1
export DJANGO_SETTINGS_MODULE=myproject.settings

6. ALLOWED_HOSTSを設定

1
2
3
4
5
6
7
8
# 開発環境
ALLOWED_HOSTS = ['localhost', '127.0.0.1']

# 本番環境
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '').split(',')

# またはワイルドカード(開発のみ)
ALLOWED_HOSTS = ['*']

7. STATIC/MEDIA設定を確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 静的ファイル
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]

# メディアファイル
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

8. 設定ファイルの分割(環境別)

myproject/
├── settings/
│   ├── __init__.py
│   ├── base.py      # 共通設定
│   ├── local.py     # 開発環境
│   └── production.py # 本番環境

base.py:

1
2
3
4
5
6
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent.parent

INSTALLED_APPS = [...]
MIDDLEWARE = [...]

local.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from .base import *

DEBUG = True
SECRET_KEY = 'dev-secret-key'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

production.py:

1
2
3
4
5
6
from .base import *
import os

DEBUG = False
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '').split(',')

使用方法:

1
2
3
4
5
# 開発環境
export DJANGO_SETTINGS_MODULE=myproject.settings.local

# 本番環境
export DJANGO_SETTINGS_MODULE=myproject.settings.production

デバッグ方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 設定を確認
python manage.py check

# シェルで設定を確認
python manage.py shell
>>> from django.conf import settings
>>> print(settings.SECRET_KEY)
>>> print(settings.DATABASES)

# 設定を表示(diffsettingsコマンド)
python manage.py diffsettings

Django の他のエラー

最終更新: 2025-12-08