カテゴリ: Flask 更新日: 2026/03/09

Flaskでのキャッシュ活用術!RedisやMemcachedでWebサイトを高速化する方法

Flaskでメモリキャッシュ(Redis/Memcached)を使う方法まとめ
Flaskでメモリキャッシュ(Redis/Memcached)を使う方法まとめ

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

生徒

「Flaskで作ったWebサイトの動きが少し遅い気がします。もっと速く表示する方法はありませんか?」

先生

「Webサイトを速くするにはキャッシュという仕組みがとても有効です。一度計算した結果を保存しておいて、次からはその保存データを使う手法ですね。」

生徒

「キャッシュを使うにはどうすればいいんでしょうか?RedisとかMemcachedという言葉を聞いたことがありますが、難しそうです。」

先生

「大丈夫ですよ。Flaskには専用の拡張機能があるので、初心者の方でも準備さえ整えば簡単に導入できます。まずは基本から一緒に見ていきましょう!」

1. キャッシュとは何かを身近な例で知ろう

1. キャッシュとは何かを身近な例で知ろう
1. キャッシュとは何かを身近な例で知ろう

キャッシュという言葉は、プログラミングの世界では「一時的な保存場所」という意味で使われます。例えば、あなたが料理を作るとき、毎回スーパーに買い物に行くのは大変ですよね。あらかじめ冷蔵庫によく使う食材を入れておけば、料理の時間を大幅に短縮できます。この「冷蔵庫」の役割を果たすのがキャッシュです。

Webサイトの場合、ユーザーがページを開くたびにデータベースから情報を探したり、複雑な計算を行ったりすると時間がかかってしまいます。そこで、一度表示した内容を「キャッシュ」として保存しておき、二回目以降はそこからデータを取り出すことで、パソコンの処理待ち時間を減らし、サクサク動くサイトを作ることができるのです。

特にFlaskのようなWebフレームワークでは、このキャッシュをいかに使いこなすかが、プロのエンジニアへの第一歩となります。パフォーマンスの最適化とは、無駄な作業を減らして効率を上げることだと考えてください。

2. メモリキャッシュの二大巨頭!RedisとMemcached

2. メモリキャッシュの二大巨頭!RedisとMemcached
2. メモリキャッシュの二大巨頭!RedisとMemcached

キャッシュを保存する場所として有名なのが「Redis」と「Memcached」です。これらはどちらも「インメモリデータベース」と呼ばれます。通常のデータベースがハードディスクなどにデータを書き込むのに対し、これらはパソコンの「メインメモリ(一時的にデータを広げる作業机のような場所)」にデータを保存します。

メインメモリは読み書きの速度が非常に速いため、一瞬でデータを取り出すことが可能です。それぞれの特徴を簡単に解説します。

  • Redis(レディス): 多機能な保存箱です。文字だけでなく、リストや図形のような複雑なデータ形式も扱えます。最近のWeb開発では最も人気があります。
  • Memcached(メムキャッシュド): シンプルさを追求した保存箱です。機能は少ないですが、その分非常に軽くて扱いやすいのが特徴です。

初心者のうちは、まずは多機能で情報も多いRedisを使えるようになることを目標にするのがおすすめです。

3. Flaskでキャッシュを扱うための準備

3. Flaskでキャッシュを扱うための準備
3. Flaskでキャッシュを扱うための準備

Flaskでキャッシュ機能を使うには「Flask-Caching」という拡張ライブラリをインストールするのが一般的です。これを使うことで、RedisやMemcachedとの接続をとても楽に行うことができます。

まずは、パソコンのコマンドプロンプトやターミナルで、必要な道具を揃えましょう。以下のコマンドを入力してインストールします。ここではRedisを使う前提で進めます。


# Flask-CachingとRedis用のライブラリをインストールします
# pip install Flask-Caching redis

これで準備は完了です。次に、Flaskのプログラムの中で「どこにキャッシュを保存するか」を設定していきます。プログラムの最初の方で、キャッシュの設定を書き込むのが基本の形です。

4. Redisを使ったキャッシュの基本設定

4. Redisを使ったキャッシュの基本設定
4. Redisを使ったキャッシュの基本設定

それでは、実際にFlaskのプログラムでRedisを使ってみましょう。以下のコードは、Redisをキャッシュサーバーとして指定し、Flaskアプリに組み込む最もシンプルな書き方です。


from flask import Flask
from flask_caching import Cache

app = Flask(__name__)

# キャッシュの設定
config = {
    "CACHE_TYPE": "RedisCache",  # Redisを使うという宣言
    "CACHE_REDIS_HOST": "localhost",  # Redisが動いている場所
    "CACHE_REDIS_PORT": 6379,  # Redis専用の番号
    "CACHE_DEFAULT_TIMEOUT": 300  # 300秒間データを保存する
}

app.config.from_mapping(config)
cache = Cache(app)

@app.route("/")
@cache.cached()  # このページの内容を丸ごと保存する魔法の言葉
def index():
    return "これはキャッシュされたページです!"

if __name__ == "__main__":
    app.run()

このプログラムでは、@cache.cached()という記述を使っています。これを「デコレータ」と呼びます。これをつけるだけで、Flaskはこの関数が返す結果を自動的にRedisに保存し、次回から計算を飛ばして結果だけを表示してくれるようになります。

5. 特定のデータだけを保存するビューキャッシュ

5. 特定のデータだけを保存するビューキャッシュ
5. 特定のデータだけを保存するビューキャッシュ

ページ全体ではなく、特定の計算結果やデータベースから取得した値だけを保存したい場合もあります。例えば、最新のニュース一覧や、天気の情報などです。これらは頻繁に変わるものではないため、数分間キャッシュしておくだけでサーバーの負担が激減します。

以下のコードでは、特定の関数に対してキャッシュを適用する方法を紹介します。引数(関数に渡す値)ごとに結果を保存できるので、とても便利です。


@app.route("/user/<name>")
@cache.memoize(timeout=60)  # 名前ごとに60秒間結果を覚える
def hello_user(name):
    # ここで本来は難しい計算をしたりDBを探したりします
    return f"こんにちは、{name}さん!これは個別のキャッシュです。"

memoize(メモイズ)という機能を使うと、「この名前のときはこの結果」というふうに、賢く記憶してくれます。これにより、同じユーザーが何度もアクセスした際に、瞬時にレスポンスを返すことが可能になります。

6. キャッシュを消去して最新の状態にする方法

6. キャッシュを消去して最新の状態にする方法
6. キャッシュを消去して最新の状態にする方法

キャッシュは便利ですが、困ったこともあります。それは「元のデータが変わっても、古いキャッシュが残っていると古い情報が表示され続けてしまう」という点です。これを防ぐために、意図的にキャッシュを消去(クリア)する必要があります。

例えば、ブログの記事を更新した直後には、古いキャッシュを捨てて新しい内容を表示させたいですよね。そのようなときは、以下のようにコードを書きます。


@app.route("/update-post")
def update_post():
    # 記事を更新する処理がここにあるとします
    # ...
    
    # 既存のキャッシュを消します
    cache.delete("index") 
    return "更新完了!古いキャッシュを消去しました。"

cache.deleteを使うことで、特定の名前がついたキャッシュをピンポイントで消すことができます。また、cache.clear()を使えば、全ての保存データを一度に空にすることも可能です。状況に合わせて使い分けましょう。

7. Memcachedを使う場合の設定方法

7. Memcachedを使う場合の設定方法
7. Memcachedを使う場合の設定方法

もしRedisではなくMemcachedを使いたい場合も、設定を少し変えるだけで対応できます。Memcachedは非常にシンプルで枯れた技術なので、安定性を求めるシステムでよく使われます。

設定の変更点は以下の通りです。プログラムの構造自体はRedisのときとほとんど変わりません。これがFlask-Cachingというライブラリの素晴らしいところです。


# Memcachedを使うときの設定例
config = {
    "CACHE_TYPE": "MemcachedCache",
    "CACHE_MEMCACHED_SERVERS": ["127.0.0.1:11211"],
    "CACHE_DEFAULT_TIMEOUT": 600
}
app.config.from_mapping(config)
cache = Cache(app)

このように、CACHE_TYPEを書き換えるだけで、接続先を切り替えられます。どちらを使うかはプロジェクトの規模や好みによりますが、まずは自分のパソコンで動かしやすい方から試してみるのが良いでしょう。

8. パフォーマンス最適化のための注意点

8. パフォーマンス最適化のための注意点
8. パフォーマンス最適化のための注意点

キャッシュを使えば何でも速くなるわけではありません。初心者が陥りやすい罠がいくつかあります。

一つ目は「更新頻度の高いデータにキャッシュをかけてしまうこと」です。株価のように一秒ごとに変わる情報をキャッシュしてしまうと、ユーザーは常に古い情報を見ることになり、不信感に繋がります。

二つ目は「メモリの容量不足」です。メモリは無限ではありません。あまりに大量のデータを保存しようとすると、古いデータから消えていったり、最悪の場合はサーバーが止まったりすることもあります。必要なものだけを、適切な時間(タイムアウト)設定で保存することが、最適化の極意です。

Webサイトを速くすることは、ユーザーの満足度を上げ、検索エンジンの評価(SEO)を高めることにも直結します。Flaskのキャッシュ機能をマスターして、ストレスのない快適なWebアプリを作成しましょう。

カテゴリの一覧へ
新着記事
New1
Flask
FlaskでAPIのレスポンスをキャッシュ!通信負荷を軽減して爆速にする方法
New2
Flask
Flaskで多対多のリレーションを作る!中間テーブルの基本構造を学ぼう
New3
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルール
New4
Flask
Flask-MailでHTMLメールを送る方法!初心者でも見栄えの良いメールを送信しよう
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.3
Java&Spring記事人気No3
Flask
Flaskのパフォーマンス改善ガイド!初心者でもわかるキャッシュと高速化の基本
No.4
Java&Spring記事人気No4
Python
Pythonの実行方法まとめ!インタラクティブシェル・スクリプト・ターミナル実行を比較解説
No.5
Java&Spring記事人気No5
Django
Djangoの仕組みを5分で理解!URL・View・Templateの流れを超やさしく解説
No.6
Java&Spring記事人気No6
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.7
Java&Spring記事人気No7
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説