- 1. 概要
- 2. ソース
- 3. 実行
- 4. 失敗
- 5. 警告
- 6. 参考サイト
1. 概要
何はともあれ、「Hello, World!」。
2. ソース
下記のソースを記述します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
5行目の、「@app.route('/')」は、ルーティングで、これは、ドキュメントルートを示しています。
「('/')」の下に、サブルートを記述することができます。
10行目の、「app.run(host='0.0.0.0')」の「host=''」は省略することもできますが、省略すると「127.0.0.1」になって、外部からアクセスできなくなります。
3. 実行
実行します。
実行すると、下記が表示されます。
* 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://192.168.x.x:5000
Press CTRL+C to quit
ここで、「192.168.x.x」は、実行時のマシンのローカル「IP」アドレスです。
ブラウザで、「http://192.168.x.x:5000」にアクセスすると、下記のように表示されます。
そのときに、ターミナルには、下記のように表示されます。
192.168.x.x - - [31/Mar/2026 16:22:16] "GET / HTTP/1.1" 200 -
通常の「http」のログですわな。
終わるときには、メッセージ通り Ctrl+C で、とめます。
4. 失敗
当初、うっかりソース名を「flask.py」にしちゃったら、実行時に。
Traceback (most recent call last):
File "/path/flask.py", line 1, in <module>
from flask import Flask
File "/path/flask.py", line 1, in <module>
from flask import Flask
ImportError: cannot import name 'Flask' from partially initialized module 'flask' (most likely due to a circular import) (/path/flask.py)
てな、エラーになっちゃってあせりました。
自分のファイルが Flask 本体と名前衝突していたのでした。
「Python」の「import」は次の順で探します。
カレントディレクトリ
site-packages
「/usr/local/lib/.../site-packages/flask」を見つける前に、「./flask.py」を見つけてしまっていたのでした。
前にもやった失敗だわ。
5. 警告
実行時の。
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
のメッセージが気になったので、調べてみたら。
Flask に組み込まれている開発用サーバ(Werkzeugの簡易サーバ)を本番で使うなという意味。
だそうで。
「app.run()」で起動しているのは、デバッグ用、シングルプロセス、シンプルな「HTTP」サーバであって、本番運用を前提としていません。
下記のような理由で。
❌ セキュリティが弱い
デバッグモードでコード実行可能になる
攻撃に対する防御機能がない
❌ 性能が低い
同時接続に弱い
スケーリング不可
❌ 安定性が低い
落ちても自動復旧しない
長時間運用に不向き
本番環境に使っちゃダメなので。
本番では「WSGIサーバを使え」とのことです。
「WSGI」とは、「Python」ウェブアプリとウェブサーバの接続仕様だそうであります。
6. 参考サイト
本ページは、「ChatGPT」軍曹を参考にさせていただきました。
|