{"title":"はじめての Django アプリ作成、その 1","version":"1.9","locale":"ja","docname":"intro/tutorial01","url":"/ja/1.9/intro/tutorial01/","canonical":"https://djangodocs.dev/ja/1.9/intro/tutorial01/","summary":"さあ、例を交えながら学んでゆきましょう。このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組んでもらいます。","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/1.9/intro/install/\"><span class=\"doc\">Django は既にインストール済み</span></a> として、説明を進めます。 Django がインストールされている、どのバージョンか調べるには、以下のコマンドを実行します:</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=\"gp\">$ </span>python -m django --version\n</code></pre></div>\n<p>Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ &quot;No module named django&quot; とエラーが表示されます。</p>\n<p>このチュートリアルは Django 1.9 と Python 3.4 以降を対象に書かれています。 Django のバージョンが合わなければ、このページの右下のバージョンスイッチャーを使用して、インストールされている Django のバージョンのチュートリアルを参照するか、最新の Django にアップデートしてください。 Python 2.7 を使用している場合は、コメントで説明されているように、サンプルコードを調整する必要があります。</p>\n<p><a class=\"reference internal\" href=\"/ja/1.9/topics/install/\"><span class=\"doc\">Django のインストール方法</span></a> を見て、 Django の旧バージョンを削除してより新しいものをインストールしてください。</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">困ったときは:</p>\n<p>このチュートリアルを進めてゆく上で困ったことがあったら、 <a class=\"reference internal\" href=\"/ja/1.9/internals/mailing-lists/#django-users-mailing-list\"><span class=\"std std-ref\">django-users</span></a> もしくは <a class=\"reference external\" href=\"irc://irc.freenode.net/django\">irc.freenode.net の #django チャンネル</a>  で誰か助けてくれそうな Django ユーザと話してみてください。</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 の <span class=\"xref std std-term\">プロジェクト</span> (<a class=\"reference internal\" href=\"/ja/1.9/glossary/#term-project\"><span class=\"xref std std-term\">project</span></a>) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。</p>\n<p>コマンドラインから、コードを置きたい場所に <code class=\"docutils literal notranslate\">cd</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=\"gp\">$ </span>django-admin startproject mysite\n</code></pre></div>\n<p>現在のディレクトリに <code class=\"docutils literal notranslate\">mysite</code> ディレクトリが作成されます。動作しなければ <a class=\"reference internal\" href=\"/ja/1.9/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">Problems running 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\">django</code> (Django 自体と名前が衝突します) や <code class=\"docutils literal notranslate\">test</code> (組み込みの Python パッケージ名と名前が衝突します) を使わないようにしましょう。</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\" role=\"note\">\n<p class=\"admonition-title\">コードはどこに置くの？</p>\n<p>(モダンなフレームワークを使わない) 古いプレーンな PHP の経験があるなら、これまでは Web サーバのドキュメントルート下 (<code class=\"docutils literal notranslate\">/var/www</code> といった場所) にコードを配置してきたことでしょう。 Django ではそうしないでください｡ Python コードを Web サーバーのドキュメントルート下に置かないでください｡コードをドキュメントルート下に置くと、 誰かがコードを Web を介して読めるようになってしまうからです。これは安全上良くありません。</p>\n<p>コードはドキュメントルートの外､例えば <code class=\"docutils literal notranslate\">/home/mycode</code> の ような場所に置きましょう。</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/ja/1.9/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</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>mysite<span class=\"o\">/</span>\n    manage<span class=\"o\">.</span>py\n    mysite<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n        settings<span class=\"o\">.</span>py\n        urls<span class=\"o\">.</span>py\n        wsgi<span class=\"o\">.</span>py\n</code></pre></div>\n<p>ファイルはそれぞれ以下のような役割を持っています:</p>\n<ul class=\"simple\">\n<li><p>外側の  <code class=\"file docutils literal notranslate\">mysite/</code> ルートディレクトリは、このプロジェクトのただの入れ物です。 この名前は Django に関係しませんので、好きな名前に変更できます。</p></li>\n<li><p><code class=\"file docutils literal notranslate\">manage.py</code>: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです｡詳しくは <a class=\"reference internal\" href=\"/ja/1.9/ref/django-admin/\"><span class=\"doc\">django-admin and manage.py</span></a> 内の <code class=\"file docutils literal notranslate\">manage.py</code> を参照してください｡</p></li>\n<li><p>内側の <code class=\"file docutils literal notranslate\">mysite/</code> ディレクトリは、このプロジェクトの本当の Python パッケージです。この名前が Python パッケージの名前であり、 import の際に 使用する名前です (例えば import <code class=\"docutils literal notranslate\">mysite.urls</code>) 。</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/__init__.py</code>: An empty file that tells Python that this\ndirectory should be considered a Python package. If you're a Python beginner,\nread <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> in the official Python docs.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/settings.py</code>: Django プロジェクトの設定ファイルです。 設定の仕組みは <a class=\"reference internal\" href=\"/ja/1.9/topics/settings/\"><span class=\"doc\">Django settings</span></a> を参照してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/urls.py</code>: Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。詳しくは <a class=\"reference internal\" href=\"/ja/1.9/topics/http/urls/\"><span class=\"doc\">URL dispatcher</span></a> を参照 してください。</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/wsgi.py</code>: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。詳細は <a class=\"reference internal\" href=\"/ja/1.9/howto/deployment/wsgi/\"><span class=\"doc\">How to deploy with 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\">mysite</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=\"gp\">$ </span>python manage.py runserver\n</code></pre></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 1.9, 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>これで、 Django 開発サーバを起動しました。 Django 開発サーバは Python だけで書かれた軽量な Web サーバです。このサーバは、開発を迅速に行い、運用に適した状態になるまで Apache のような運用サーバの設定をいじらなくても良いようにするためのものです。</p>\n<p>ここでちょっと注意しておきましょう。このサーバは開発中の利用だけを考えて作られています。絶対に運用環境では <strong>使わないでください</strong> (筆者たちの専門は Web フレームワークであって、Web サーバではありません)。</p>\n<p>さあ、これでサーバが起動したので、ブラウザで <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> にアクセスしてみてください。 “Welcome to Django” と表示された、明るいパステル調のライトブルーのページが出るはずです。やりましたね！</p>\n<aside class=\"admonition-changing-the-port admonition\" role=\"note\">\n<p class=\"admonition-title\">ポート番号の変更</p>\n<p>デフォルトでは <a class=\"reference internal\" href=\"/ja/1.9/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a> コマンドは内部 IP のポート 8000 で起動します。</p>\n<p>サーバーのポートを変えたい場合は、以下のようにコマンドライン引数を渡してください。このコマンドによってポート 8080 で起動させれます:</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=\"gp\">$ </span>python manage.py runserver <span class=\"m\">8080</span>\n</code></pre></div>\n<p>サーバの IP を指定するときには、ポート番号も一緒に指定します。従って、 全ての IP からのリクエストを受け付ける (サーバを他のコンピュータから可視にする) には、以下のようにします:</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=\"gp\">$ </span>python manage.py runserver <span class=\"m\">0</span>.0.0.0:8000\n</code></pre></div>\n<p>開発サーバーの詳細な説明は <a class=\"reference internal\" href=\"/ja/1.9/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a> のリファレンスを参照して下さい。</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\" role=\"note\">\n<p class=\"admonition-title\"><a class=\"reference internal\" href=\"/ja/1.9/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</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\" role=\"note\">\n<p class=\"admonition-title\">プロジェクトとアプリケーション</p>\n<p>プロジェクトとアプリケーションの違いとは何でしょうか？アプリケーションとは、実際に何らかの処理を行う Web アプリケーションを指します。例えばブログシステムや公開レコードのデータベース、単純な投票アプリといった具合です。プロジェクトとは、あるウェブサイト向けに設定とアプリケーションを集めたものです。一つのプロジェクトには複数のアプリケーションを入れられ ます。また、一つのアプリケーションは複数のプロジェクトで使えます。</p>\n</aside>\n<p>Your apps can live anywhere on your <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">Python path</span></a>. In\nthis tutorial, we'll create our poll app right next to your <code class=\"file docutils literal notranslate\">manage.py</code>\nfile so that it can be imported as its own top-level module, rather than a\nsubmodule of <code class=\"docutils literal notranslate\">mysite</code>.</p>\n<p>アプリケーションを作るには、 <code class=\"file docutils literal notranslate\">manage.py</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=\"gp\">$ </span>python manage.py startapp polls\n</code></pre></div>\n<p>このコマンドは <code class=\"file docutils literal notranslate\">polls</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>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\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\">polls/views.py</code> を開いて、以下の Python コードを書いてください:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/views.py</code></figcaption><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=\"polls/views.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<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\">urls.py</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>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    urls<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">polls/urls.py</code> ファイルには以下のコードを書いてください:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/urls.py</code></figcaption><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=\"polls/urls.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> url\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> name<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に``polls.urls`` モジュールの記述を反映させることです。<code class=\"docutils literal notranslate\">mysite/urls.py``に ``django.conf.urls.include</code> のimportを追加して、 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>urlpatterns``のリストに <a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> を挿入します。するとこのようになります:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>mysite/urls.py</code></figcaption><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=\"mysite/urls.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> url\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^polls/&#39;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^admin/&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>The <a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> function allows referencing other\nURLconfs. Note that the regular expressions for the\n<a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> function doesn't have a <code class=\"docutils literal notranslate\">$</code> (end-of-string\nmatch character) but rather a trailing slash. Whenever Django encounters\n<a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>, it chops off whatever part of the URL\nmatched up to that point and sends the remaining string to the included URLconf\nfor further processing.</p>\n<p><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> の背景にある考えは、 URL のプラグ &amp; プレイを簡単に作ることです。 polls には独自の URLconf (<code class=\"docutils literal notranslate\">polls/urls.py</code>) を持っているので、 &quot;/polls/&quot; 、 &quot;/fun_polls/&quot; や、 &quot;/content/polls/&quot; といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。</p>\n<aside class=\"admonition-when-to-use-func-django-conf-urls-include admonition\" role=\"note\">\n<p class=\"admonition-title\"><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> を使うとき</p>\n<p>URLパターンをインクルードするときはいつでも <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>include()``を使うべきです。<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>admin.site.urls``はこれについての唯一の例外です。</p>\n</aside>\n<aside class=\"admonition-doesn-t-match-what-you-see admonition\" role=\"note\">\n<p class=\"admonition-title\">自分のレイアウトと違う場合</p>\n<p>もし <code class=\"docutils literal notranslate\">admin.site.urls</code> ではなく <code class=\"docutils literal notranslate\">include(admin.site.urls)</code> を閲覧している場合、古いチュートリアルを参照するか、新しいバージョンの Django を入手してください。</p>\n</aside>\n<p>これで&quot;index&quot;ビューをURLconfに接続を接続しました。下記のコマンドを実行して、動作を確認しましょう:</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=\"gp\">$ </span>python manage.py runserver\n</code></pre></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; と表示されるのが確認できるでしょう。これはビューの``index``で定義したものです。</p>\n<p><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a> 関数は4つの引数を受け取り、そのうち2つが必須です。 <code class=\"docutils literal notranslate\">regex</code> と <code class=\"docutils literal notranslate\">view</code> 、オプションで <code class=\"docutils literal notranslate\">kwargs</code> と <code class=\"docutils literal notranslate\">name</code> です。ここで引数が何のためにあるものかを見ておきましょう。</p>\n<section id=\"url-argument-regex\">\n<h3><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a> 引数: regex<a class=\"heading-anchor\" href=\"#url-argument-regex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>&quot;regex&quot; という単語は省略形で、一般的に &quot;regular expression&quot; という意味があります。これは文字列にマッチするパターンの構文で、この場合はURLパターンにあたります。 Django ははじめの正規表現から開始し、リストを順に下に見ていきます。リクエストされたURLと各正規表現を、マッチするものが見つかるまで比較します。</p>\n<p>これらの正規表現はGETやPOSTパラメーター、そしてドメイン名をサーチ検索しないことに注意します。例えば、 <code class=\"docutils literal notranslate\">https://www.example.com/myapp/</code> へのリクエストにおいては、URLconfは``myapp/<code class=\"docutils literal notranslate\">を見ます。``https://www.example.com/myapp/?page=3</code> へのリクエストにおいても、URLconfは``myapp/<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>を見ます。</p>\n<p>正規表現についてわからないことがあれば <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Regular_expression\">Wikipediaのエントリー</a> と <a class=\"reference external\" href=\"https://docs.python.org/3/library/re.html#module-re\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">re</code></a> モジュールのドキュメントを参照してください。オライリーから出版されている Jeffery Friendl の &quot;Mastering Reglar Expressions&quot; も参考になります。しかし実際問題としては、正規表現のエキスパートになる必要はありません。単純なパターンをキャプチャする方法を知っていれば十分です。それに複雑な正規表現はルックアップのパフォーマンスが悪いので、正規表現のフルパワーに依存するのはよくありません。</p>\n<p>パフォーマンスノート: 正規表現は URLconf モジュールが読み込まれた最初にコンパイルされるので、高速に動作します (先ほど述べたように複雑すぎない場合)。</p>\n</section>\n<section id=\"url-argument-view\">\n<h3><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a> 引数: view<a class=\"heading-anchor\" href=\"#url-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/1.9/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> オブジェクトを第一引数に、その他、正規表現から「キャプチャされた」値を他の引数に関数を呼び出します。正規表現が単純にキャプチャをしている場合は位置引数として、名前付きでキャプチャしている場合はキーワード引数として呼び出します。少し例を提示します。</p>\n</section>\n<section id=\"url-argument-kwargs\">\n<h3><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a> 引数: kwargs<a class=\"heading-anchor\" href=\"#url-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=\"url-argument-name\">\n<h3><a class=\"reference internal\" href=\"/ja/1.9/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a> 引数: name<a class=\"heading-anchor\" href=\"#url-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Naming your URL lets you refer to it unambiguously from elsewhere in Django,\nespecially from within templates. This powerful feature allows you to make\nglobal changes to the URL patterns of your project while only touching a single\nfile.</p>\n<p>基本的なリクエストとレスポンスのフローがお好みの場合は、データベースを使った作業を始めるために <a class=\"reference internal\" href=\"/ja/1.9/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":"url() 引数: regex","anchor":"url-argument-regex","children":[]},{"title":"url() 引数: view","anchor":"url-argument-view","children":[]},{"title":"url() 引数: kwargs","anchor":"url-argument-kwargs","children":[]},{"title":"url() 引数: name","anchor":"url-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"さぁ始めましょう。","url":"/ja/1.9/intro/"}],"prev":{"docname":"intro/install","title":"クイックインストールガイド","url":"/ja/1.9/intro/install/"},"next":{"docname":"intro/tutorial02","title":"はじめての Django アプリ作成、その2","url":"/ja/1.9/intro/tutorial02/"},"formats":{"html":"/ja/1.9/intro/tutorial01/","markdown":"/ja/1.9/intro/tutorial01.md","json":"/ja/1.9/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/ja/1.9/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","fr","ja","id","pt-br","es"]}