{"title":"はじめての Django アプリ作成、その 1","version":"4.1","locale":"ja","docname":"intro/tutorial01","url":"/ja/4.1/intro/tutorial01/","canonical":"https://djangodocs.dev/ja/4.1/intro/tutorial01/","summary":"さあ、例を交えながら学んでゆきましょう。 このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。 Poll アプリケーションは 2 つの部分からなります: ユーザが投票したり結果を表示したりできる公開用サイト 投票項目の追加、変更、削除を行うための管理 (admin) サイト…","html":"<h1>はじめての Django アプリ作成、その 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>さあ、例を交えながら学んでゆきましょう。</p>\n<p>このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。</p>\n<p>Poll アプリケーションは 2 つの部分からなります:</p>\n<ul class=\"simple\">\n<li><p>ユーザが投票したり結果を表示したりできる公開用サイト</p></li>\n<li><p>投票項目の追加、変更、削除を行うための管理 (admin) サイト</p></li>\n</ul>\n<p><a class=\"reference internal\" href=\"/ja/4.1/intro/install/\"><span class=\"doc\">Django は既にインストール済み</span></a> として説明を進めます。Django がインストールされているかどうか、またどのバージョンがインストールされているかを調べるには、以下のコマンドをシェルプロンプト（先頭の $ は入力待ちを示す記号です）で実行します。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>django<span class=\"w\"> </span>--version\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m django --version\n</code></pre></div></div></div>\n<p>Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ &quot;No module named django&quot; とエラーが表示されます。</p>\n<p>This tutorial is written for Django 4.1, which supports Python 3.8 and\nlater. If the Django version doesn't match, you can refer to the tutorial for\nyour version of Django by using the version switcher at the bottom right corner\nof this page, or update Django to the newest version. If you're using an older\nversion of Python, check <a class=\"reference internal\" href=\"/ja/4.1/faq/install/#faq-python-version-support\"><span class=\"std std-ref\">どのバージョンの Python で Django が使えますか?</span></a> to find a compatible\nversion of Django.</p>\n<p>Django の旧バージョンを削除して新しいものをインストールする場合は、 <a class=\"reference internal\" href=\"/ja/4.1/topics/install/\"><span class=\"doc\">Django のインストール方法</span></a> が参考になるでしょう。</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">困ったときは:</p>\n<p>このチュートリアルの実行に問題がある場合は、FAQ の <a class=\"reference internal\" href=\"/ja/4.1/faq/help/\"><span class=\"doc\">Getting Help</span></a> セクションに進んでください。</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>プロジェクトを作成する<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>初めて Django を使うのなら、最初のセットアップを行う必要があります。通常は、 Django のプロジェクト (<a class=\"reference internal\" href=\"/ja/4.1/glossary/#term-project\"><span class=\"xref std std-term\">project</span></a>) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。</p>\n<p>コマンドラインから、コードを置きたい場所に <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> して、以下のコマンドを 実行してください。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>django-admin<span class=\"w\"> </span>startproject<span class=\"w\"> </span>mysite\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> django-admin startproject mysite\n</code></pre></div></div></div>\n<p>これを実行すると、現在のディレクトリに <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> ディレクトリが作成されます。動作しなければ <a class=\"reference internal\" href=\"/ja/4.1/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">django-admin 実行時の問題</span></a> を参照してください。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>プロジェクトの名前を付けるとき、組み込みの Python モジュールや Django のコンポーネントの名前を使わないようにしてください。とりわけ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (Django 自体と名前が衝突します) や <code class=\"docutils literal notranslate\"><span class=\"pre\">test</span></code> (組み込みの Python パッケージ名と名前が衝突します) を使わないようにしましょう。</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\">\n<p class=\"admonition-title\">コードはどこに置くの？</p>\n<p>If your background is in plain old PHP (with no use of modern frameworks),\nyou're probably used to putting code under the web server's document root\n(in a place such as <code class=\"docutils literal notranslate\"><span class=\"pre\">/var/www</span></code>). With Django, you don't do that. It's\nnot a good idea to put any of this Python code within your web server's\ndocument root, because it risks the possibility that people may be able\nto view your code over the web. That's not good for security.</p>\n<p>コードはドキュメントルートの外、例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">/home/mycode</span></code> のような場所に置きましょう。</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/ja/4.1/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">startproject</span></code></a> が何を作成したかをみてみましょう:</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=\"n\">mysite</span><span class=\"o\">/</span>\n    <span class=\"n\">manage</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">mysite</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">urls</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">asgi</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">wsgi</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>ファイルはそれぞれ以下のような役割を持っています:</p>\n<ul class=\"simple\">\n<li><p>外側の <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> ルートディレクトリは、プロジェクトのコンテナです。その名前は Django にとって重要ではありません。任意の名前に変更できます。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです｡詳しくは <a class=\"reference internal\" href=\"/ja/4.1/ref/django-admin/\"><span class=\"doc\">django-admin と manage.py</span></a> 内の <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> を参照してください｡</p></li>\n<li><p>内側の <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> ディレクトリは、このプロジェクトの実際の Python パッケージです。この名前が Python パッケージの名前であり、 import の際に 使用する名前です (例えば import <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.urls</span></code>) 。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/__init__.py</span></code>: このディレクトリが Python パッケージであることを Python に知らせるための空のファイルです。Python の初心者は、 Python の公式 ドキュメントの <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">more about packages</span></a> を読んで下さい。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code>: Django プロジェクトの設定ファイルです。 設定の仕組みは <a class=\"reference internal\" href=\"/ja/4.1/topics/settings/\"><span class=\"doc\">Djangoの設定</span></a> を参照してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code>: Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。詳しくは <a class=\"reference internal\" href=\"/ja/4.1/topics/http/urls/\"><span class=\"doc\">URL ディスパッチャ</span></a> を参照 してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/asgi.py</span></code>: プロジェクトを提供する ASGI 互換 Web サーバーのエントリポイント。詳細については <a class=\"reference internal\" href=\"/ja/4.1/howto/deployment/asgi/\"><span class=\"doc\">How to deploy with ASGI</span></a> を参照してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/wsgi.py</span></code>: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。詳細は <a class=\"reference internal\" href=\"/ja/4.1/howto/deployment/wsgi/\"><span class=\"doc\">WSGI とともにデプロイするには</span></a> を参照してください。</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>開発用サーバー<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django のプロジェクトがうまく動作するか確認しましょう。外側の <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite</span></code> ディレクトリに移動ができたら下記のコマンドを実行してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>コマンドライン上で下記の出力が確認できるでしょう:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n2026年08月09日 - 15:50:53\nDjango version 4.1, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>適用されていないデータベースマイグレーションについての警告はここでは無視します、後ほどすぐにデータベースとともにたっぷりと取り組みます。</p>\n</aside>\n<p>You've started the Django development server, a lightweight web server written\npurely in Python. We've included this with Django so you can develop things\nrapidly, without having to deal with configuring a production server -- such as\nApache -- until you're ready for production.</p>\n<p>Now's a good time to note: <strong>don't</strong> use this server in anything resembling a\nproduction environment. It's intended only for use while developing. (We're in\nthe business of making web frameworks, not web servers.)</p>\n<p>Now that the server's running, visit <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> with your web\nbrowser. You'll see a &quot;Congratulations!&quot; page, with a rocket taking off.\nIt worked!</p>\n<aside class=\"admonition-changing-the-port admonition\">\n<p class=\"admonition-title\">ポート番号の変更</p>\n<p>デフォルトでは <a class=\"reference internal\" href=\"/ja/4.1/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> コマンドは内部 IP のポート 8000 で起動します。</p>\n<p>サーバーのポートを変えたい場合は、以下のようにコマンドライン引数を渡してください。このコマンドによってポート 8080 で起動させれます:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span><span class=\"m\">8080</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver 8080\n</code></pre></div></div></div>\n<p>サーバの IP を指定するときには、ポート番号も一緒に指定します。例えば、 全ての IP からのリクエストを受け付ける (サーバを他のコンピュータから見えるようにする) には、以下のようにします:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span><span class=\"m\">0</span>.0.0.0:8000\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver 0.0.0.0:8000\n</code></pre></div></div></div>\n<p>Full docs for the development server can be found in the\n<a class=\"reference internal\" href=\"/ja/4.1/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> reference.</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\">\n<p class=\"admonition-title\"><a class=\"reference internal\" href=\"/ja/4.1/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> の自動リロード</p>\n<p>開発サーバーは必要に応じてリクエストごとにPythonコードを自動的にリロードします。コード変更の効果を得るためにサーバーを再起動する必要はありません。しかしながら、ファイルの追加のようないくつかの行動は再起動をトリガーしません、このような場合はサーバーを再起動する必要があります。</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Polls アプリケーションをつくる<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>さあ、これで自分用の環境、すなわちプロジェクトが立ち上がり、作業にとりかかる準備ができました。</p>\n<p>Django 内に追加する各アプリケーションは、所定の規約に従った Python パッケージで構成されます。 Django には基本的なディレクトリ構造を自動生成するユーティリティが含まれているので、ディレクトリを作ることではなくコードを書くことに集中できます。</p>\n<aside class=\"admonition-projects-vs-apps admonition\">\n<p class=\"admonition-title\">プロジェクトとアプリケーション</p>\n<p>What's the difference between a project and an app? An app is a web\napplication that does something -- e.g., a blog system, a database of\npublic records or a small poll app. A project is a collection of\nconfiguration and apps for a particular website. A project can contain\nmultiple apps. An app can be in multiple projects.</p>\n</aside>\n<p>アプリは <span class=\"xref std std-ref\">Pythonパス</span> 上のどこにでも置くことができます。このチュートリアルでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> のサブモジュールではなく、それ自身のトップレベルモジュールとしてインポートできるように、 <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> ファイルと同じディレクトリにポーリングアプリを作成します。</p>\n<p>アプリケーションを作るには、 <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> と同じディレクトリに入って、このコマンドを実行します:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>startapp<span class=\"w\"> </span>polls\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py startapp polls\n</code></pre></div></div></div>\n<p>このコマンドは <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls</span></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=\"n\">polls</span><span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">migrations</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">tests</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>このディレクトリ構造が、 poll アプリケーションの全体像です。</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>はじめてのビュー作成<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>最初のビューを書いてみましょう。 <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/views.py</span></code> を開いて、以下の Python コードを書いてください:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/views.py</span></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=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Django で最も単純なビューです。ビューを呼ぶために、 URL を対応付けしてやる必要があります。そのためには  URLconf が必要です。</p>\n<p>polls ディレクトリに URLconf を作るには <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></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=\"n\">polls</span><span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">migrations</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">tests</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">urls</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code> ファイルには以下のコードを書いてください:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></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=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>次のステップはルートのURLconfに <code class=\"docutils literal notranslate\"><span class=\"pre\">polls.urls</span></code> モジュールの記述を反映させることです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">django.urls.include</span></code> のimportを追加して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> のリストに <a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> を挿入します。するとこのようになります:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> 関数は他の URLconf への参照することができます。 Django が <a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> に遭遇すると、そのポイントまでに一致した URL の部分を切り落とし、次の処理のために残りの文字列をインクルードされた URLconf へ渡します。</p>\n<p><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> の背景にある考えは、 URL を簡単にプラグ &amp; プレイ可能にすることです。 polls には独自の URLconf (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>) を持っているので、 &quot;/polls/&quot; 、 &quot;/fun_polls/&quot; や、 &quot;/content/polls/&quot; といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。</p>\n<aside class=\"admonition-when-to-use-func-django-urls-include admonition\">\n<p class=\"admonition-title\"><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> を使うとき</p>\n<p>URLパターンをインクルードするときはいつでも <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> を使うべきです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.site.urls</span></code> はこれについての唯一の例外です。</p>\n</aside>\n<p>これで <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> ビューを URLconf に紐付けることができました。下記のコマンドを実行して、動作を確認してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><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=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>ブラウザで <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> にアクセスすると、 &quot;<em>Hello, world. You're at the polls index.</em>&quot; と表示されるのが確認できるでしょう。これはビューの <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> で定義したものです。</p>\n<aside class=\"admonition-page-not-found admonition\">\n<p class=\"admonition-title\">ページが見つかりませんか？</p>\n<p>ここでエラーページが表示された場合は、<a class=\"reference external\" href=\"http://localhost:8000\">http://localhost:8000</a>/ではなく、<a class=\"reference external\" href=\"http://localhost:8000/polls\">http://localhost:8000/polls</a>/移動していることを確認してください。</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> 関数は4つの引数を受け取ります。引数のうち <code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code> の2つは必須で、<code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> の2つは省略可能です。ここで、これらの引数がどのようなものか見てみましょう。</p>\n<section id=\"path-argument-route\">\n<h3><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code><a class=\"heading-anchor\" href=\"#path-argument-route\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">route</span></code> は URL パターンを含む文字列です。リクエストを処理するとき、Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> のはじめのパターンから開始し、リストを順に下に見ていきます。要求された URL を一致するものを見つけるまで各パターンと比較します。</p>\n<p>パターンはGETやPOSTのパラメーター、そしてドメイン名を検索しません。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/</span></code> へのリクエストにおいては、URLconfは <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code> を見ます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/?page=3</span></code> へのリクエストにおいても、URLconfは <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code> を見ます。</p>\n</section>\n<section id=\"path-argument-view\">\n<h3><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code><a class=\"heading-anchor\" href=\"#path-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django がマッチする正規表現を見つけると、 Django は指定されたビュー関数を呼び出します。その際は <a class=\"reference internal\" href=\"/ja/4.1/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> オブジェクトを第一引数に、そしてキーワード引数としてrouteから「キャプチャされた」値を呼び出します。この例はこの後すぐ出てきます。</p>\n</section>\n<section id=\"path-argument-kwargs\">\n<h3><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code><a class=\"heading-anchor\" href=\"#path-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>任意のキーワード引数を辞書として対象のビューに渡せます。この機能はチュートリアルでは使いません。</p>\n</section>\n<section id=\"path-argument-name\">\n<h3><a class=\"reference internal\" href=\"/ja/4.1/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> 引数: <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code><a class=\"heading-anchor\" href=\"#path-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URL に名前付けをしておけば Django のどこからでも明確に参照でき、とくにテンプレートの中で有効です。この便利な機能のおかげで、プロジェクトのURLにグローバルな変更を加える場合にも1つのファイルを変更するだけで済むようになります。</p>\n<p>基本的なリクエストとレスポンスのフローに馴染んだら、データベースを使った作業を始めるために <a class=\"reference internal\" href=\"/ja/4.1/intro/tutorial02/\"><span class=\"doc\">チュートリアルその2</span></a> を読みましょう。</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"プロジェクトを作成する","anchor":"creating-a-project","children":[]},{"title":"開発用サーバー","anchor":"the-development-server","children":[]},{"title":"Polls アプリケーションをつくる","anchor":"creating-the-polls-app","children":[]},{"title":"はじめてのビュー作成","anchor":"write-your-first-view","children":[{"title":"path() 引数: route","anchor":"path-argument-route","children":[]},{"title":"path() 引数: view","anchor":"path-argument-view","children":[]},{"title":"path() 引数: kwargs","anchor":"path-argument-kwargs","children":[]},{"title":"path() 引数: name","anchor":"path-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"さぁ始めましょう","url":"/ja/4.1/intro/"}],"prev":{"docname":"intro/install","title":"クイックインストールガイド","url":"/ja/4.1/intro/install/"},"next":{"docname":"intro/tutorial02","title":"はじめての Django アプリ作成、その2","url":"/ja/4.1/intro/tutorial02/"},"formats":{"html":"/ja/4.1/intro/tutorial01/","markdown":"/ja/4.1/intro/tutorial01.md","json":"/ja/4.1/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/ja/4.1/intro/tutorial01/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}