【Django】プロジェクト名を変更した時の配下のファイルの修正について

# プロジェクト名を修正した時の対処方法
開発をしているときに、「プロジェクト名を少し変更したいな...」と思う場面があると思います。
その場合は、プロジェクト配下のファイルや、プロジェクト外のファイルも変える必要があるのでいろいろ面倒です。

# プロジェクト配下の変更するファイル
|ファイル名|
|----------|
|app.py    |
|マイグレーションファイル|

#### app.pyの修正
例で書きますが、この`app.py`の場合は`name=`の部分をプロジェクト名と合わせる必要があります。
```app.py
from django.apps import AppConfig


class GeneralusersConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'generalusers'
```

#### マイグレーションファイルの場合

修正後に`python manege.py runserve`のコマンドを入力してサーバを起動したときにこのようなエラーが出ることがあります。

```
(エラー内容)
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\commands\runserver.py", line 137, in inner_run
    self.check_migrations()
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\base.py", line 581, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\migrations\executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\migrations\loader.py", line 58, in __init__
    self.build_graph()
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\migrations\loader.py", line 276, in build_graph
    self.graph.validate_consistency()
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\migrations\graph.py", line 198, in validate_consistency
    [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)]
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\migrations\graph.py", line 198, in <listcomp>
    [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)]
     ^^^^^^^^^^^^^^^
  File "C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\migrations\graph.py", line 60, in raise_error
    raise NodeNotFoundError(self.error_message, self.key, origin=self.origin)
django.db.migrations.exceptions.NodeNotFoundError: Migration generalusers.0003_alter_generalusers_generaluserimage dependencies reference nonexistent parent node ('generalUsers', '0002_alter_generalusers_generaluserimage')

```

実際のデータを例にしていますが、エラーメッセージの内容から、以下の問題が発生していることがわかります：

```
Migration generalusers.0003_alter_generalusers_generaluserimage dependencies reference nonexistent parent node ('generalUsers', '0002_alter_generalusers_generaluserimage')
```

このエラーは、generalusersアプリケーションのマイグレーションファイル内で、generalUsersという旧プロジェクト名に関連する依存関係が残っていることが原因です。

### 解決方法
マイグレーションファイルの修正 まず、マイグレーションファイル内で古いプロジェクト名generalUsersをgeneralusersに変更する必要があります。マイグレーションファイルを修正する方法は次の通りです：

generalusers/migrations/0003_alter_generalusers_generaluserimage.py というファイルを開き、generalUsersという名前が含まれている箇所をすべてgeneralusersに変更します。

具体的には、dependenciesリスト内に('generalUsers', '0002_alter_generalusers_generaluserimage')と記載されている部分を、次のように修正します：

```0002_alter_generalusers_generaluserimage.py
dependencies = [
    ('generalusers', '0002_alter_generalusers_generaluserimage'),
]

```

もしマイグレーションファイルに他にもgeneralUsersという名前がある場合、それらをすべて修正してください。

#### 古いマイグレーションファイルの削除 
上記の修正が完了した後、もし古いマイグレーションファイルが残っている場合、それを削除することを検討してください。例えば、generalusers/migrations/0001_initial.py や generalusers/migrations/0002_* などが古いプロジェクト名で作成されている場合、それらを削除して新しくマイグレーションを作成します。

#### マイグレーションの再作成 
古いマイグレーションファイルを修正または削除した後、以下のコマンドを使って新しいマイグレーションを作成します。

```
python manage.py makemigrations generalusers
```

その後、マイグレーションを適用します。
```
python manage.py migrate
```

#### マイグレーションファイルが正しいか確認 
マイグレーションファイルが正しく作成されたことを確認するために、以下のコマンドでマイグレーション状態をチェックできます。

```
python manage.py showmigrations
```


# プロジェクト外の修正するファイル
|ファイル名|
|----------|
|setting.py |
|urls.py    |
|wsgi.py    |

### setting.pyの修正

`setting.py`の場合は`INSTALLED_APPS`で追加しているソフトウェア名を修正します。
※今回は、「generalUsers」⇒「generalusers」へ変更した。

```setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',#追加
    'api',#追加
    'corsheaders',#追加
    'generalusers',#追加
]

```

### urls.pyの修正

`urls.py`の場合は、`urlpatterns`の箇所を修正します。

```urls.py
"""
URL configuration for todoproject project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include
from django.conf import settings
from django.conf.urls.static import static

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

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```

 ### wsgi.pyの修正

 `wsgi.py`の場合は、`os.environ.setdefault`を修正します。

 ```wsgi.py
 """
WSGI config for todoproject project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'todoproject.settings')

application = get_wsgi_application()

 ```

 以上です。