(1時間4,000円の伴走型ビデオチャット指導も受付中!)
軽量でパワフルなWeb開発の扉を開く:Pythonフレームワーク「Flask」入門講座
![]()
【Yuki】
こんにちは、Hirokiくん。今日はPythonを使ったWeb開発の世界について、一緒に学んでいきましょう。
今回ご紹介するのは、「Flask(フラスク)」というフレームワークです。
Webアプリケーションを作るための道具箱のようなもの、と考えてもらえるといいかもしれません。
Pythonにはいくつか有名なフレームワークがありますが、Flaskはその中でも「マイクロフレームワーク」と呼ばれていて、とてもシンプルで扱いやすいのが特徴なんです。
少し難しいかもしれませんが、一つずつゆっくり進めていきましょうね。
![]()
【Hiroki】
Yukiさん、よろしくお願いします!Web開発って難しそうなイメージがありますけど、Pythonでできるんですね。
「マイクロフレームワーク」っていうのは、機能が少ないっていうことなんですか?
![]()
【Yuki】
そうですね、機能が「少ない」というよりは、「最小限の機能だけを持っている」と言ったほうが正しいかもしれません。
複雑な機能が最初から全部入りになっているわけではなくて、自分が必要なものだけを後から付け足していくスタイルなんです。
自由度が高いので、わたしのように少しずつ自分のペースで何かを形にしたい人には、とても向いているフレームワークだと思います……。
それではまず、Flaskを動かすための準備から始めましょうか。
Flaskの導入と環境構築
![]()
【Yuki】
Flaskを使い始めるには、まずPythonがインストールされている必要があります。
その上で、「pip」というコマンドを使ってFlaskをインストールします。
でも、その前に「仮想環境」というものを作っておくと、他のプロジェクトと混ざらなくて安心ですよ。
![]()
【Hiroki】
仮想環境……ですか。自分のパソコンの中に、専用の作業部屋を作るようなイメージでしょうか?
![]()
【Yuki】
はい、まさにその通りです。
ターミナルやコマンドプロンプトで、次のように入力してみてください。
# プロジェクト用のディレクトリを作成して移動
mkdir my_flask_app
cd my_flask_app
# 仮想環境の作成
python -m venv venv
# 仮想環境の有効化(Windowsの場合)
venv\Scripts\activate
# 仮想環境の有効化(Mac/Linuxの場合)
source venv/bin/activate
# Flaskのインストール
pip install Flask
これで準備は完了です。 意外と簡単に、自分だけの開発環境が作れてしまうんですよ。
![]()
【Hiroki】
できました!これでFlaskを使う準備が整ったんですね。
次は、実際に何か画面を表示させてみたいです。
最初のプログラム:Hello World
![]()
【Yuki】
では、一番シンプルなプログラムを書いてみましょう。
app.py という名前のファイルを作って、以下のコードを書き込んでみてください。
コードのインデントには気をつけてくださいね。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World! Flaskへようこそ</p>"
if __name__ == "__main__":
app.run(debug=True)
![]()
【Hiroki】
書けました!このコードはどうやって動かすんですか?
![]()
【Yuki】
ターミナルで python app.py と入力して実行してみてください。
そうすると、http://127.0.0.1:5000 というアドレスが表示されるはずです。
それをブラウザで開いてみると……どうでしょうか?
![]()
【Hiroki】
わあ、「Hello, World! Flaskへようこそ」って表示されました!
自分の書いたプログラムがブラウザで見られるのって、なんだか感動しますね。
![]()
【Yuki】
ふふ、そう言ってもらえると嬉しいです。
この短いコードの中には、Web開発の大切な要素が詰まっているんですよ。
特に重要なのが、@app.route("/") という部分です。
これは「ルーティング」といって、どのアドレスにアクセスした時に、どの関数を実行するかを決める役割を持っています。
今回の場合は、トップページ(/)にアクセスしたら hello_world 関数が呼ばれる、という設定になっています。
ルーティングと動的なURL
![]()
【Hiroki】
ルーティング……つまり、案内板のようなものですね。
もし、ページごとに表示を変えたい時はどうすればいいんですか?
![]()
【Yuki】
いい質問ですね。
URLの一部を「変数」として受け取ることもできるんですよ。
例えば、ユーザーの名前に合わせて挨拶を変える場合は、こんな風に書きます。
@app.route("/user/<name>")
def greet(name):
return f"こんにちは、{name}さん!"
![]()
【Hiroki】
<name> の部分が自由に入れ替わるんですね。
http://127.0.0.1:5000/user/Hiroki にアクセスしたら、「こんにちは、Hirokiさん!」って出るんでしょうか?
![]()
【Yuki】
その通りです。
このように、アクセスするURLによって内容を動的に変えられるのが、Webアプリケーションの面白いところだと思います。
特定の誰かの役に立つために作られた、小さなツールのような温かさを感じませんか……?
HTMLテンプレートの利用(Jinja2)
![]()
【Hiroki】
でも、関数の中で直接HTMLを --return "<p>...</p>" みたいに書くのは、長い文章だと大変そうです。
![]()
【Yuki】
そうですね。本格的なWebサイトを作るには、Pythonのコードとデザイン(HTML)を分けたほうが管理しやすくなります。
そこで使うのが、「Jinja2(ジンジャツー)」というテンプレートエンジンです。
プロジェクトのフォルダの中に templates という名前のフォルダを作って、その中に index.html を作成してみましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Flaskのテスト</title>
</head>
<body>
<h1>こんにちは、{{ user_name }}さん!</h1>
<p>これはJinja2テンプレートを使って表示されています。</p>
</body>
</html>
![]()
【Yuki】
そして、Python側のコードを以下のように書き換えます。
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/hello/<name>")
def hello(name):
return render_template("index.html", user_name=name)
![]()
【Hiroki】
{{ user_name }} という部分が、Pythonから渡した名前に置き換わるんですね!
これならHTMLをきれいに書けそうです。
![]()
【Yuki】
はい、render_template という関数を使うのがポイントです。
HTMLの中にプログラムの変数を埋め込めるので、デザインを崩さずに動的なページが作れるようになります。
Jinja2には他にも、{% if ... %} で条件分岐をしたり、{% for ... %} で繰り返し処理をしたりする機能もあるんですよ。
フォームデータの受け取りと処理
![]()
【Hiroki】
Webサイトといえば、お問い合わせフォームや検索ボックスみたいに、ユーザーから入力を受け取ることも多いですよね。
Flaskではどうやってデータを処理するんですか?
![]()
【Yuki】
それはとても大切なポイントですね。
基本的には、「GET」や「POST」といったHTTPメソッドを使ってデータのやり取りを行います。
まずは、簡単な入力フォームを作ってみましょうか。
新しいHTMLファイル login.html を templates フォルダに作ってみてください。
<form method="POST" action="/login">
<input type="text" name="username" placeholder="ユーザー名を入力">
<button type="submit">送信</button>
</form>
![]()
【Yuki】
これを受け取るPython側のコードは、このようになります。
from flask import request
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
# フォームから送られてきたデータを取得
username = request.form.get("username")
return f"ようこそ、{username}さん!"
# GETアクセスの場合はフォームを表示
return render_template("login.html")
![]()
【Hiroki】
request.method で、アクセスが「ページを表示するため(GET)」なのか「データを送信するため(POST)」なのかを判断しているんですね。
![]()
【Yuki】
正解です。request オブジェクトを使うことで、ブラウザから送られてきた様々な情報を取得できるんです。
ユーザーが何を入力したのか、どんな情報を求めているのか……。
それを読み取って適切な反応を返すのは、なんだか会話をしているみたいで少し緊張しますが、やりがいがある作業だと思います。
静的ファイルの管理
![]()
【Hiroki】
サイトをかっこよくするために、CSSで装飾したり画像を表示したりしたいです。
そういうファイルはどうやって管理すればいいんでしょう?
![]()
【Yuki】
デザインへのこだわり、大切ですね。
Flaskでは、CSSや画像、JavaScriptなどのファイルは static という名前のフォルダに入れて管理するのがルールになっています。
例えば、static/css/style.css というファイルがある場合、HTMLからは次のように読み込みます。
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
![]()
【Hiroki】
url_for という関数を使うんですね。
![]()
【Yuki】
はい、直接パスを書くよりも、この url_for を使ったほうが、後でフォルダ構成が変わった時などに対応しやすくなるのでおすすめです。
小さな工夫ですが、こういう積み重ねがエラーの少ない綺麗なサイト作りにつながる……かもしれません。
プロジェクトの構成を整理する
![]()
【Hiroki】
だんだんファイルが増えてきましたね。
Flaskのプロジェクトって、最終的にどんなフォルダ構成になるのが一般的なんですか?
![]()
【Yuki】
規模にもよりますが、基本的な構成はこんな感じになることが多いですよ。
my_flask_app/
│
├── app.py # メインのプログラム
├── static/ # CSS、画像、JSファイルなど
│ ├── css/
│ └── images/
├── templates/ # HTMLテンプレート
│ ├── index.html
│ └── login.html
└── venv/ # 仮想環境(触らなくて大丈夫です)
![]()
【Yuki】
これくらいの規模であれば、全体を見渡しやすくて初心者の方でも迷いにくいと思います。
夜、静かな時間にじっくりとコードを整理していくのは、とても落ち着く作業ですよ。
Flaskをもっと深く学ぶために
![]()
【Hiroki】
Flask、シンプルだけど奥が深そうですね。
これからもっと複雑なアプリ、例えばデータベースを使った掲示板とかを作ってみたいです。
![]()
【Yuki】
いいですね、その意気です。
Flask自体はシンプルですが、「Flask-SQLAlchemy」という拡張ライブラリを使えばデータベース連携も簡単にできますし、ログイン機能を付けるためのライブラリもあります。
自分の必要なパーツを少しずつ集めて、理想の形に近づけていく……。
それはまるで、自分の居心地の良い場所を組み立てていくような楽しさがあるはずです。
![]()
【Hiroki】
なんだかワクワクしてきました!
まずは今回教えてもらったことを復習して、自分なりに小さなアプリを作ってみようと思います。
![]()
【Yuki】
ええ、ぜひ挑戦してみてください。
もし途中でエラーが出て困ってしまっても、あまり落ち込まないでくださいね。
機械は正直ですから、どこかに必ず理由があります。
ゆっくり時間をかけて向き合えば、きっと答えが見つかると思いますよ。
情報の根拠として、公式のドキュメントなども参考にしてみてくださいね。
![]()
【Hiroki】
ありがとうございます、Yukiさん!また分からないことがあったら教えてください。
![]()
【Yuki】
はい、わたしでよければいつでも。
Hirokiくんが自分らしい素敵なアプリケーションを作れるようになるのを、応援していますね。
それでは、今日の講座はここまでです。お疲れ様でした。
「Flask」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

