# Django 6.0.7 ドキュメント

# はじめての Django アプリ作成、その 1

さあ、例を交えながら学んでゆきましょう。

このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。

Poll アプリケーションは 2 つの部分からなります:

- ユーザが投票したり結果を表示したりできる公開用サイト

- 投票項目の追加、変更、削除を行うための管理 (admin) サイト

Django は既にインストール済み として説明を進めます。Django がインストールされているかどうか、またどのバージョンがインストールされているかを調べるには、以下のコマンドをシェルプロンプト（先頭の $ は入力待ちを示す記号です）で実行します。

/ 

    $ python -m django --version

    ...\> py -m django --version

Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ "No module named django" とエラーが表示されます。

このチュートリアルは Python 3.12 以降をサポートする Django 6.1 用に書かれています。もし Django のバージョンが一致しない場合は、このページの右下にあるバージョンスイッチャーを使って、あなたの Django のバージョンのチュートリアルを参照するか、Django を最新バージョンにアップデートしてください。古いバージョンの Python を使っている場合は、 どのバージョンの Python で Django が使えますか? をチェックして、互換性のあるバージョンの Django を見つけてください。

困ったときは:

このチュートリアルの実行に問題がある場合は、FAQ の Getting Help セクションに進んでください。

## プロジェクトを作成する

初めて Django を使うのなら、最初のセットアップを行う必要があります。通常は、 Django のプロジェクト (project) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。

From the command line, `cd` into a directory where you'd like to store your code and run the following command to bootstrap a new Django project:

/ 

    $ django-admin startproject mysite djangotutorial

    ...\> django-admin startproject mysite djangotutorial

This will create a directory `djangotutorial` with a project called `mysite` inside. The directory name doesn't matter to Django; you can rename it to anything you like. If it didn't work, see django-admin 実行時の問題.

注釈

プロジェクトの名前を付けるとき、組み込みの Python モジュールや Django のコンポーネントの名前を使わないようにしてください。とりわけ、 `django` (Django 自体と名前が衝突します) や `test` (組み込みの Python パッケージ名と名前が衝突します) を使わないようにしましょう。

`startproject` が何を作成したかをみてみましょう:

    djangotutorial/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            asgi.py
            wsgi.py

ファイルはそれぞれ以下のような役割を持っています:

- `manage.py`: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです｡詳しくは django-admin と manage.py 内の `manage.py` を参照してください｡

- `mysite/`: これは実際のプロジェクト用のPythonパッケージを含むディレクトリです。このディレクトリの名前は、内部のモジュールやパッケージをインポートするために使用するPythonパッケージ名になります（例: `mysite.urls`）。

- `mysite/__init__.py`: このディレクトリが Python パッケージであることを Python に知らせるための空のファイルです。Python の初心者は、 Python の公式ドキュメントの more about packages を読んで下さい。

- `mysite/settings.py`: Settings/configuration for this Django project. Djangoの設定 will tell you all about how settings work.

- `mysite/urls.py`: Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。詳しくは URL ディスパッチャ を参照 してください。

- `mysite/asgi.py`: プロジェクトをサーブするためのASGI互換Webサーバーとのエントリーポイントです。詳細については ASGI とともにデプロイするには を参照してください。

- `mysite/wsgi.py`: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。詳細は WSGI とともにデプロイするには を参照してください。

## 開発用サーバー

Djangoプロジェクトが正常に動作するか確認しましょう。まだであれば、`djangotutorial` ディレクトリに移動し、以下のコマンドを実行してください。

/ 

    $ python manage.py runserver

    ...\> py manage.py runserver

コマンドライン上で下記の出力が確認できるでしょう:

    Performing system checks...

    System check identified no issues (0 silenced).

    You have unapplied migrations; your app may not work properly until they are
    applied. Run 'python manage.py migrate' to apply them.

    8月 05, 2026 - 15:50:53
    Django version 6.1, using settings 'mysite.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.

    WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
    For more information on production servers see: https://docs.djangoproject.com/en/6.1/howto/deployment/

注釈

適用されていないデータベースマイグレーションについての警告はここでは無視します、後ほどすぐにデータベースとともにたっぷりと取り組みます。

さあ、これでサーバが起動したので、ブラウザで http://127.0.0.1:8000/ にアクセスしてみてください。 "Congratulations!" と表示された、ロケットが離陸しているページが出るはずです。やりましたね！

これで、 Django 開発サーバを起動しました。 Django 開発サーバは Python だけで書かれた軽量な Web サーバです。このサーバは、開発を迅速に行い、運用に適した状態になるまで Apache のような運用サーバの設定をいじらなくても良いようにするためのものです。

ここでちょっと注意しておきましょう。このサーバは開発中の利用だけを考えて作られています。絶対に運用環境では 使わないでください (筆者たちの専門は Web フレームワークであって、Web サーバではありません)。

（サイトを別のポートで提供するには、`runserver` のリファレンスを参照してください。）

`runserver` の自動リロード

開発サーバーは必要に応じてリクエストごとにPythonコードを自動的にリロードします。コード変更の効果を得るためにサーバーを再起動する必要はありません。しかしながら、ファイルの追加のようないくつかの行動は再起動をトリガーしません、このような場合はサーバーを再起動する必要があります。

## Polls アプリケーションをつくる

さあ、これで自分用の環境、すなわちプロジェクトが立ち上がり、作業にとりかかる準備ができました。

Django 内に追加する各アプリケーションは、所定の規約に従った Python パッケージで構成されます。 Django には基本的なディレクトリ構造を自動生成するユーティリティが含まれているので、ディレクトリを作ることではなくコードを書くことに集中できます。

プロジェクトとアプリケーション

プロジェクトとアプリの違いは何でしょうか？ アプリとは、ブログシステム、公的記録のデータベース、小規模な投票アプリなど、何かを行う Web アプリケーションです。プロジェクトは、特定のウェブサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに存在できます。

アプリはあなたの Python パス のどこにでも配置できます。このチュートリアルでは、`djangotutorial` フォルダー内に投票アプリを作成します。

アプリケーションを作るには、 `manage.py` と同じディレクトリに入って、このコマンドを実行します:

/ 

    $ python manage.py startapp polls

    ...\> py manage.py startapp polls

このコマンドは `polls` というディレクトリを作成します。中身はこのようになっています:

    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

このディレクトリ構造が、 poll アプリケーションの全体像です。

## はじめてのビュー作成

最初のビューを書いてみましょう。 `polls/views.py` を開いて、以下の Python コードを書いてください:

`polls/views.py`

    from django.http import HttpResponse

    def index(request):
        return HttpResponse("Hello, world. You're at the polls index.")

これはDjangoにおける最も基本的なビューです。これにブラウザからアクセスするためには、URLにマッピングする必要があります。そのためには、URL設定、略して「URLconf」を定義する必要があります。このURL設定は、各Djangoアプリ内で定義されており、`urls.py` という名前のPythonファイルです。

`polls` アプリのURLconfを定義するには、以下の内容で `polls/urls.py` というファイルを作成します。

`polls/urls.py`

    from django.urls import path

    from . import views

    urlpatterns = [
        path("", views.index, name="index"),
    ]

あなたのアプリディレクトリは、次のようになっているはずです。

    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        urls.py
        views.py

次のステップは、`mysite` プロジェクトのルートのURLconfに、`polls.urls` で定義されたURLconfを含めることです。そのためには、`mysite/urls.py` で `django.urls.include` をインポートし、`urlpatterns` リストに `include()` を追加します。つまり、次のようにします。

`mysite/urls.py`

    from django.contrib import admin
    from django.urls import include, path

    urlpatterns = [
        path("polls/", include("polls.urls")),
        path("admin/", admin.site.urls),
    ]

`path()` 関数には少なくとも2つの引数、`route` と `view` が必要です。`include()` 関数は、他のURLconfを参照するのに使います。Djangoが `include()` を見つけると、これまでに一致したURLの部分を切り捨て、残りの文字列をインクルードされたURLconfに渡して、さらに処理を続けます。

`include()` の背景にある考えは、 URL を簡単にプラグ & プレイ可能にすることです。 polls には独自の URLconf (`polls/urls.py`) を持っているので、 "/polls/" 、 "/fun_polls/" や、 "/content/polls/" といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。

When to use `include()`

他のURLパターンを含める際には、常に `include()` を使用するべきです。ただし、例外として `admin.site.urls` があります。これは、Djangoが提供するデフォルトの管理サイト用に事前に作成されたURLconfです。

これで `index` ビューを URLconf に紐付けることができました。下記のコマンドを実行して、動作を確認してください:

/ 

    $ python manage.py runserver

    ...\> py manage.py runserver

ブラウザで http://localhost:8000/polls/ にアクセスすると、 "Hello, world. You're at the polls index." と表示されるのが確認できるでしょう。これはビューの `index` で定義したものです。

ページが見つかりませんか？

ここでエラーページが表示されたら、 http://localhost:8000/ ではなく、 http://localhost:8000/polls/ にアクセスしていることを確認してください。

基本的なリクエストとレスポンスのフローに馴染んだら、データベースを使った作業を始めるために チュートリアルその2 を読みましょう。