カテゴリ: Flask 更新日: 2025/12/27

FlaskのAPIを高速化する方法!キャッシュと並列処理の基本を初心者向けにやさしく解説

FlaskのAPIのパフォーマンスチューニング!キャッシュや並列化の基本
FlaskのAPIのパフォーマンスチューニング!キャッシュや並列化の基本

先生と生徒の会話形式で理解しよう

生徒

「先生、FlaskでAPIを作ったんですけど、アクセスが増えると遅くなってしまいます…。」

先生

「それは“パフォーマンスチューニング”が必要ですね。キャッシュと並列処理という仕組みを取り入れると、FlaskのAPIが速くなりますよ。」

生徒

「キャッシュとか並列って、パソコン初心者にはちょっと難しそうですけど…大丈夫でしょうか?」

先生

「もちろんです!できるだけやさしい例えと図で解説しますね。一緒にゆっくり理解していきましょう!」

1. Flaskとは?まずはおさらい

1. Flaskとは?まずはおさらい
1. Flaskとは?まずはおさらい

Flask(フラスク)は、Pythonで作られた軽量なWebアプリの仕組みです。簡単にAPI(アプリ同士のやり取りの入口)を作れるので、初心者にも人気です。

たとえば、スマホアプリが画像やデータをFlaskに送って、Flaskが答える、という仕組みを作れます。

2. パフォーマンスチューニングとは?

2. パフォーマンスチューニングとは?
2. パフォーマンスチューニングとは?

パフォーマンスチューニングとは、「処理を速くする工夫」のことです。たくさんの人が同時にアクセスしても、サクサク動くようにするための調整です。

たとえば、レストランで1人のシェフが全部の料理を作るより、数人で分担して同時に調理すれば、早く提供できますよね。それと同じです。

3. キャッシュってなに?

3. キャッシュってなに?
3. キャッシュってなに?

キャッシュとは、「一度計算した結果を覚えておいて、次に同じ質問が来たら早く答える仕組み」です。

たとえば、「今日の天気」を5分ごとに答えるAPIなら、同じ質問に毎回同じ答えを出すので、何度も計算するのはムダです。

そんなとき、前回の答えを覚えておくと、すぐ返せるので速くなります。

4. Flaskでキャッシュを使う

4. Flaskでキャッシュを使う
4. Flaskでキャッシュを使う

Flaskでキャッシュ機能を使うには、functools.lru_cacheというPython標準の仕組みが便利です。

以下は、数字を2倍にするAPIにキャッシュをつける例です。


from flask import Flask, request, jsonify
from functools import lru_cache

app = Flask(__name__)

@lru_cache(maxsize=100)  # 最大100件まで記憶
def slow_calculation(x):
    import time
    time.sleep(2)  # 時間がかかる処理(2秒)
    return x * 2

@app.route('/double')
def double():
    num = int(request.args.get('num', 0))
    result = slow_calculation(num)
    return jsonify({'result': result})

if __name__ == '__main__':
    app.run(debug=True)

このAPIは最初は2秒かかりますが、2回目以降はキャッシュにより一瞬で返ります。

5. 並列処理ってなに?

5. 並列処理ってなに?
5. 並列処理ってなに?

並列処理(へいれつしょり)とは、「同時に複数のことをやる方法」です。

料理をするときに、ご飯を炊きながらスープを温めると時間が節約できますよね? それが並列処理です。

Flaskでは、たくさんの人が同時にアクセスしても、処理が順番待ちにならないようにするのがポイントです。

6. Flaskで並列処理するには?

6. Flaskで並列処理するには?
6. Flaskで並列処理するには?

Flask自体は1つずつしかリクエストを処理できないことがあります。なので、threaded=Trueや、gunicornという外部ツールを使って、複数同時に処理する仕組みを入れます。


# Flaskをマルチスレッドで起動する例
if __name__ == '__main__':
    app.run(debug=True, threaded=True)

また、本番環境ではgunicorn(グニコーン)という専用の実行ツールを使うのが一般的です。


gunicorn -w 4 -b 0.0.0.0:5000 app:app

このコマンドでは、-w 4で「4つ同時に処理できる」ようにします。

7. キャッシュと並列処理の注意点

7. キャッシュと並列処理の注意点
7. キャッシュと並列処理の注意点

キャッシュの注意点:

  • データが古くなると、正しくない情報を返すことがあります。
  • 保存できる件数に上限があるため、使いすぎるとメモリがいっぱいになります。

並列処理の注意点:

  • 同じデータを同時に書き換えると、データが壊れることがあります。
  • 外部ツールを使うには少し設定が必要です。

8. FlaskのAPIを速くする現実的なステップ

8. FlaskのAPIを速くする現実的なステップ
8. FlaskのAPIを速くする現実的なステップ

まずは@lru_cacheでキャッシュをつけて、APIの反応を速くしましょう。

次に、threaded=Trueで同時処理できるようにしてみてください。もし本格的に速さを求めるならgunicornのようなツールも試しましょう。

どちらもプログラミング初心者でも、少しずつ実験して覚えていける内容です。

まとめ

まとめ
まとめ

FlaskでAPIを構築するときに欠かせない高速化の基本として、きゃっしゅ機能と並列処理の仕組みはとても大切であり、初心者でも取り組みやすい効果的な最適化方法です。とくに、同じ計算結果を何度も返す類のAPIでは、きゃっしゅが大きな力を発揮し、複雑な処理や時間のかかる演算を毎回最初から行う必要がなくなります。きゃっしゅを導入すると、結果を記憶してすぐに返せるため、利用者が増えても安定した応答速度を保つことができ、さらにサーバー側の負荷も軽減できます。Python標準のlru_cacheは簡単に導入でき、初学者にも扱いやすいのが魅力です。Flaskの基本構造にそのまま組み込める点も安心で、初めて高速化に挑戦する人にとって非常に役立つ選択肢になります。 また、複数の処理を同時に動かす並列処理は、多くのアクセスが同時に来る場面で活躍します。ひとつずつ順番に処理していると待ち時間が増えてしまいますが、並列で実行すれば待ち時間を減らし、利用者によりすばやいレスポンスを届けられます。たとえばthreadedを有効にしてマルチすれっどで処理したり、より本格的な運用環境ではgunicornのような外部ツールを使って複数のworkerを立ち上げることもできます。このような設定を取り入れることで、Flaskで作ったAPIはぐっと実用的になり、アクセスが集中しても安定した動作を保つことができます。 さらに、きゃっしゅや並列処理を利用する際には注意点もおさえておく必要があります。きゃっしゅは古い情報を返す可能性があるため更新間隔や保存数には気を付けなければなりません。並列処理は同時書き込みによるデータ不整合が発生するケースもあるので、工夫が欠かせません。とはいえ、これらの注意点を理解しながら、実際の開発に少しずつ取り入れていくことで、初心者でも安心して高速化の基礎を身につけることができます。 ここでは、これまでに学んだ高速化の流れをふりかえりながら、実際に使えるサンプルの形も確認しておきましょう。以下のコードでは、FlaskのAPIにきゃっしゅと並列処理の要素を組み合わせ、実際の開発でも応用しやすい形にまとめています。こうした実装を手元で試しながら、少しずつ理解を深めていくことで、API高速化の基本がより確かな知識として定着します。

サンプルコード


from flask import Flask, jsonify
from functools import lru_cache
import time

app = Flask(__name__)

@lru_cache(maxsize=200)
def heavy_work(x):
    time.sleep(1)
    return x * 3

@app.route('/triple')
def triple():
    result = heavy_work(10)
    return jsonify({"value": result})

if __name__ == "__main__":
    app.run(threaded=True)
先生と生徒の振り返り会話

生徒

「きょうの学習で、FlaskのAPIはただ作るだけじゃなくて、速く動かす工夫も大切だとわかりました。きゃっしゅがあると、同じ計算を何度もやらなくてもよくなって、とても便利ですね。」

先生

「そのとおりです。特に、重たい処理を何回も実行するAPIはきゃっしゅとの相性がばつぐんです。結果を覚えておくことで時間を大幅に短縮できます。」

生徒

「それから、並列処理の仕組みで、一度に複数のリクエストをさばけるというのもすごく役に立ちそうです。threadedを使うだけでもずいぶん変わりますね。」

先生

「ええ、並列処理を取り入れると、アクセスが増えても待ち時間が少なくなるので、実際のサービスでもとても効果があります。慣れてきたら外部ツールも組み合わせて、より安定した環境を構築していきましょう。」

生徒

「はい!きゃっしゅと並列処理の仕組みを組み合わせることで、FlaskのAPIがどんどん実用的になることが実感できました。これからもいろいろ試してみます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flaskで作ったAPIが遅いとき、どんな対策をすればいいですか?

FlaskのAPIが遅くなる原因には、同じ処理を何度も実行していたり、アクセスが集中して順番待ちになるなどがあります。その対策として「キャッシュ」と「並列処理」を使うと、処理速度が大幅に改善します。
カテゴリの一覧へ
新着記事
New1
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New2
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
New3
Flask
FlaskでCSRF対策を実装する方法!安全なフォーム送信を学ぼう
New4
Python
Pythonの文字列型(str)を完全解説!連結・分割・検索の方法を紹介
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.4
Java&Spring記事人気No4
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.5
Java&Spring記事人気No5
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.6
Java&Spring記事人気No6
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.7
Java&Spring記事人気No7
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.8
Java&Spring記事人気No8
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策