カテゴリ: Django 更新日: 2026/02/13

DjangoのClass-based View(CBV)の仕組みと強みを初心者向けにやさしく解説

Django Class-based View(CBV)の仕組みと強み
Django Class-based View(CBV)の仕組みと強み

先生と生徒の会話形式で理解しよう

生徒

「Djangoで画面を作るときに、クラスを使う書き方があるって聞いたんですが、正直よくわかりません…」

先生

「Djangoにはビューを作る方法が二つあって、そのうちの一つがClass-based View、略してCBVです。仕組みがわかると、とても便利に使えますよ。」

生徒

「クラスって難しそうですが、パソコン初心者でも理解できますか?」

先生

「大丈夫です。たとえ話を使いながら、基本からゆっくり説明していきましょう。」

1. Djangoのビューとは何をする場所なのか

1. Djangoのビューとは何をする場所なのか
1. Djangoのビューとは何をする場所なのか

Djangoのビューとは、ブラウザから送られてくるリクエスト、つまり「このページを表示してほしい」「このボタンを押した結果を処理してほしい」といったお願いを受け取り、それに対してどんな画面(HTML)や結果を返すかを決める、とても重要な場所です。

現実の世界でたとえると、ビューはレストランの店員のような存在です。お客さん(ブラウザ)から注文を受け取り、「どの料理を出すか」「すぐ出せるか」を判断して、結果をお客さんに届けます。Djangoでは、この判断と受け渡しの役割をPythonのコードで書いていきます。

ビューの書き方には大きく分けて2種類あります。ひとつは関数を使う方法、もうひとつがクラスを使う方法です。どちらも役割は同じですが、クラスを使うと処理を整理しやすくなります。この記事では、後者の「Class-based View(CBV)」を理解するための第一歩として、まずビューそのものの役割をしっかり押さえていきます。

ここで、プログラミング未経験の方でもイメージしやすい、とても簡単なビューの例を見てみましょう。


from django.http import HttpResponse

def simple_view(request):
    return HttpResponse("はじめてのDjangoビューです")

このサンプルでは、ブラウザからアクセスがあると、「はじめてのDjangoビューです」という文字を画面に返しています。
難しい処理は何もしていませんが、「リクエストを受け取って、レスポンスを返す」というビューの基本的な役割は、しっかり果たしています。

2. Class-based View(CBV)とは何か

2. Class-based View(CBV)とは何か
2. Class-based View(CBV)とは何か

Class-based Viewとは、Pythonのクラスという仕組みを使ってビューを書く方法です。クラスとは、共通の動作をまとめた設計図のようなものです。たとえば「画面を表示する」「データを受け取る」といった動きを、あらかじめ用意された形で使えます。

CBVは最初は少し難しく感じますが、慣れると同じ処理を何度も書かなくてよくなり、コードが整理されて読みやすくなります。

3. CBVの基本的な仕組み

3. CBVの基本的な仕組み
3. CBVの基本的な仕組み

CBVでは、ビューをクラスとして定義します。その中で、HTTPメソッドと呼ばれる「GET」や「POST」に対応した処理を書きます。GETはページを表示するとき、POSTはフォームなどでデータを送るときに使われます。


from django.views import View
from django.http import HttpResponse

class HelloView(View):
    def get(self, request):
        return HttpResponse("こんにちは、DjangoのCBVです")

この例では、HelloViewというクラスを作り、getという関数で画面に文字を表示しています。クラスの中に処理を書く、という点がCBVの基本です。

4. URLとCBVのつながり方

4. URLとCBVのつながり方
4. URLとCBVのつながり方

CBVを使うときは、URL設定で少し特別な書き方をします。クラスそのものではなく、as_viewという仕組みを通して使います。これは「このクラスをビューとして使います」という合図です。


from django.urls import path
from .views import HelloView

urlpatterns = [
    path("hello/", HelloView.as_view()),
]

URLとクラスが結びつくことで、ブラウザからアクセスしたときに、クラスの中の処理が実行されます。

5. Djangoが用意している便利なCBV

5. Djangoが用意している便利なCBV
5. Djangoが用意している便利なCBV

Djangoには、よく使う処理が最初から用意されたCBVがあります。たとえば、画面を表示するだけのTemplateViewがあります。これを使うと、ほとんどコードを書かずにページを作れます。


from django.views.generic import TemplateView

class SampleView(TemplateView):
    template_name = "sample.html"

テンプレート名を指定するだけで、HTMLを表示できるのは、CBVの大きな強みです。

6. CBVの強み① 同じ処理を何度も書かなくてよい

6. CBVの強み① 同じ処理を何度も書かなくてよい
6. CBVの強み① 同じ処理を何度も書かなくてよい

CBVの一番の強みは、共通処理をまとめられる点です。たとえば、ログインしているかどうかの確認や、データの取得処理などを、一つのクラスにまとめて使い回せます。

これは、毎回同じ説明をしなくてよいマニュアルのようなもので、作業のミスも減らせます。

7. CBVの強み② 処理の流れが整理しやすい

7. CBVの強み② 処理の流れが整理しやすい
7. CBVの強み② 処理の流れが整理しやすい

CBVでは、役割ごとに関数が分かれているため、どこで何をしているのかが見やすくなります。特に、画面表示とデータ処理が混ざりにくくなる点は、初心者にも安心です。


class SimpleView(View):
    def get(self, request):
        return HttpResponse("表示専用の画面です")

    def post(self, request):
        return HttpResponse("データを受け取りました")

このように、動作ごとに分けて考えられるのがCBVの特徴です。

8. Function-based Viewとの違いをやさしく理解

8. Function-based Viewとの違いをやさしく理解
8. Function-based Viewとの違いをやさしく理解

Function-based Viewは、一つの関数にすべての処理を書く方法です。小さな処理には向いていますが、機能が増えると複雑になります。CBVは、最初は理解に時間がかかりますが、後から管理しやすくなる設計です。

パソコン初心者の方は、「たくさんの作業を整理整頓するための箱」だと考えると、CBVのイメージがつかみやすくなります。

カテゴリの一覧へ
新着記事
New1
Flask
Flask-RESTfulの基本!API開発をシンプルにする拡張機能の導入方法
New2
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New3
Flask
FlaskのAPI開発でテストを始めよう!初心者でもわかるpytestを使った基本テスト例
New4
Flask
Flaskのエラーページをカスタマイズする方法!404・500ページの作り方まとめ
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonのコメント活用術!初心者向けにTODO・FIXME・ドキュメンテーションコメントの書き方を完全解説
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonのbytes型とbytearray型とは?初心者向けにバイナリデータの扱い方を解説!
No.7
Java&Spring記事人気No7
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説
No.8
Java&Spring記事人気No8
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説