【超初心者】PythonのフレームワークFlask・Djangoを比較しながらシンプルなToDoアプリを作ってみた

【超初心者】PythonのフレームワークFlask・Djangoを比較しながらシンプルなToDoアプリを作ってみた

2026.04.28

はじめに

こんにちは。26新卒の藤瀨です。
今回は、Pythonの主要なWebフレームワークであるFlask・Djangoを比較しながら非常にシンプルなToDoアプリを作ってみました(実用性の全くないアプリであることは先にお断りしておきます!)。

前提として、私は文系出身でIT未経験です。
現在、外部研修にてITの基礎知識を学習中なのですが、講座で主要言語のフレームワークが紹介され、「開発環境に応じて適切に使い分けることが重要です」とさらりと言われて「???」となりました。

そこで、ちょうどPythonの基礎学習が終わったタイミングでもあるので、復習も兼ねてFlaskとDjangoを実際に触ってみることにしました。

まずはそれぞれのフレームワークの概要とインストール手順を簡単に説明した後、実際にToDoアプリを実装した流れを紹介していきます。
フレームワークの知識がなくても本文中の手順に従えば簡単に作ることができるので、私と同じ初心者の方はぜひ実際に手を動かしてみてください!

結論を述べますと、今回のようなシンプルなアプリを素早く作るという目的においては、Flaskの方が取り組みやすいと感じました。
Pythonでとりあえず何か動くものを作ってみたい!という方は、Flaskの手順だけを参照するのもおすすめです。

Flask・Djangoとは

フレームワークは軽量型フルスタック型の大きく2つに分けられ、Flaskは前者、Djangoは後者に該当します。

軽量型とフルスタック型の特徴を比較したのが以下の表です。

■軽量型 vs フルスタック型

項目 軽量型 フルスタック型
自由度 ⭐⭐⭐ 高い ⭐ 低め
学習コスト ⭐ 低い ⭐⭐⭐ 高い
標準搭載機能 最小限(必要なものを自分で追加) 豊富(DB・認証・テストなど一式)
向いている規模 小〜中規模 中〜大規模
開発の自由度 高い(自分で設計できる) 低め(規約に従う必要がある)
動作速度 速い やや重くなりやすい
代表的な例 Flask / Express / Sinatra Django / Rails / Laravel

シンプルなAPIやWebアプリを作りたい場合や自由に設計したい場合は手軽に利用できる軽量型が、大規模なWebアプリを作りたい場合や開発スピードを重視してチームで統一したルールで開発したい場合はフルスタック型が適しています。

インストールと実装の準備

アプリを実装するため、作業環境の準備と今回使用するFlask・Djangoをインストールする必要があります。
既にインストール済みの方や、手順をご存じの方はこのセクションは飛ばして大丈夫です。

また、今回私はWindowsOS環境で実装を行っています。

Pythonはインストールされている前提で進めますので、まだの方はこちらからインストールしてください(⚠️インストーラー起動後、画面の一番下に表示される「Add Python 3.xx to PATH」 にチェックを入れるのを忘れないようにしましょう)。

STEP1 作業フォルダを作る
今回のアプリ実装用のフォルダを作ります。
コマンドプロンプトで以下を入力し(フォルダ名は自由に変えてもOKです)、作業フォルダを作ってそのフォルダに移動します。

mkdir C:\python_practice
cd C:\python_practice

STEP2 仮想環境を作成する
仮想環境とは、プロジェクトごとに専用のライブラリ置き場を用意する仕組みです。これを使うことで、他のプロジェクトと干渉せずに必要なライブラリだけをインストールできます。

python -m venv venv

実行するとvenvというフォルダが作られるので、次にこの仮想環境を有効化します。

venv\Scripts\activate

成功すると、コマンドプロンプトの先頭に(venv)が表示されます。

(venv) C:\python_practice>

⚠️ コマンドプロンプトを開き直したときは毎回この有効化コマンドを実行してください。

STEP3 Flask をインストールする
仮想環境が有効化された状態(先頭に(venv)が表示されている状態)で実行します。

pip install flask

インストールが完了したら、以下で確認します。

python -c "import flask; print(flask.__version__)"

バージョン番号が表示されれば成功です。

STEP4 Djangoをインストールする
続けてDjangoもインストールします。

pip install django

インストールが完了したら、以下で確認します。

python -c "import django; print(django.__version__)"

バージョン番号が表示されれば成功です。

以上で準備は完了です!
以下のコマンドでFlaskとDjangoが両方インストールされているか一覧で確認することもできます。

pip list

【参考】

ToDoアプリの実装

では、いよいよ実際にアプリを作っていきます。
まずは実装するアプリの概要を示します。

作るものの仕様(Flask・Django 共通)

機能

  • テキストボックスにタスクを入力して「追加」ボタンを押すと、リストに追加される
  • 追加されたタスクが一覧で表示される

制約(シンプルに保つため)

  • データはサーバーのメモリ上に保持する(リストで管理)
  • ページをリロードするとデータはリセットされる(DBは使わない)
  • 削除・編集機能は今回は作らない

画面イメージ
スクリーンショット 2026-04-27 111928

使うPythonの知識

  • リスト(タスクを格納する)
  • 関数の定義(def)
  • if文(GETリクエストとPOSTリクエストの振り分け)
  • forループ(タスク一覧の表示)

実装の流れ-Flask編-

STEP1 appファイルの作成
エディタでapp.pyファイルを作成し、作業ディレクトリに保存します。
app.pyファイルの内容は以下の通りです。

# Flask:アプリ本体を作るクラス
# render_template:HTMLファイルを表示する関数
# request:フォームから送られてきたデータを受け取るオブジェクト
# redirect:別のURLに転送する関数
# これらをインポート
from flask import Flask, render_template, request, redirect
#アプリの作成
app = Flask(__name__)
#タスクを保存する空のリストを作成
tasks = []
# URLにアクセスしたとき、GET(ページを開く)POST(フォームを送信する)を受け付けることを指定。
# リクエストを判定し、それぞれの処理を定める。
# ページを普通に開いたときはGET、「追加」ボタンを押したときはPOSTとなる。
# POSTの場合、「フォームで送られてきたtaskの値を取り出してリストに追加し、トップページに戻る」という処理が行われる。
@app.route('/', methods=['GET', 'POST']) 
def index():
	if request.method == 'POST':
		task = request.form['task']
		tasks.append(task)
		return redirect('/')
	#GETの場合、「index.htmlを表示しつつ、タスクのリスト(tasks)をHTMLに渡す」という処理が行われる。
	return render_template('index.html', tasks=tasks)
#アプリを起動する処理
if __name__ == '__main__':
	app.run(debug=True)

STEP2 HTMLファイルの作成
作業ディレクトリ内にtemplatesフォルダを作成し、その中にHTMLファイルを保存します(ファイル名は任意。私はindex.htmlとしました)。

<!DOCTYPE html>
<html lang="ja">
<head>
  <!-- ページのタイトル -->
  <meta charset="UTF-8">
  <title>ToDoリスト</title>
</head>
<body>
  <!-- メインの見出し -->
  <h1>ToDoリスト</h1>
  <!-- タスク追加フォーム -->
  <form action="/" method="POST">
    <input type="text" name="task" placeholder="タスクを入力してください">
    <button type="submit">追加</button>
  </form>
  <!-- タスクの一覧表示 -->
  <ul>
    {% for task in tasks %}
      <li>{{ task }}</li>
    {% endfor %}
  </ul>
</body>
</html>

STEP3 動かしてみる
これでアプリは完成です!
あとはコマンドプロンプトで作業ディレクトリに移動し(cd 移動したいディレクトリのパス)、python app.pyを実行してみてください。

(venv) C:\python_practice\flask_todo>python app.py
 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit

結果がこのように表示されれば成功です。
URLをクリックして開くと、このようにブラウザ上でタスクの入力ができ、入力したタスクの一覧が表示されます。
スクリーンショット 2026-04-27 150951

実装の流れ-Django編-

STEP1 雛型の作成
コマンドプロンプトで以下を実行することで、作業ディレクトリ直下にconfigフォルダとmanage.pytodoフォルダが生成されます。

(venv) C:\python_practice\django_todo>django-admin startproject config .
(venv) C:\python_practice\django_todo>python manage.py startapp todo

STEP2 アプリの登録
config/settings.pyを開き、作成したtodoアプリをDjangoに認識させます。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'todo',  # 追加:作ったアプリをDjangoに認識させる
]

STEP3 処理を書く
todo/views.pyに、トップページを表示する処理を書きます。
Flaskと同様、タスクのリスト管理をGET/POSTに振り分けています。

# Djangoから必要な関数をインポート
from django.shortcuts import render, redirect
# タスクを保存するリスト(Flask と同じ)
tasks = []
# トップページの処理を書く関数(第一引数は必ずrequest)
def index(request):
    # 「追加」ボタンが押されたとき(POST)の処理
    if request.method == 'POST':
        task = request.POST['task']  # フォームのname="task"の値を取得
        tasks.append(task)           # リストに追加
        return redirect('/')         # トップページに戻る
    # ページを普通に開いたとき(GET)の処理
    # index.htmlを表示しつつ、tasksリストをHTMLに渡す
    return render(request, 'index.html', {'tasks': tasks})

STEP4 アプリのURL設定
todoフォルダ内にurls.pyを新規作成し、アプリのURLを設定します。

from django.urls import path
from . import views  # 同じフォルダのviews.pyを読み込む
# このアプリのURL設定
urlpatterns = [
    # '' = '/'(トップページ)にアクセスしたらviews.indexを呼ぶ
    path('', views.index, name='index'),
]

STEP5 config/urls.pyの編集

from django.contrib import admin
from django.urls import path, include  # includeを追加
urlpatterns = [
    path('admin/', admin.site.urls),
    # ''へのアクセスをtodoアプリのurls.pyに丸投げする
    path('', include('todo.urls')),
]

STEP6 todo/templates/index.htmlを新規作成
todoフォルダの中に新しくtemplatesフォルダを作成し、index.htmlを保存します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>ToDoリスト</title>
</head>
<body>
  <h1>ToDoリスト</h1>
  <form action="/" method="POST">
    {% csrf_token %} <!--Django必須:セキュリティのためのおまじない。これがないとエラーになる -->
    <input type="text" name="task" placeholder="タスクを入力してください">
    <button type="submit">追加</button>
  </form>
  <ul>
    <!--views.pyから渡されたtasksリストをループして表示 -->
    {% for task in tasks %}
      <li>{{ task }}</li>
    {% endfor %}
  </ul>
</body>
</html>

STEP7 動かしてみる
これで完成です。
コマンドプロンプトでpython manage.py runserverを実行してみてください。
成功すればURLが表示され、Flaskと同じようにブラウザ上でToDoアプリを開けます。

実際に2つのフレームワークを触ってみて

Pythonの学習を開始して約1週間の現時点では、圧倒的に易しいと感じたのはFlaskでした。

使用するのが処理を書き込むappファイルと画面表示を担うHTMLファイルの2つのみで、工程が少ないというのが大きな理由です。

一方のDjangoは必要なファイル数が多く、最初は覚えることが多いと感じましたが、それはDjangoがチーム開発や大規模アプリに対応するための構造を最初から備えているためでしょう。
ファイルがきちんと構造化されているおかげで一つ一つの工程がどのような意味を持っているのかがわかりやすかったです。

また、今回作ってみたToDoアプリは非常にシンプルだったのでFlaskでもコードの理解はそれほど大変ではありませんでしたが、より複雑な機能の開発では理解が難しくなるような場面があるのではないかと感じました。

ですので、例えば自分が開発に携わっていないアプリのコードを理解するような場面などではDjangoの方が優れているのではないかと思います。

以上の経験と軽量型・フルスタック型のフレームワークの特徴を踏まえ、改めてFlaskとDjangoの使い分けを以下のように整理します。

Flaskが向いている場面

  • とりあえず動くものを素早く作りたい
  • 小規模なアプリやAPIを自由に設計したい
  • まずフレームワークに慣れることを優先したい

Djangoが向いている場面

  • チームで統一したルールのもと開発したい
  • 認証・DB管理など多くの機能を最初から使いたい
  • 大規模なアプリを長期的にメンテナンスしたい

研修で「使い分けが重要」とさらりと言われて戸惑った私ですが、実際に手を動かしてみることでその意味が少し理解できた気がします。
何を作るか・誰と作るか・どのくらいの規模か」によって選ぶべきフレームワークは変わる、というのが今回得た実感です。

私は初期の学習ではコマンドや関数の習得に注力していたため、プログラミングがシステムを動かしているものであるというイメージがなかなか持てずにいました。同じように感じている方もいるのではないでしょうか。
そうした方が「とりあえず何か作ってみたい」という時には、まずはDjangoよりFlaskを選ぶと良いのではないかと思います。

一方で、今後業務などで大規模な開発やチームでの開発に携わることを想定すると、Djangoを使いこなせるようになるべきでしょう。

今後の研修でDjangoを本格的に学習する予定なので、それが終わり次第また自分で触ってみたいと考えています。
今回のToDoアプリにも機能を追加した改良版をいずれ作ってみたいですね。

では、ToDoアプリ 改良編のブログでお会いしましょう。
最後までお読みいただきありがとうございました!

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。

この記事をシェアする

関連記事