【Flask】ルーティングを理解しよう|Chapter1-4

一つ前のページでは初めてのFlaskコードを書いてみました。
今回は ルーティング について見ていきましょう。
Chapter1:Flask入門編
・Chapter1-1:Flaskとは何か
・Chapter1-2:Flaskの開発環境を構築しよう
・Chapter1-3:初めてのFlaskコードを書いてみよう
・Chapter1-4:ルーティングを理解しよう ◁今回はここ
・Chapter1-5:動的ルーティングを理解しよう
Chapter2:Jinja2入門編
Chapter3:フィルター編
Chapter4:フォーム編
Chapter5:データベース編
Chapter6:エラーハンドリングとデバッグ編
Chapter7:アプリ開発編
Webアプリケーションでは、ユーザーがブラウザで特定のURLにアクセスすると、それに応じたページが表示されます。
この仕組みの裏側には「ルーティング(Routing)」というとても重要な考え方が存在しています。
Flaskでは非常にシンプルなコードでルーティングを実現することができ、アプリ開発の第一歩となります。
- Flask開発を Stream Deck でボタン化しよう!
-
Flaskは非常に軽量かつシンプルなフレームワークですが、それゆえに定型作業が多く、開発は単調な作業の連続になりがちです。
それこそがFlaskのメリットであり、習得難易度が低い理由でもありますが、単調な作業は退屈で、ミスも起こりやすいでしょう。
そこで役に立つのが Stream Deck 。
このような定型手順が多い作業を “ボタン化” することで視覚化。
圧倒的に 効率的 かつ ストレスフリー な開発環境が簡単に手に入ります↓↓
あわせて読みたいFlask開発をStreamDeckでボタン化しようあわせて読みたいプログラマー向けStream Deckの選び方|初心者でも失敗しないモデル比較ガイド
「ルーティング」とは何か?|初心者向け解説
「ルーティング」とは、一言で言うと Pythonの関数(処理)とURLを紐づける仕組み のことです。

たとえば、あるユーザーが URL「http://example.com/」のサイトにアクセスしたときに、Pythonで「トップページを表示する関数」を実行することができます。
また、URL「http://example.com/about」にアクセスしたときには「会社情報ページを表示する関数」を実行したいというように、どのURLにアクセスされたら、どの処理を行うか を決める役目を持っているのがルーティングです。
Flaskでは、このルーティングをとても簡潔な形で記述することができます。

ルーティングの基本構文と「app」の役割
Flaskでルーティングを行う際は、以下のように記述します。
@app.route("/URL部分") # もしこのURLにアクセスされたら
def 関数名(): # この関数を実行する
return "表示させたい内容"このうち、@app.route() の部分がルーティングを定義するための デコレータ です。"/" や "/about" のようなURLに対応する処理を、その下の関数で書いていきます。
ここで使われている app は、Flaskのアプリケーション本体を表す インスタンス変数 です。これは次のようにしてインスタンス生成されます。
app = Flask(__name__) # 引数__name__を使ってFlaskクラスをインスタンス生成し、変数appに代入
この app という名前自体は自由に変えても良いのですが、Flaskでは慣例的に app という名前がよく使われています。
初心者のうちはこの慣例に従っておくと安心です。

実例で学ぶルーティング|初心者向けの2つの例
ルーティングの使用例を見ていきましょう。
「Hello Flask!」を表示する最短ルート構成を解説
ここでは、Chapter1-3で紹介したのとまったく同じコードを、ルーティングの部分に注目して解説します。
from flask import Flask # flaskモジュールの中のFlaskクラスをインポート
# -- インスタンス生成 --
app = Flask(__name__) # Flaskクラスを使ってアプリのインスタンスを作成。引数には__name__を指定
# -- ルーティング --
@app.route("/") # ルートURL(http://〜/)にアクセスがあった時の処理を定義
def hello_flask(): # 関数hello_flaskを定義
return '<h1>HelloFlask!</h1>' # ブラウザに表示するHTML文字列を返す
# -- サーバー起動 --
if __name__ == "__main__": # このファイルが直接実行されたときだけ、以下の処理を行う
app.run(debug=True) # Flaskアプリを起動。debug=Trueをつけることでエラー時に詳細表示されるルーティングの部分(7~9行目)に注目しましょう。
ここでは「/ にアクセスされたら hello_flask() という関数を実行し、その結果をブラウザに表示する」という処理を行っています。
@app.route("/"):アクセスされるURL(ここではトップページ)を指定def hello_flask()::呼び出される関数を定義return '<h1>HelloFlask!</h1>':HTML文字列を返してページに表示
このように、URLと処理(関数)を直感的に結びつけることができる点がFlaskの魅力です。
発展:1つのアプリで複数のルートを持たせる具体例
ルーティングは一つのURLだけでなく、複数のURLに対応させることもできます。
@app.route("/about") # ルートURL(http://〜/about)にアクセスがあった時の処理を定義
def about(): # 関数aboutを定義
return "<p>このページは About ページです</p>"先ほどのコードに上記のコードを追記すれば、http://〜/about にアクセスしたときにこの about() 関数が実行され、<p>〜</p> のHTMLが表示されます。
まとめ:ルーティングで必ず押さえておきたい要点
- ルーティングとは、URLと関数を結びつける仕組み。
- Flaskでは
@app.route("URL")という簡潔な記述で定義できる。 appはアプリのインスタンス。慣習的にこの名前がよく使われる。- 一つのアプリに複数のルートを持たせることも可能。
次の章では「URLの一部を変数のように扱う方法(動的ルーティング)」について学びます。お楽しみに!
- サイト改善アンケート|1分だけ、ご意見をお聞かせください
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、ご利用者のみなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。ご協力いただけますと幸いです。
アンケート
練習問題:ルーティングを使ってみよう

今回は、Flaskにおける「ルーティング」の基本的な使い方を学ぶための練習問題です。
2つの異なるURLにアクセスしたときに、それぞれ異なる日本語のメッセージをブラウザ表示する簡単なWebアプリを作成してみましょう。
この問題の要件
以下の要件に従ってコードを完成させてください。
- Flaskをインポートし、インスタンスを作成すること
@app.route("/")を使ってトップページのルートを定義すること- トップページにアクセスされたときに「これはトップページです」というメッセージを表示すること
@app.route("/greeting")を使って別のルート/greetingを定義すること/greetingにアクセスされたときに「こんにちは!Flaskへようこそ!」というメッセージを表示すること
ただし、以下のような実行結果となるコードを書くこと。
このコードを実行し、URL「http://localhost:5000/」にアクセスしたとき:
これはトップページです
URL「http://localhost:5000/greeting」にアクセスしたとき:
こんにちは!Flaskへようこそ!
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント:コードの構成を見る
-
正解のコードは上から順に以下のような構成となっています。
1:Flaskライブラリから必要なクラス(Flask)をインポート
2:Flaskアプリ本体となるインスタンスを作成(Flask(__name__))
3:「トップページ(/)」にアクセスされたときに表示する内容を定義
4:「/greeting」ページにアクセスされたときに表示する内容を定義
5:このPythonファイルを直接実行したときにだけ、Flaskアプリが起動するように設定(if __name__ == "__main__"を使う)
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
正解コード
例えば、以下のようなプログラムが考えられます。
- 正解コード
-
from flask import Flask # Flaskクラスをflaskモジュールからインポート # Flaskアプリケーションのインスタンスを作成 # __name__ は現在のファイル名を表し、Flaskが実行環境を判断するために使います app = Flask(__name__) # ---------------------- # ルーティングの定義(今回の学習ポイント) # ---------------------- # "/" にアクセスがあった場合に実行される関数 @app.route("/") # この関数はトップページにアクセスされたときに実行されます def home(): # 日本語で文字列を返します(ブラウザに表示されます) return "これはトップページです" # "/greeting" にアクセスがあった場合に実行される関数 @app.route("/greeting") # greetingページ用のルート(ルート=道の意味) def greet(): return "こんにちは!Flaskへようこそ!" # ---------------------- # アプリケーションの起動設定 # ---------------------- # このファイルが直接実行された場合のみ、以下の処理を行う if __name__ == "__main__": # Flaskの開発用サーバーを起動します # debug=True を指定すると、エラーが起きたときに詳細な情報が表示されます app.run(debug=True)
正解コードの詳細解説
正解コードをブロックごとに分割して解説します。
- 正解コードの詳細解説
-
1:Flaskライブラリのインポート
from flask import Flask
FlaskというWebアプリケーション用のライブラリから、Flaskというクラスを使えるように読み込んでいます。
このクラスを使って、これからFlaskアプリの“本体”を作っていきます。
2:アプリケーションインスタンスの作成
app = Flask(__name__)
Flaskアプリケーションのインスタンス(実体)を作成しています。
__name__は「このファイルが実行されているときの名前」を表す特別な変数です。Flaskではこれを使ってアプリを正しく動作させる準備をしています。作成したインスタンスは
appという名前で使えるようにしています。3:トップページ用のルート定義
@app.route("/") def home(): return "これはトップページです"@app.route("/")は、「ユーザーがWebブラウザで/にアクセスしてきたときに、この下にある関数を実行してください」という意味の設定です。ここでは
home()という関数が定義されており、実行されると「これはトップページです」という文字列が表示されるようになっています。
※この文字列が実際にブラウザに表示されます。4:「/greeting」用のルート定義
@app.route("/greeting") def greet(): return "こんにちは!Flaskへようこそ!"このブロックは、
/greetingというURLにアクセスがあった場合の処理を定義しています。greet()という関数が呼ばれ、「こんにちは!Flaskへようこそ!」というメッセージをブラウザに返します。5:アプリケーションの起動設定
if __name__ == "__main__": app.run(debug=True)この部分は「このファイルが直接実行されたときだけ、Flaskアプリを起動する」ための仕組みです。
app.run()でアプリを起動し、debug=Trueを指定すると、コードにエラーがあった場合に詳細なエラーメッセージを表示してくれる便利なモードになります。
FAQ|Flaskルーティングの基礎でつまずきやすいポイント
- Q1. Flaskでルートを定義したのにページが表示されないのはなぜですか?
-
多くの場合、Flaskアプリが正しく起動していなかったり、定義したルートに対応するURLが間違っているケースが原因です。まずは
@app.route()の引数とブラウザでアクセスしているURLが一致しているか確認しましょう。
- Q2.
@app.route()の中にスラッシュを入れるかどうかで違いはありますか? -
あります。例えば
@app.route('/about')と@app.route('/about/')はFlaskでは別ルートとして扱われます。末尾のスラッシュがあるとリダイレクトされる場合があるため、意図に合わせて使い分けましょう。
- Q3. ルートの中で変数を使いたいときはどうすればいいですか?
-
ルートに変数を埋め込みたい場合は、
<変数名>の形式で指定します。たとえば@app.route('/user/<username>')のように書くと、URLの一部を変数として関数に渡すことができます(詳細は次章で解説予定)。






