Flaskの基礎
Flaskは、Pythonで書かれた軽量なWebアプリケーションフレームワークです。以下のような特徴があります。
軽量 (Microframework):
必要最低限の機能のみを提供し、拡張性が高いです。
シンプル:
学習コストが低く、簡単にWebアプリケーションを開発できます。
WSGIツールキット:
Werkzeug WSGIツールキットとJinja2テンプレートエンジンに基づいています。
Flaskアプリケーションの基本的な構造
Flaskアプリケーションの基本的な構造は以下のようになります。
from flask import Flask
# Flaskアプリケーションのインスタンスを作成
app = Flask(__name__)
# ルーティングの設定
@app.route('/')
def index():
return 'Hello, Flask!'
if __name__ == '__main__':
# 開発用サーバーの起動
app.run(debug=True)
from flask import Flask:
FlaskモジュールからFlaskクラスをインポートします。
app = Flask(name):
Flaskアプリケーションのインスタンスを作成します。__name__は、このスクリプトが実行されているモジュール名を表します。
@app.route('/'):
デコレータと呼ばれるもので、URLのパスと実行する関数を紐付けます。この例では、ルートパス / にアクセスすると、下の index() 関数が実行されます。
def index()::
ルートパスにアクセスされたときに実行される関数です。ここでは 'Hello, Flask!' という文字列を返しています。
if name == 'main'::
このスクリプトが直接実行された場合に、以下の処理を実行します。
app.run(debug=True):
Flaskの開発用サーバーを起動します。debug=True
を設定すると、コードの変更が自動的に反映され、エラー発生時にデバッグ情報が表示されるようになります。
よく使うコマンド
Flask自体がコマンドラインツールを提供するわけではありませんが、Flaskアプリケーションの実行や管理に関連してよく使うコマンドを紹介します。
Flaskアプリケーションの実行:
上記で示した基本的なFlaskアプリケーションのスクリプト(例:app.py
)があるディレクトリで、ターミナルを開き、以下のように実行します。
python app.py
または、Flaskのコマンドラインインターフェース(CLI)を使用する方法もあります。まず、環境変数 FLASK_APP を設定します。
export FLASK_APP=app.py # macOS/Linux
set FLASK_APP=app.py # Windows
flask run
flask run
コマンドは、Flaskの開発サーバーを起動します。
デバッグモードでの実行:
開発時にはデバッグモードを有効にすることが推奨されます。上記の app.run(debug=True)
のようにコード内で設定するか、Flask CLIを使用する場合は以下のようになります。
export FLASK_APP=app.py
export FLASK_DEBUG=1 # または set FLASK_DEBUG=1 (Windows)
flask run
その他のFlask CLIコマンド (Flask 1.0以降):
Flask CLIは拡張可能で、様々なコマンドが用意されています。よく使うものとしては以下のようなものがあります。
flask routes:
アプリケーションで定義されたすべてのルートを表示します。
flask shell:
FlaskアプリケーションのコンテキストでPythonのインタラクティブシェルを起動します。
これらのコマンドを使用するには、Flask CLIがインストールされている必要があります (pip install flask-cli
)。
Flaskの使用例
以下に、簡単なWebアプリケーションの例をいくつか示します。
例1: シンプルなテキスト表示
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
この例では、/hello
にアクセスすると "Hello, World!"
と表示されます。
例2: 変数を使ったルーティング
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
return f'User: {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post ID: {post_id}'
if __name__ == '__main__':
app.run(debug=True)
/user/<username>:
<> で囲まれた部分は変数として扱われます。アクセスされたURLの username
の部分が関数の引数 username
に渡されます。
/post/<int:post_id>: <int:>
は型を指定しており、URLの post_id
の部分が整数として関数の引数 post_id
に渡されます。
例3: HTMLテンプレートの利用
Flaskでは、Jinja2というテンプレートエンジンを使って動的なHTMLを生成できます。
まず、templates という名前のフォルダを作成し、その中に HTMLファイル(例:index.html
)を保存します。
templates/index.html:
<!DOCTYPE html>
<html>
<head>
<title>Greeting</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
次に、Flaskアプリケーションのコードを以下のように記述します。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/greet/<name>')
def greet(name):
return render_template('index.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
from flask import Flask, render_template:
render_template 関数をインポートします。
render_template('index.html', name=name):
templates フォルダ内の index.html をレンダリングします。name=name は、HTMLテンプレート内の {{ name }} の部分に、関数の引数 name の値を渡すことを意味します。
これらの例はFlaskの基本的な機能の一部です。Flaskは、フォームの処理、データベースとの連携、APIの構築など、より複雑なWebアプリケーションの開発にも利用できます。