okpy

Pythonエンジニア兼テックリーダーが、多くのプロジェクトとチーム運営から得た実践的な知識を共有するブログです。

PythonでWebサイト作りたい?Djangoがあれば、もう迷わない!

PythonでWebサイト作りたい?Djangoがあれば、もう迷わない!

📝 TL;DR (3行要約)

  • Djangoは、Webアプリ開発に必要な機能が全部詰まったPythonフレームワークです。
  • ブログやECサイトなど、本格的で複雑なWebアプリケーションを素早く作る時に使います。
  • 「バッテリー同梱」が合言葉で、開発速度とセキュリティの高さが大きな利点です。

1. 🤔 一体Djangoとは何?(核心的な役割と主な使用例)

Pythonを学び始めて、「何か面白いものを作ってみたい!」と思ったとき、多くの人が思い浮かべるのが「自分だけのWebサイトやWebアプリケーション」ではないでしょうか。そんな壮大な夢を、驚くほど現実的なものにしてくれるのが、今回ご紹介するDjango(ジャンゴ)です。

  • 核心的な役割

Djangoが一体何者なのかを一言で表すなら、それは「Webアプリケーションを作るための超豪華な建築キット」です。

家を建てる時を想像してみてください。ゼロから木を切り、釘を一本一本打って建てるのは途方もない作業ですよね。でも、もし「基礎」「柱」「壁」「屋根」といった主要なパーツがすべてセットになった建築キットがあったらどうでしょう?あなたは、壁紙を選んだり、素敵な家具を配置したりといった、本当にクリエイティブで楽しい部分に集中できるはずです。

Djangoは、まさにこの建築キットの役割を果たします。Webアプリケーション開発には、ユーザー登録やログイン機能(電気や水道の配線)、データベースとの連携(家の基礎工事)、URLの管理(家の住所と部屋の配置図)、セキュリティ対策(頑丈な鍵と防犯システム)など、どんなサイトにも共通して必要となる面倒で複雑な作業がたくさんあります。

Djangoは、これらの「当たり前に必要だけど、作るのが大変な機能」を、あらかじめ高品質な部品として用意してくれています。開発者は、これらの部品を適切に組み合わせ、自分だけの独自の機能(ビジネスロジック)やデザインを追加することに専念できるのです。この「必要なものは最初から全部入っているよ」という思想は、Djangoの世界では"Batteries Included" (バッテリー同梱)というキャッチフレーズで呼ばれており、Djangoの最大の特徴を表しています。

  • 主な使用例

この強力な「建築キット」を使えば、どんなものが作れるのでしょうか?Djangoが真価を発揮する代表的な例をいくつか見てみましょう。

  1. SNSやブログプラットフォーム: InstagramPinterestが初期の頃にDjangoを使っていたのは有名な話です。ユーザーがアカウントを作成し、ログインし、写真やテキストを投稿し、他のユーザーと交流する…といった複雑な機能を持つWebサービスは、Djangoの得意分野です。ユーザー管理、コンテンツ投稿、コメント機能など、必要な部品が揃っているため、アイデアを素早く形にすることができます。

  2. Eコマースサイト (ECサイト): 商品を登録・管理するシステム、ユーザーが商品をカートに入れて購入する決済システム、注文履歴の管理など、ECサイトには多くの機能が必要です。Djangoの堅牢なデータベース管理機能(ORMと呼ばれます)や拡張性の高さは、このようなデータ量の多い複雑な商用サイトの構築に非常に適しています。

  3. コンテンツ管理システム (CMS): 企業の公式ウェブサイトやニュースサイトなど、多くのページや記事を効率的に管理する必要があるサイトも、Djangoで構築できます。Djangoには標準で高機能な管理画面が付属しており、プログラマーでなくてもコンテンツの追加や編集が簡単に行えるため、運用もスムーズです。

このように、Djangoは個人の小さなブログから、世界中の何百万人ものユーザーが利用する大規模なWebサービスまで、あらゆる規模のWebアプリケーション開発を支える、非常に強力で信頼性の高いフレームワークなのです。


2. 💻 インストール方法

Djangoを使い始めるのはとても簡単です。Pythonのパッケージ管理ツールであるpipを使って、ターミナル(WindowsならコマンドプロンプトPowerShell)で以下のコマンドを一行実行するだけです。

pip install Django

これだけで、あなたの開発環境にDjangoという強力な建築キットがインストールされます。とても簡単ですよね!


3. 🛠️ 実際に動作するサンプルコード

理論はこれくらいにして、早速Djangoを動かしてみましょう。ここでは、Webブラウザに「Hello, Django!」と表示するだけの、世界で一番シンプルなWebページを作成する手順をご紹介します。コピー&ペーストで動かせますので、ぜひ一緒に手を動かしてみてください。

手順1: Djangoプロジェクトを作成する

まず、作業用のディレクトリに移動して、ターミナルで以下のコマンドを実行します。

django-admin startproject mysite

このコマンドを実行すると、mysiteという名前のフォルダが新しく作られます。これがDjangoプロジェクトの骨組みです。フォルダの中は、以下のような構成になっているはずです。

mysite/
├── manage.py
└── mysite/
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

手順2: ビューを作成する

次に、ユーザーからのリクエストを処理する「ビュー」というプログラムを作成します。 mysite/mysite/フォルダの中に、views.pyという名前のファイルを新しく作成し、以下のコードを記述してください。

# mysite/mysite/views.py

from django.http import HttpResponse

def home(request):
    return HttpResponse("<h1>Hello, Django!</h1>")

手順3: URLを設定する

次に、どのURLにアクセスが来たら、先ほど作ったhomeビューを呼び出すかを設定します。 元からあるmysite/mysite/urls.pyファイルを開き、以下のように編集してください。

# mysite/mysite/urls.py

from django.contrib import admin
from django.urls import path
from . import views  # この行を追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),  # この行を追加
]

手順4: 開発サーバーを起動する

準備は整いました!ターミナルに戻り、一番外側のmysiteフォルダ(manage.pyがある階層)にいることを確認して、以下のコマンドを実行してください。

python manage.py runserver

ターミナルに以下のようなメッセージが表示されれば成功です。

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
September 20, 2023 - 15:00:00
Django version 4.2.5, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK (Windows) or CONTROL-C (Mac).

手順5: ブラウザで確認する

最後に、Webブラウザを開き、アドレスバーに http://127.0.0.1:8000/ と入力してアクセスしてみてください。

「Hello, Django!」

と表示されましたか?おめでとうございます!これが、あなたの最初のDjangoアプリケーションです!


4. 🔍 コードの詳細説明

先ほどのサンプルコード、一見すると複数のファイルがあって複雑に感じるかもしれませんが、それぞれの役割はとても明確です。一つずつ見ていきましょう。

  • django-admin startproject mysite コマンド これは、Djangoプロジェクトの「設計図」に基づいて、必要なファイルやフォルダ一式を自動で生成してくれる魔法のコマンドです。mysiteという名前のプロジェクトの骨組みを作りました。この時、manage.pyという非常に重要なファイルも生成されます。これは、プロジェクトを管理するための万能ツールで、今回使ったサーバーの起動(runserver)など、様々な操作をこのファイル経由で行います。

  • mysite/mysite/views.py ファイル(私たちが作成したファイル) このファイルは、Webアプリケーションの「心臓部」や「頭脳」にあたる部分です。ユーザーがWebサイトにアクセスする(リクエストを送る)と、このファイルに書かれた関数(ビュー関数)が呼び出されます。

    • from django.http import HttpResponse: HttpResponseという、Webページの内容を返すための道具をDjangoからインポートしています。
    • def home(request):: homeという名前のビュー関数を定義しています。引数のrequestには、ユーザーのアクセスに関する情報(どのブラウザから来たか、など)が詰まっています。
    • return HttpResponse(...): この関数が最終的に行う仕事です。HttpResponseを使って、HTMLタグを含む文字列「<h1>Hello, Django!</h1>」をユーザーのブラウザに返しています。これが、ブラウザに表示される内容そのものです。
  • mysite/mysite/urls.py ファイル(私たちが編集したファイル) このファイルは、Webサイトの「交通整理員」や「受付係」の役割を担います。ユーザーがアクセスしてきたURLを見て、「このURLなら、あのビュー関数を呼び出してください」と指示を出す場所です。

    • from . import views: 同じフォルダにあるviews.pyファイルをインポートして、先ほど作ったhome関数を使えるようにしています。
    • urlpatterns = [...]: URLのルールをリスト形式で定義していく場所です。
    • path('', views.home, name='home'): これが今回追加したルールです。「''」(空文字)、つまりサイトのトップページ(http://127.0.0.1:8000/)へのアクセスが来たら、viewsファイルの中のhome関数を呼び出してください」という意味になります。
  • python manage.py runserver コマンド これは、開発目的で使うための簡易的なWebサーバーを起動するコマンドです。このコマンドのおかげで、ApacheやNginxといった本格的なWebサーバーを別途用意しなくても、自分のPC上で作ったサイトの動作をすぐに確認できます。開発中は、このコマンドを常に実行したままにしておくことになります。

このように、Djangoでは「URLの定義(urls.py)」→「処理の実行(views.py)」→「結果の返却」という明確な流れに沿って開発を進めていきます。この役割分担こそが、大規模なアプリケーションでもコードを整理しやすく、メンテナンス性を高く保つ秘訣なのです。


5. ⚠️ 注意点またはヒント

Djangoを学び始めた初心者が最もつまずきやすく、そしてこれを理解すると一気に視界が広がる重要なコンセプトがあります。それは「プロジェクト」と「アプリ」の違いです。

  • 陥りやすい罠: 「プロジェクト」と「アプリ」の混同

先ほど私たちはstartprojectコマンドで「プロジェクト」を作成しました。しかし、実際の開発では、このプロジェクトの中にstartappコマンドで「アプリ」という単位を複数作っていくのが一般的です。

この関係を家の建築に例えるなら、以下のようになります。

  • プロジェクト (Project): 「家全体」の設計図です。

    • サイト全体に関わる設定(settings.py)や、URLの全体的な振り分け(メインのurls.py)などを管理する、いわば土台となるコンテナです。一つのWebサイトに、プロジェクトは一つだけです。
  • アプリ (App): 「キッチン」「寝室」「リビング」といった、特定の機能を持つ「部屋」です。

    • 例えば、「ブログ機能」「ユーザー認証機能」「問い合わせフォーム機能」といった、それぞれが独立した機能のまとまりを「アプリ」として作成します。
    • アプリは再利用可能な部品として設計されており、理論上は他のプロジェクトにそのまま持っていくことも可能です。

初心者のうちは、何でもかんでもプロジェクト直下にコードを書いてしまいがちですが、これは家の中に仕切りがなく、キッチンと寝室がごちゃ混ぜになっているような状態です。

【ヒント】 開発を始める際は、まずstartprojectで家全体を作り、次にpython manage.py startapp postsのように、実現したい機能(例えばブログの投稿機能)ごとに「アプリ」を作成し、そのアプリの中にビューやモデル(データベース設計図)を記述していく、という流れを意識してください。この「プロジェクトとアプリ」という構造を理解することが、Djangoを使いこなすための最初の、そして最も重要なステップです。


6. 🔗 一緒に見ておくと良いライブラリ

DjangoでWebページの作り方に慣れてきたら、次の一歩としてぜひ学んでほしいのが Django REST Framework (DRF) です。

  • Django REST Framework (DRF) これは、DjangoWeb APIを構築するための、非常に強力で人気のあるライブラリです。Web APIとは、人間が見るためのHTMLページを返すのではなく、プログラムが利用するためのデータ(主にJSON形式)を返す仕組みのことです。

    なぜこれが重要かというと、現代のWebサービスはWebサイトだけで完結することは稀だからです。同じデータをスマートフォンアプリで表示したり、他のWebサービスと連携したりする際に、このWeb APIが中心的な役割を果たします。

    DRFを使えば、Djangoで培ったモデルやビューの知識をそのまま活かしながら、安全で高機能なWeb APIを驚くほど効率的に作成できます。DjangoでWebサイトの裏側(バックエンド)を作れるようになったあなたが、次に行うべきは「データを外部に提供する窓口」を作ること。DRFは、そのための最高のパートナーとなるでしょう。


7. 🎉 まとめ

今回は、Pythonの強力なWebフレームワークであるDjangoについて、その基本的な考え方から実際に動かすところまでを体験しました。

  • Djangoは「バッテリー同梱」の思想に基づいた、全部入りのWebフレームワークです。
  • 「プロジェクト」と「アプリ」という構造で、大規模な開発でも整理された状態を保てます。
  • URL → ビュー → レスポンスという明確な処理の流れを理解することが、最初のステップです。

Djangoは学習すべきことが多いフレームワークですが、その分、一度使い方をマスターすれば、あなたのアイデアを驚くほどのスピードと品質で形にできる強力な武器になります。

最後に、今日学んだことを定着させるための「挑戦課題」です。ぜひトライしてみてください!

【挑戦課題】 今日作った「Hello, Django!」プロジェクトに、あなたの自己紹介ページを追加してみましょう!

  1. mysite/mysite/views.py に、profile という名前の新しいビュー関数を追加します。この関数は、あなたの名前や趣味などを書いた簡単な自己紹介文をHttpResponseで返すようにしてください。
  2. mysite/mysite/urls.py を編集し、/profile/ というURLへのアクセスが来たら、先ほど作った profile ビュー関数が呼び出されるように、urlpatternsに新しいルールを追加します。
  3. 開発サーバーを起動したまま(または再起動して)、ブラウザで http://127.0.0.1:8000/profile/ にアクセスし、自分の自己紹介ページが表示されるか確認してみましょう!

この課題がクリアできれば、あなたはもうDjango開発者としての一歩を力強く踏み出しています。Happy Djangonaut!