Raspberry Pi 5を使って、Pythonの基本を学びながら簡単なWebサーバーを構築してみませんか?
今回の記事では、初心者向けにPythonの軽量ウェブフレームワークであるFlaskを使って、Raspberry Pi上で動作するウェブアプリケーションの作成方法を解説します。
Flaskを利用することで、シンプルかつ効率的にウェブアプリケーションを開発できるため、プログラミング初心者にも最適な学習素材となります。
環境
ハードウェア:Raspberry Pi 5
今回はFlaskで構築したアプリケーションを動作させるハードウェアとしてRaspberry Pi 5を使用します。
Raspberry Pi 5は、強力な性能を誇る最新のシングルボードコンピュータです。4コアのCortex-A76プロセッサと最大8GBのRAMを搭載し、前モデルに比べて大幅に性能が向上しています。
これにより、教育用途からIoTプロジェクト、ホームサーバー構築まで、幅広いアプリケーションに対応可能です。低価格でありながら高性能で、プログラミング学習やプロトタイピングに最適です。
ケース:Pironman5
Raspberry Pi 5は高性能な反面、発熱が大きいという問題を抱えています。
Webサーバーを運用する場合は長期間安定動作可能な冷却性能を持ったケースを選定することが重要となりますので、SunFounderから発売されているPironman5を使用します。
Pironman5の仕様や性能は以下の記事で詳細を解説していますので、あわせてご覧ください。
Flaskとは
Flaskは、Pythonでウェブアプリケーションを開発するための軽量なフレームワークです。Flaskはシンプルで使いやすく、初心者からプロフェッショナルまで幅広いユーザーに利用されています。
- シンプルで直感的: Flaskは最小限の構成で始めることができ、必要に応じて機能を追加していくことができます。これにより、学習曲線が緩やかで、初心者にも扱いやすいフレームワークとなっています。
- モジュール化と拡張性: Flaskは非常に拡張性が高く、必要に応じて様々な拡張機能(エクステンション)を追加できます。例えば、データベースとの連携、フォームのバリデーション、認証機能など、多くの拡張機能が用意されています。
- 柔軟なテンプレートエンジン: FlaskはJinja2という強力なテンプレートエンジンを使用しています。Jinja2を使うことで、HTMLの中にPythonのコードを埋め込むことができ、動的なウェブページを簡単に作成できます。
- コミュニティとドキュメント: Flaskは大規模なコミュニティによって支えられており、豊富なドキュメントやチュートリアルが提供されています。問題が発生した際には、コミュニティのサポートを受けることができます。
Flask実行環境の作成
仮想環境の構築
まず、Flaskアプリケーションのプロジェクトディレクトリ(flask_app
)に移動します。
mkdir flask_app
cd ~/flask_app
仮想環境を作成します。
python3 -m venv venv
ディレクトリの権限を確認します。
ls -la /home/pi/flask_app/venv/lib/python3.11/site-packages/
必要に応じて権限を修正します。
sudo chown -R pi:pi /home/pi/flask_app/venv
仮想環境を有効にします。
source venv/bin/activate
PythonとFlaskのインストール
Flaskをインストールします。
pip install flask psutil
以下のようにメッセージが表示されたらインストール成功です。
Installing collected packages: psutil, MarkupSafe, itsdangerous, click, blinker, Werkzeug, Jinja2, flask
Successfully installed Jinja2-3.1.4 MarkupSafe-2.1.5 Werkzeug-3.0.3 blinker-1.8.2 click-8.1.7 flask-3.0.3 itsdangerous-2.2.0 psutil-6.0.0
発生したエラー
以下のようなエラーが発生する場合は、仮想環境を作成してディレクトリの権限を再確認してください。
pip3 install flask
error: externally-managed-environment
× This environment is externally managed
mq> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
For more information visit http://rptl.io/venv
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
Flaskアプリの作成
アプリケーションファイルの作成
作業ディレクトリに移動します。
cd flask_app
Webアプリケーションとして実行するPythonコードを作成します。ファイル名はapp.py
とします。
from flask import Flask, render_template
import psutil
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/system')
def system():
cpu_usage = psutil.cpu_percent(interval=1)
memory_info = psutil.virtual_memory()
memory_usage = memory_info.percent
return render_template('system.html', cpu=cpu_usage, memory=memory_usage)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
テンプレートディレクトリとHTMLファイルの作成
templates
ディレクトリを作成し、その中にindex.html
ファイルを作成します。
sudo mkdir templates
sudo nano templates/index.html
index.html
には以下の内容を追加します。
<!DOCTYPE html>
<html>
<head>
<title>My Flask App</title>
</head>
<body>
<h1>Welcome to My Flask App!</h1>
<p>This is a simple web server running on Raspberry Pi 5.</p>
</body>
</html>
system.html
を作成します。
nano templates/system.html
以下の内容をsystem.html
に追加します。
<!DOCTYPE html>
<html>
<head>
<title>System Info</title>
</head>
<body>
<h1>System Information</h1>
<p>CPU Usage: {{ cpu }} %</p>
<p>Memory Usage: {{ memory }} %</p>
</body>
</html>
ウェブサーバーの起動
アプリケーションの実行
Flaskアプリケーションを実行します。
python3 app.py
以下のように表示されたら起動成功です。
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://XXX.XXX.XX.XX:5000
Press CTRL+C to quit
192.168.11.9 - - [22/Jul/2024 21:07:30] "GET / HTTP/1.1" 200 -
192.168.11.9 - - [22/Jul/2024 21:07:30] "GET /favicon.ico HTTP/1.1" 404 -
ブラウザでの確認
同じネットワーク内の別のデバイスからRaspberry PiのIPアドレスを使って、Webブラウザからhttp://[RaspberryPiのIPアドレス]:5000
にアクセスします。
アクセスに成功すると、以下のようにブラウザに表示されます。
まとめ
今回の記事では、Raspberry Pi 5を使ってFlaskを利用した簡易ウェブサーバーの構築方法を紹介しました。
Flaskの基本的な使い方から、実際にCPUとメモリの使用率を表示するアプリケーションの作成まで、具体的な手順を踏まえて解説しました。Flaskは非常にシンプルで使いやすいフレームワークであり、初心者でも直感的に学ぶことができます。
この記事を通じて、PythonとFlaskを使ったウェブアプリケーション開発の第一歩を踏み出せたのではないでしょうか。これからも様々なプロジェクトに挑戦し、プログラミングのスキルをさらに磨いていきましょう。
コメント