2024.05.10この記事は約29分で読めます。いただけます】この記事では、プログラムの基礎知識を前提に話を進めています。説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。○サンプルコード8:デプロイと運用まとめ※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)はじめにPythonとFlaskを使用したWebアプリ開発について学びたい初心者の方々へ、この記事は簡単な10ステップガイドとなっています。PythonとFlaskの基本的な特徴から始まり、その後開発環境の設定、Flaskアプリの基本的な構造、そしてルーティング、ビュー関数、テンプレートの利用といった核心的なコンセプトへと進みます。データベースとFlask-SQLAlchemy、フォームとFlask-WTF、ユーザ認証とFlask-Loginなどの扱い方も解説します。最終的には、あなた自身のFlaskアプリをデプロイする方法までを解説します。それでは、早速PythonとFlaskを用いたWebアプリ開発の世界へ飛び込んでみましょう!●PythonとはPythonは、使いやすさと強力なライブラリが特徴の一般的なプログラミング言語です。初心者からプロフェッショナルまで、幅広いユーザーに対応しています。○Pythonの特徴Pythonは読みやすさと明確な構文が特徴です。ブロックの区切りにカッコではなくインデント(スペースやタブ)を使用するため、他の言語と比べて見た目が整っています。Pythonは多くのライブラリとフレームワークを持っていて、これらを用いることで、データ分析、機械学習、Web開発など、幅広いタスクを容易にこなすことができます。○Pythonの利点Pythonの利点はそのシンプルさと使いやすさです。初心者が学びやすいプログラミング言語として広く認知されています。Pythonは汎用的な言語であり、Webアプリ開発からデータ分析、AI開発まで、多岐にわたる分野で利用されています。○Pythonのインストール方法Pythonをインストールするには、Pythonの公式ウェブサイトからインストーラをダウンロードして実行します。ダウンロードページから適切なバージョンを選び、指示に従ってインストールを進めてください。PATH」を選択し、Pythonをコマンドラインから直接呼び出せるようにしてください。【Python公式ダウンロードページ】:https://www.python.org/downloads/●FlaskとはFlaskは、Pythonで書かれた軽量なWebアプリケーションフレームワークです。Flaskは「マイクロ」フレームワークとも呼ばれ、その理由は最小限の機能のみを提供し、他の必要な機能は追加のパッケージやライブラリを用いて拡張するという設計哲学から来ています。○Flaskの特徴Flaskの特徴はそのシンプルさと拡張性にあります。最小限のコア機能を提供しつつ、ユーザーが必要とする追加の機能を自由に選択し組み合わせることができます。これにより、Flaskは初心者から上級者まで、様々なレベルの開発者に対して自由度と柔軟性を提供します。○Flaskの利点FlaskはPythonを基にしているため、Pythonの簡潔で直感的な特性を引き継いでいます。Flaskは小規模なアプリから大規模なアプリまで作成できるため、初めてWebアプリを作成する人にも、大規模なプロジェクトを手掛ける経験豊富な開発者にも適しています。○Flaskのインストール方法FlaskのインストールはPythonのパッケージ管理ツールであるpipを使って行います。下記のコマンドを実行することでFlaskをインストールできます。flaskPythonとpipが正しくインストールされていれば、このコマンドはターミナルやコマンドプロンプトから実行できます。【注意点】Pythonのバージョンによっては、pipの代わりにpip3を使用することがあります。それぞれのシステムで適切なコマンドを使用してください。○Pythonの開発環境の設定Pythonの開発環境として一般的に利用されるのは、テキストエディタとコマンドラインツールです。Codeなどが人気です。統合された開発環境が好ましい場合には、PyCharmのようなPython専用のIDEを使用することもあります。コマンドラインツールとしては、WindowsではコマンドプロンプトやPowerShell、MacやLinuxではターミナルが利用できます。これらのツールを使ってPythonのスクリプトを実行したり、ライブラリをインストールしたりします。○Flaskの開発環境の設定Flaskの開発には、Pythonの開発環境と同じツールが利用できます。テキストエディタでPythonスクリプトを編集し、コマンドラインツールでスクリプトを実行します。Flaskでは開発用サーバーが提供されています。このサーバーを使うと、開発中のWebアプリをローカル環境で簡単にテストすることができます。サーバーを起動するには次のコマンドを実行します。runこのコマンドを実行する前に、環境変数FLASK_APPにFlaskアプリのエントリポイントとなるPythonスクリプト(例えば、app.py)を設定しておく必要があります。これは次のように設定できます。FLASK_APP=app.pyWindowsの場合、代わりに次のコマンドを使用します。上記のコマンドは、コマンドを実行するターミナルやコマンドプロンプトのセッションの間だけ有効です。新しいセッションを開始するたびに、このコマンドを再度実行する必要があります。下記のPythonコードは、最も基本的なFlaskアプリを作成します。このコードでは、Flaskライブラリをインポートし、Flaskのインスタンスを作成しています。Flask!”という文字列を返しています。run’コマンドを実行すれば、ローカルのWebサーバーが起動します。Flask!”と表示されます。この例から分かるように、Flaskを使ってWebアプリを開発する基本的なフローは非常に簡単です。Flask!”と表示されます。●Flaskアプリの基本的な構造PythonとFlaskを使用したWebアプリ開発を理解するためには、まずFlaskアプリの基本的な構造について理解する必要があります。Flaskアプリの構造は、フォルダ構造と基本的なコード構造の2つの要素で成り立っています。一般的に、Flaskアプリのフォルダ構造は次のようになります。アプリ名/static/templates/app.py“static”フォルダは、CSSやJavaScript、画像などの静的ファイルを格納します。”templates”フォルダは、HTMLテンプレートファイルを格納します。“app.py”はアプリケーションの主要なPythonスクリプトで、ここにルーティングやビュー関数などの主要な機能を記述します。○Flaskアプリの基本的なコード構造Flaskアプリの基本的なコード構造は非常にシンプルです。Flask!'このコードでは、最初にFlaskライブラリをインポートしています。次に、Flaskのインスタンスを作成しています。Flask!”という文字列を返すように指定しています。Flask!”と表示されます。これが、Flaskを使用したWebアプリ開発の最も基本的な形です。下記のコードは、上述の基本的な構造を用いて、基本的なFlaskアプリを作成します。app!'このコードでは、まずFlaskライブラリをインポートし、Flaskのインスタンスを作成しています。app!”という文字列を返すように指定しています。app!”と表示されます。これが、Flaskを使用したWebアプリ開発の最も基本的な形です。●ルーティングとビュー関数Webアプリケーションにおけるルーティングとは、URLをどのような処理(ビュー関数)に対応させるかを決定する仕組みのことを指します。ルーティングはWebアプリケーションの骨組みであり、ユーザーがアクセスしたURLによって適切なビュー(画面)を表示させる役割を果たします。Flaskではデコレータという機能を使ってルーティングを設定します。デコレータは関数の上に付けられる特殊な記述で、「@app.route(“/”)」のように使用します。このデコレータの後に続く関数(ビュー関数)が、指定したURLにアクセスがあった際に実行される処理となります。Flask!」と表示する簡単なルーティングは次のように実装します。Flask!」という文字列がHTTPレスポンスとして返されます。○ビュー関数の作成ビュー関数とは、特定のURLに対するリクエストがあった際に呼び出される関数のことを指します。これが実行されることでユーザーに表示されるページが決定されます。関数の中で行われる処理は様々で、データベースからのデータの取得、テンプレートを用いたHTMLの生成、リダイレクトなどが含まれます。User!」と表示するビュー関数を作成します。User!」という文字列がHTTPレスポンスとして返されます。○サンプルコード3:ルーティングとビュー関数それでは、実際に複数のルーティングとビュー関数を持つFlaskアプリを作成してみましょう。usernameこのコードでは、まず「/」というURLパスに対するビュー関数「index」を定義しています。次に、「/hello」に対するビュー関数「hello」を定義し、最後に動的ルーティングを利用して「/user/」以下の文字列に対するビュー関数「show_user_profile」を定義しています。最後の「show_user_profile」関数では、URLからパラメータを取得しています。「」部分は動的であり、「/user/john」のようなアクセスがあった場合、「john」が「username」の値としてビュー関数に渡されます。john”と表示されます。これにより、ユーザー名など、URLに含まれる情報に基づいて動的なレスポンスを生成することが可能になります。●テンプレートの利用テンプレートは、Web開発において非常に重要な要素の一つです。テンプレートを使用することで、HTMLなどのコードを整理し、維持・更新を容易にします。PythonとFlaskでは、Jinja2という強力なテンプレートエンジンが利用されています。○テンプレートの基本テンプレートは、一貫したアプリケーションの外観を提供しながらも、ページごとに異なる内容を表示することを可能にします。基本的には、HTMLに特定の場所にプレースホルダー(変数)を設け、それらの場所に動的な値を挿入する方法を提供します。Flaskでは、テンプレートファイルは通常、アプリケーションディレクトリの下にある「templates」というフォルダ内に保存されます。テンプレートをレンダリングするには、Flaskの「render_template」関数を使用します。この関数は、テンプレート名と一連のキーワード引数を受け取り、引数はテンプレート内の対応するプレースホルダーに置き換えます。○Jinja2テンプレートエンジンの基本Jinja2は、Pythonのテンプレートエンジンであり、テンプレートのレンダリングをサポートしています。Jinja2は、Flaskによってデフォルトで使用されます。テンプレートを使用することで、HTMLを生成するコードをシンプルに保つことができ、ロジックと表示を分離することができます。Jinja2は、HTMLテンプレート内に直接Pythonコードを記述することを可能にするシンタックスを提供しています。これにより、HTMLテンプレートが動的に生成され、特定のデータに基づいて内容が変わります。下記の例は、Jinja2の基本的な使用方法を表しています。この例では、’index.html’という名前のテンプレートをレンダリングし、その中で使用する変数’username’を指定しています。Doe')このコードでは、最初に必要なモジュールをインポートし、Flaskアプリケーションを初期化しています。その後、’/’のURLパスに対するルートを定義し、そのルートのビュー関数では’templates/index.html’テンプレートをレンダリングしています。Doe’という値を渡しています。この’index.html’テンプレートが次のようになっていたとします。}}’というプレースホルダが使われています。Doe’)に置き換えられます。Doe!’と表示します。テンプレートを使うことで、HTMLを動的に生成することが可能になります。Jinja2の機能はこれだけにとどまらず、制御構造(if文やforループなど)の使用やテンプレートの継承など、さまざまな高度な使用方法があります。テンプレートはFlaskでのWebアプリケーション開発において重要な概念であり、動的なWebページの作成に必要不可欠です。上記の例を参考に、独自のFlaskアプリケーションでテンプレートを活用してみてください。●データベースとFlask-SQLAlchemyWebアプリケーション開発において、データベースは不可欠な要素です。データベースは、ユーザーの情報やアプリケーションで生成されるデータを保存し、必要に応じてそのデータを取り出して利用します。○データベースの基本データベースとは、システムが持つべき情報を整理して保存する場所です。この情報を扱うためのシステムをデータベース管理システム(DBMS)といいます。一般的には、データの保管、取り出し、更新、削除といった機能を持っています。データベースは大きく分けて2つの種類、リレーショナルデータベース(RDB)とNoSQLデータベースがあります。リレーショナルデータベースは、表形式でデータを保存し、SQLという言語を使ってデータを操作します。NoSQLデータベースは、非構造化データを効率的に扱うことが可能で、大量のデータを高速に処理することができます。Mapping)ライブラリです。ORMとは、プログラミング言語のオブジェクトとデータベースのテーブルを関連付ける手法の一つで、データベースの操作をプログラミング言語の文法で書くことができます。Flask-SQLAlchemyは、リレーショナルデータベースの操作をPythonの文法で書けるようにし、SQLの知識がなくてもデータベースの操作が可能になるため、初心者でも簡単にデータベースを利用することができます。行う基本的なコードです。self.usernameこのコードでは、まずFlaskとFlask-SQLAlchemyをインポートします。次にFlaskのアプリケーションインスタンスを作成し、データベースへの接続情報を設定しています。SQLAlchemyのインスタンスを作成し、データベースとの接続を確立します。その後、Userという名前のクラスを作成しています。このクラスはデータベースのテーブルを表現しており、各属性(id、username、email)がテーブルの各列を表現しています。idは一意の整数値、usernameとemailは一意でnullを許さない文字列値として定義しています。操作が可能になります。●フォームとFlask-WTFWebアプリケーションでよく見られるのがユーザーからの入力を受け付けるフォームです。PythonとFlaskでWebアプリを開発する際に、このフォームの処理を簡易化するための拡張モジュールがFlask-WTFです。これはWTFormsというPythonのライブラリをFlaskで簡単に使用できるようにしたもので、安全性の高いフォームを簡単に作成できます。○フォームの基本Webアプリケーションにおけるフォームは、ユーザーの入力を受け取り、その情報を処理するための重要なインターフェイスです。ユーザーはフォームを通じてテキストを入力したり、選択肢から選んだり、チェックボックスをクリックしたりします。この情報はサーバに送信され、アプリケーションはそれを処理します。PythonのWebアプリケーション開発におけるフォームの取り扱いには、一般的に次の4つのステップが含まれます。フォームの定義:フィールドとそのバリデーションルールを指定します。フォームの描画:HTMLを用いてブラウザに表示します。データの送信:ユーザーがフォームを送信すると、データはサーバに送られます。データの処理:サーバはデータを受け取り、適切に処理します。○Flask-WTFの基本Flask-WTFはFlask用のWTFormsラッパーで、フォームの作成とバリデーションの処理を簡単にします。Flask-WTFを使うと、フォームオブジェクトの定義、フォームのHTMLの描画、送信データのバリデーションと処理などが簡単になります。Forgery)保護も自動的に提供します。これはWebアプリケーションのセキュリティを向上させる重要な特徴で、攻撃者が偽のリクエストをサイトに送信するのを防ぎます。Flask-WTFを使用するためには、まずFlaskアプリケーションに設定を追加する必要があります。具体的には、セキュリティのためのシークレットキーとCSRF対策用のキーを設定します。'your-secret-key'CSRFProtect(app)このコードでは、Flaskアプリケーションの作成とCSRFProtectの初期化を行っています。SECRET_KEYは、Flaskがセッションなどのために内部的に使用する秘密鍵で、安全性を確保するためにランダムで予測不可能な文字列を設定します。○サンプルコード6:フォームとFlask-WTFの利用それでは、具体的なフォームの作成と処理の例を見てみましょう。ここでは、名前を入力する簡単なフォームを作成し、その名前を表示するWebアプリケーションをFlaskとFlask-WTFで作ります。フォームの定義から始めます。名前を入力するフィールドと、それを送信するためのボタンを持つフォームを定義します。フォームはFlaskFormクラスを継承したクラスとして定義し、フィールドはクラスの属性として定義します。SubmitField('送信')このコードではFlaskFormを継承したNameFormというクラスを定義し、その中にテキスト入力フィールドのnameと送信ボタンのsubmitを定義しています。StringFieldとSubmitFieldはWTFormsのフィールドクラスで、それぞれテキスト入力フィールドと送信ボタンを表します。次に、このフォームを使ってユーザーの名前を受け取り、表示するルートを定義します。form=form)このコードではindexというルートを定義しています。このルートにアクセスすると、NameFormのインスタンスが作成され、そのフォームが送信されたときには入力された名前を取得し、フラッシュメッセージとして表示します。indexルートにリダイレクトします。リダイレクトは、ブラウザに再度indexルートにアクセスするように指示します。上記のコードで用いたindex.htmlのテンプレートは次のようになります。</form></body></html>このテンプレートでは、フラッシュメッセージを表示し、フォームを描画しています。Flask-WTFとJinja2テンプレートエンジンを使うと、form.hidden_tag()でCSRFトークンを含む隠しフィールドを、form.name()で名前入力フィールドを、form.submit()で送信ボタンを簡単に描画できます。●ユーザ認証とFlask-LoginWebアプリケーションにおいて、ユーザ認証は必要不可欠な機能の一つです。ユーザ認証はユーザーが誰であるかを確認するプロセスで、これによりユーザーのアカウントへの不正なアクセスを防ぎ、個々のユーザーに対してパーソナライズされた体験を提供できます。PythonとFlaskでWebアプリケーションを開発する際には、ユーザ認証を簡単に実装できるFlask-Loginという拡張モジュールが利用できます。○ユーザ認証の基本ユーザ認証は、ユーザーが自分自身であると主張することを検証する手段です。一般的に、ユーザ名とパスワードの組み合わせを提供することで、ユーザーは自分自身であることを証明します。認証されたユーザーは、アプリケーション内で特定の機能や情報にアクセスすることが可能になります。認証の流れは通常、次のステップで進行します。ユーザーはユーザ名とパスワードを入力します。アプリケーションは提供されたユーザ名とパスワードをデータベースまたは他のデータストアと照合します。照合が成功すれば、ユーザーは認証され、アプリケーションにアクセスできます。失敗した場合、ユーザーは再度認証情報を入力するよう求められます。○Flask-Loginの基本Flask-Loginは、ユーザ認証を簡単に実装できるFlaskの拡張モジュールです。この拡張モジュールは、ユーザーセッションの管理や「ログイン必須」のルートを簡単に設定できる機能を提供します。Flask-Loginを使用するには、まずユーザーモデルにいくつかのメソッドを実装する必要があります。これらのメソッドはFlask-Loginがセッションデータを管理するのに必要です。generate_password_hash(password)このコードでは、Userモデルを定義し、Flask-Loginのためのメソッドを追加しています。ここではパスワードはハッシュ化されて保存され、ユーザーがパスワードを確認または設定するためのメソッドが提供されています。○サンプルコード7:ユーザ認証とFlask-Loginの利用それでは、Flask-Loginを使ってユーザ認証を実装する基本的な例を見てみましょう。ここでは、ユーザーがログインし、その後ログアウトできる簡単なWebアプリケーションを作ります。Flask-Loginを初期化し、Flask-Loginが現在のユーザーを取得できるようにするためのローダ関数を設定します。User.query.get(int(id))このコードでは、Flask-Loginを初期化し、ユーザーローダ関数を設定しています。この関数は、Flask-LoginがセッションからユーザIDを取得したときに呼び出され、対応するユーザーオブジェクトをデータベースから取得します。次に、ログインとログアウトのルートを設定します。redirect(url_for('index'))このコードでは、ログインとログアウトのルートを定義しています。ログインルートでは、ユーザーが提供した認証情報が有効であるかを確認し、有効であればユーザーをログインさせます。ログアウトルートは@login_requiredデコレータにより保護されており、ログインしているユーザーのみがアクセスできます。以上のコードにより、ユーザーはログインし、そのセッションが維持され、必要に応じてログアウトできるようになります。この基本的な認証機能は、ユーザーが個々にパーソナライズされた体験を享受できるように、Webアプリケーションの中核的な部分を形成します。●デプロイとFlaskの運用Webアプリケーションの開発が完了したら、次のステップはデプロイです。デプロイとは、開発したアプリケーションを実際の運用環境に配置(公開)することを意味します。この運用環境は通常、開発環境とは異なるサーバーやクラウドサービスで、ユーザーがアプリケーションにアクセスできるようになります。○デプロイの基本アプリケーションのデプロイは一見複雑に思えるかもしれませんが、基本的なプロセスは次のとおりです。アプリケーションとその依存関係を運用環境にアップロードします。Pythonの場合、この依存関係は通常、requirements.txtファイルにリストアップされます。運用環境でアプリケーションを実行します。Flaskアプリケーションの場合、これは通常、アプリケーションをホストするWSGIサーバーを設定し、実行することを含みます。これらのステップは、アプリケーションと運用環境によって異なる具体的な手順を必要とするかもしれませんが、基本的なプロセスは同じです。○Flaskアプリの運用Flaskアプリケーションを運用環境にデプロイするためには、次のステップを実行する必要があります。運用環境にFlaskアプリケーションとその依存関係をアップロードします。このステップでは、アプリケーションのコードとrequirements.txtファイルを運用環境にコピーします。運用環境でrequirements.txtファイルにリストされているパッケージをインストールします。requirements.txtコマンドを実行することで達成できます。WSGIサーバーを設定し、Flaskアプリケーションを実行します。Flaskアプリケーションを運用環境で安全にホストするためには、本番環境向けのWSGIサーバー(例えば、GunicornやuWSGIなど)が必要です。○サンプルコード8:デプロイと運用それでは、運用環境でFlaskアプリケーションを実行するための基本的なGunicornコマンドを紹介します。myapp:appこのコードでは、Gunicornサーバーを使用してFlaskアプリケーションを実行しています。ここでmyappはFlaskアプリケーションのPythonスクリプト名(.py拡張子を除く)であり、appはFlaskのアプリケーションインスタンスの名前です。4はワーカーの数を指定しており、通常は運用環境のCPUコア数に基づいて選択します。このコマンドを実行すると、FlaskアプリケーションがGunicornサーバー上で実行され、ユーザーがアクセスできるようになります。Gunicornは、アプリケーションのロードバランシングとワーカープロセスの管理を自動的に行い、アプリケーションが多数の同時リクエストを処理できるようにします。まとめ以上がPythonとFlaskを使用したWebアプリ開発の基本的なステップです。この記事では、PythonとFlaskを使ってWebアプリを開発するための具体的なステップと、各ステップでの詳細なサンプルコードを提供しました。これらのステップとコードを参考に、初心者でも簡単にPythonとFlaskでWebアプリを開発することが可能です。PythonとFlaskを使用したWebアプリ開発は、初心者から経験豊富な開発者まで、様々なスキルレベルの人々にとって有益で楽しい経験となるでしょう。このガイドがあなたの学習旅行の一助となれば幸いです。IoTプログラミングPythonJapanシーモア関連記事PythonPythonで実践する乗数計算の計算方法と考え方まとめPythonで乗数計算をマスターしたい方必見!ADMMやラグランジュ法を使った最適化手法を解説。初心者から上級者まで役立つ情報満載。VHDLVHDLのassignを完全マスターする10のステップVHDLのassignに関する全てを初心者向けに徹底的に解説!10の詳細なサンプルコードを通じて、使い方から応用まで手に入れることができます。VHDLVHDLとunsignedの10の魅力的な使い方VHDLのunsigned型の効果的な使い方を10選で紹介。初心者から上級者まで、この記事を読めばunsigned型を習得するためのコツやサンプルコードが身につきます。VHDLビット反転の10選!VHDL初心者が一気にスキルアップVHDLでのビット反転方法を10選で徹底解説。方でも分かりやすいサンプルコードとともに、実践的な知識を手に入れることができます。カスタマイズ方法を詳細なサンプルコードと共に紹介します。C++【C++】5つのステップで学ぶ指数表記の基本と応用この記事ではC++の指数表記を初心者から上級者までが理解できるように、基本から応用まで丁寧に解説します。豊富なサンプルコードとともに、その使い方やカスタマイズ方法を学びましょう。Japanシーモア.メニューWebHTMLCSSJavaScriptTypeScriptPHPRubyIoTC++PythonC言語VerilogVHDLAPPJavaKotlinSwiftObjctive-CDartSYSC#COBOLPerlGroovyGo言語ホーム検索トップサイドバ。