BOP - The Future of Creative Engineers -


← ホームに戻る

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アプリケーションの開発にも利用できます。