---
title: "カスタム shell コマンドの作り方"
version: 5.2
locale: ja
source: https://docs.djangoproject.com/ja/5.2/howto/custom-shell/
canonical: https://djangodocs.dev/ja/5.2/howto/custom-shell/
---
# カスタム `shell` コマンドの作り方

Djangoの [`shell`](/ja/5.2/ref/django-admin/#django-admin-shell) は、モデルと設定へのアクセスを提供する対話型の Python 環境であり、コードのテスト、クエリの実験、アプリケーションデータとのやりとりに役立ちます。

[`shell`](/ja/5.2/ref/django-admin/#django-admin-shell) コマンドをカスタマイズすることで、機能を追加したり、特定のモジュールをプリロードしたりできます。そのためには、 `django.core.management.commands.shell.Command` のサブクラスを作成し、既存の `shell` 管理コマンドをオーバーライドする新しい管理コマンドを作成します。詳細については、 [コマンドのオーバーライド](/ja/5.2/howto/custom-management-commands/#overriding-commands) に関するガイドを参照してください。

## 自動インポートをカスタマイズする

> **New in Django 5.2**

[`shell`](/ja/5.2/ref/django-admin/#django-admin-shell) 管理コマンドの自動インポート動作をカスタマイズするには、 `get_auto_imports()` メソッドをオーバーライドします。このメソッドは、アプリケーションで利用可能なオブジェクトまたはモジュールのインポートパスのシーケンスを返す必要があります。例えば:

*`polls/management/commands/shell.py`*

```python
from django.core.management.commands import shell

class Command(shell.Command):
    def get_auto_imports(self):
        return super().get_auto_imports() + [
            "django.urls.reverse",
            "django.urls.resolve",
        ]
```

上記のカスタマイズにより、 [`resolve()`](/ja/5.2/ref/urlresolvers/#django.urls.resolve) と [`reverse()`](/ja/5.2/ref/urlresolvers/#django.urls.reverse) がデフォルトの名前空間に追加されます。この名前空間には、すでに [`INSTALLED_APPS`](/ja/5.2/ref/settings/#std-setting-INSTALLED_APPS) に含まれるアプリのすべてのモデルが含まれています。これらのオブジェクトは、 `shell` 内で手動でインポートすることなく利用できるようになります。

このようにカスタムした `shell` コマンドを `verbosity=2` を付けて実行すると、次のように表示されます：

```console
8 objects imported automatically:

  from django.contrib.admin.models import LogEntry
  from django.contrib.auth.models import Group, Permission, User
  from django.contrib.contenttypes.models import ContentType
  from django.contrib.sessions.models import Session
  from django.urls import resolve, reverse
```

オーバーライドされた `shell` コマンドにインポートできないパスが含まれている場合、 `verbosity` を `1` 以上に設定するとエラーが表示されます。重複したインポートは自動的に処理されます。

特定の `shell` セッションで自動インポートを無効にしたい場合は、 [`--no-imports`](/ja/5.2/ref/django-admin/#cmdoption-shell-no-imports) フラグを使用してください。自動インポートを恒久的に無効にするには、`get_auto_imports()` をオーバーライドして `None` を返すようにします：

```
class Command(shell.Command):
    def get_auto_imports(self):
        return None
```
