{"title":"カスタム shell コマンドの作り方","version":"6.1","locale":"ja","docname":"howto/custom-shell","url":"/ja/6.1/howto/custom-shell/","canonical":"https://djangodocs.dev/ja/6.1/howto/custom-shell/","summary":"Djangoの shell は、モデルと設定へのアクセスを提供する対話型の Python 環境であり、コードのテスト、クエリの実験、アプリケーションデータとのやりとりに役立ちます…","html":"<h1>カスタム <code class=\"docutils literal notranslate\">shell</code> コマンドの作り方<a class=\"heading-anchor\" href=\"#how-to-customize-the-shell-command\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Djangoの <a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\">shell</code></a> は、モデルと設定へのアクセスを提供する対話型の Python 環境であり、コードのテスト、クエリの実験、アプリケーションデータとのやりとりに役立ちます。</p>\n<p><a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\">shell</code></a> コマンドをカスタマイズすることで、機能を追加したり、特定のモジュールをプリロードしたりできます。そのためには、 <code class=\"docutils literal notranslate\">django.core.management.commands.shell.Command</code> のサブクラスを作成し、既存の <code class=\"docutils literal notranslate\">shell</code> 管理コマンドをオーバーライドする新しい管理コマンドを作成します。詳細については、 <a class=\"reference internal\" href=\"/ja/6.1/howto/custom-management-commands/#overriding-commands\"><span class=\"std std-ref\">コマンドのオーバーライド</span></a> に関するガイドを参照してください。</p>\n<section id=\"customize-automatic-imports\">\n<span id=\"customizing-shell-auto-imports\"></span><h2>自動インポートをカスタマイズする<a class=\"heading-anchor\" href=\"#customize-automatic-imports\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#django-admin-shell\"><code class=\"xref std std-djadmin docutils literal notranslate\">shell</code></a> 管理コマンドの自動インポート動作をカスタマイズするには、 <code class=\"docutils literal notranslate\">get_auto_imports()</code> メソッドをオーバーライドします。このメソッドは、アプリケーションで利用可能なオブジェクトまたはモジュールのインポートパスのシーケンスを返す必要があります。例えば:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/management/commands/shell.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.management.commands</span> <span class=\"kn\">import</span> shell\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Command</span><span class=\"p\">(</span>shell<span class=\"o\">.</span>Command<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_auto_imports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_auto_imports<span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"p\">[</span>\n            <span class=\"s2\">&quot;django.urls.reverse&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;django.urls.resolve&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">]</span>\n</code></pre></figure>\n<p>The customization above adds <a class=\"reference internal\" href=\"/ja/6.1/ref/urlresolvers/#django.urls.resolve\" title=\"django.urls.resolve\"><code class=\"xref py py-func docutils literal notranslate\">resolve()</code></a> and\n<a class=\"reference internal\" href=\"/ja/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> to the default namespace, which already includes\nall models from the apps listed in <a class=\"reference internal\" href=\"/ja/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> plus what is\nimported by default. These objects will be available in the <code class=\"docutils literal notranslate\">shell</code> without\nrequiring a manual import.</p>\n<p>このようにカスタムした <code class=\"docutils literal notranslate\">shell</code> コマンドを <code class=\"docutils literal notranslate\">verbosity=2</code> を付けて実行すると、次のように表示されます：</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"go\">13 objects imported automatically:</span>\n\n<span class=\"go\">  from django.db import connection, reset_queries, models</span>\n<span class=\"go\">  from django.conf import settings</span>\n<span class=\"go\">  from django.contrib.admin.models import LogEntry</span>\n<span class=\"go\">  from django.contrib.auth.models import Group, Permission, User</span>\n<span class=\"go\">  from django.contrib.contenttypes.models import ContentType</span>\n<span class=\"go\">  from django.contrib.sessions.models import Session</span>\n<span class=\"go\">  from django.urls import resolve, reverse</span>\n<span class=\"go\">  from django.utils import timezone</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"6.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>Automatic imports of common utilities, such as <code class=\"docutils literal notranslate\">django.conf.settings</code>,\nwere added.</p>\n</aside>\n<p>オーバーライドされた <code class=\"docutils literal notranslate\">shell</code> コマンドにインポートできないパスが含まれている場合、 <code class=\"docutils literal notranslate\">verbosity</code> を <code class=\"docutils literal notranslate\">1</code> 以上に設定するとエラーが表示されます。重複したインポートは自動的に処理されます。</p>\n<p>特定の <code class=\"docutils literal notranslate\">shell</code> セッションで自動インポートを無効にしたい場合は、 <a class=\"reference internal\" href=\"/ja/6.1/ref/django-admin/#cmdoption-shell-no-imports\"><code class=\"xref std std-option docutils literal notranslate\">--no-imports</code></a> フラグを使用してください。自動インポートを恒久的に無効にするには、<code class=\"docutils literal notranslate\">get_auto_imports()</code> をオーバーライドして <code class=\"docutils literal notranslate\">None</code> を返すようにします：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Command</span><span class=\"p\">(</span>shell<span class=\"o\">.</span>Command<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_auto_imports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n</code></pre></div>\n</section>","rootId":"how-to-customize-the-shell-command","toc":[{"title":"自動インポートをカスタマイズする","anchor":"customize-automatic-imports","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"How-to ガイド","url":"/ja/6.1/howto/"}],"prev":{"docname":"howto/custom-management-commands","title":"カスタム django-admin コマンドの作り方","url":"/ja/6.1/howto/custom-management-commands/"},"next":{"docname":"howto/mailers-migration","title":"Migrating email to mailers","url":"/ja/6.1/howto/mailers-migration/"},"formats":{"html":"/ja/6.1/howto/custom-shell/","markdown":"/ja/6.1/howto/custom-shell.md","json":"/ja/6.1/howto/custom-shell.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/howto/custom-shell.txt","official":"https://docs.djangoproject.com/ja/6.1/howto/custom-shell/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}