カテゴリ: Flask 更新日: 2026/01/06

FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策

Flaskアプリのセキュリティ設定(SECRET_KEYなど)の管理方法
Flaskアプリのセキュリティ設定(SECRET_KEYなど)の管理方法

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

生徒

「Flaskアプリを作ってるんですが、SECRET_KEYって何に使うんですか?」

先生

SECRET_KEYは、Flaskのセキュリティにとってとても大切な設定です。特にセッションやCookie(クッキー)などの情報を守るために使います。」

生徒

「それって、どうやって設定すればいいんですか?」

先生

「それでは、FlaskのSECRET_KEYの安全な設定方法について、基本からわかりやすく説明しましょう!」

1. FlaskのSECRET_KEYとは?

1. FlaskのSECRET_KEYとは?
1. FlaskのSECRET_KEYとは?

SECRET_KEY(シークレットキー)は、Flaskアプリの「秘密の合言葉」のようなもので、アプリが保存する大切な情報(セッションやCookie)を安全に扱うために使われます。たとえばログイン中かどうか、画面を移動しても保持したい情報などが対象です。

主に以下の目的で使われます:

  • セッション(ログイン状態など)の暗号化・保護
  • Cookieの改ざん防止(内容を勝手に書き換えられないようにする)
  • CSRF対策(フォームの不正送信を防ぐ)

もしSECRET_KEYが他人に知られてしまうと、セッション情報が偽装されたり、フォーム送信が悪用されたりする危険があります。つまり、SECRET_KEYはFlaskアプリのセキュリティを支える土台なので、推測されにくい文字列を使い、外部に漏れないように管理することが重要です。

初心者向け:SECRET_KEYが関わるイメージ(ミニサンプル)

下の例は、「Flaskでセッションに値を保存して、次のページでも表示する」簡単な動きです。セッションの中身が安全に扱われるために、裏側でSECRET_KEYが使われます。


from flask import Flask, session

app = Flask(__name__)
app.config['SECRET_KEY'] = 'ここは本当はランダムな長い文字列にする'

@app.route('/')
def index():
    session['name'] = 'はじめてのFlask'
    return '保存しました(/show に移動してみてください)'

@app.route('/show')
def show():
    return 'セッションの値:' + session.get('name', '未保存')

このサンプルでは、session['name']に入れた値を/showで取り出しています。ここでSECRET_KEYが弱かったり漏れたりすると、「セッションの内容を改ざんされる」リスクが高まります。だからこそ、FlaskのSECRET_KEYは安全な値を使うことが大切です。

2. なぜSECRET_KEYを安全に管理する必要があるのか?

2. なぜSECRET_KEYを安全に管理する必要があるのか?
2. なぜSECRET_KEYを安全に管理する必要があるのか?

Flaskでは、ログイン状態や一時的なデータを「セッション」として保存しますが、その中身はSECRET_KEYを使って保護されています。このキーがあることで、「この情報は本当にこのアプリが作ったものか?」をFlask自身が判断できます。

もしSECRET_KEYが外部に漏れてしまうと、第三者がセッション情報を自作し、本物のユーザーになりすますことも理論上は可能になります。見た目は同じでも、中身が偽物のデータを送り込めてしまうため、とても危険です。

たとえば「ログイン済み」という情報が改ざんされると、本来は入れないページにアクセスできてしまうケースも考えられます。これは初心者のうちは気づきにくい落とし穴です。

初心者向け:安全でない場合のイメージ

次のように、決まりきった短い文字列をSECRET_KEYに使っていると、安全とは言えません。


from flask import Flask

app = Flask(__name__)
app.config['SECRET_KEY'] = 'password'

このようなキーは推測されやすく、攻撃の対象になりやすい設定です。SECRET_KEYはアプリの「合鍵」のようなものなので、簡単に想像できる値は避け、他人に知られないよう大切に管理する必要があります。

3. SECRET_KEYの設定方法

3. SECRET_KEYの設定方法
3. SECRET_KEYの設定方法

ここでは、FlaskアプリにSECRET_KEYを設定するいちばん基本のやり方を紹介します。ポイントは「毎回同じにならない、推測されにくい文字列を使うこと」です。短い単語や覚えやすい文字列だと安全性が下がるので、まずはPythonの機能で安全なキーを作る方法から押さえましょう。

次のようにapp.configへ設定します。


from flask import Flask
import secrets

app = Flask(__name__)
app.config['SECRET_KEY'] = secrets.token_hex(16)  # 32文字の安全なキーを自動生成

secrets.token_hex(16)は、Python標準の安全な乱数機能で、毎回ランダムな文字列を作ってくれます。引数の16は「何バイト分の乱数を作るか」を表し、結果として16バイト → 32文字(16進数)のキーになります。見た目が長くて複雑なのは正常で、それが安全につながります。

初心者向け:生成されたSECRET_KEYの例を確認する

「実際にどんな文字列が出るの?」と不安な方は、まずキーを作って表示してみるとイメージがつかめます。


import secrets

print(secrets.token_hex(16))

実行すると、毎回違うランダムな文字列が出力されます。こうして作った値をFlaskのSECRET_KEYに設定すると、セッションやCookieを守るための土台が整います。

4. .envファイルでSECRET_KEYを管理する

4. .envファイルでSECRET_KEYを管理する
4. .envファイルでSECRET_KEYを管理する

SECRET_KEYをコード内に直接書くのは、セキュリティ上よくありません。代わりに.envというファイルに保存して、Flaskアプリがそこから読み取る方法をおすすめします。

.envファイルとは、「環境変数(かんきょうへんすう)」という設定情報を外部で管理するためのファイルです。例えるなら、鍵の置き場所を秘密のメモ帳に書いておくようなものです。

以下のような構成にします:


project/
├── app.py
├── .env
└── requirements.txt

.envファイルの中身:


SECRET_KEY=あなたのとても長くて安全なキー

5. Pythonで.envからSECRET_KEYを読み込む

5. Pythonで.envからSECRET_KEYを読み込む
5. Pythonで.envからSECRET_KEYを読み込む

python-dotenvというライブラリを使うと、.envファイルの内容を簡単に読み込むことができます。

まずは、次のコマンドでインストールします:


pip install python-dotenv

次に、Flaskアプリでこのように書きます:


from flask import Flask
from dotenv import load_dotenv
import os

load\_dotenv()

app = Flask(**name**)
app.config\['SECRET\_KEY'] = os.getenv('SECRET\_KEY')

load\_dotenv()は、.envファイルを読み込み、os.getenv()でその中の変数を取得できます。

6. .envファイルは.gitignoreに追加しよう

6. .envファイルは.gitignoreに追加しよう
6. .envファイルは.gitignoreに追加しよう

.envファイルをGitHubなどにアップロードしてしまうと、誰でも見れてしまいます。それを防ぐには、.gitignoreファイルに以下のように追加します:


.env

これで、.envファイルはGitの管理対象から外れ、安全に保管されます。

7. セキュリティ対策としてのSECRET_KEYのまとめ方

7. セキュリティ対策としてのSECRET_KEYのまとめ方
7. セキュリティ対策としてのSECRET_KEYのまとめ方

ここまでのポイントをまとめると:

  • SECRET_KEYはセッションやCookieを守る鍵
  • セキュリティのためにランダムな文字列を使う
  • コードに直接書かず、.envファイルで管理する
  • python-dotenvで読み込む
  • .gitignoreでGitに含めないようにする

このように安全にSECRET_KEYを管理することで、Flaskアプリのセキュリティレベルが大きく向上します。初心者でもできる簡単な工夫で、安全なアプリ開発ができますよ。

まとめ

まとめ
まとめ

FlaskアプリケーションにおけるSECRET_KEYの役割や設定方法について、この記事では基礎から応用まで丁寧に整理してきました。特に初心者にとって、SECRET_KEYという言葉は何となく難しそうに見えるかもしれませんが、その本質は「アプリの重要な情報を守るための鍵」であり、Webアプリケーションに欠かせないセキュリティ要素のひとつです。セッションの改ざん防止、Cookieの保護、そしてフォームの不正送信を防ぐCSRF対策など、多くの仕組みの根本にこのSECRET_KEYが関わっています。この鍵が安全に保たれているかどうかで、アプリケーション全体の信頼性は大きく変わります。 記事で取り上げたように、SECRET_KEYをランダムで十分に長い値にすることはセキュリティ強化の第一歩です。Pythonにはsecretsという安全性の高い乱数生成モジュールがあり、これを使えば簡単に強力な鍵を作ることができます。安全な鍵を生成できたとしても、コードへ直接書き込んでしまうと第三者に見られる可能性が高まり危険です。そのため、.envファイルを活用して環境変数として外部管理し、アプリ側はpython-dotenvで読み込むという構成が非常に有効です。この方法により、ソースコードを公開しても鍵が漏えいするリスクを最小限に抑えることができます。 また、.envファイルを.gitignoreに登録することも忘れてはいけません。GitHubなどに誤ってアップロードしてしまうと、どれだけ強力な鍵でも簡単に第三者に見られてしまうため、管理の仕方は非常に重要です。Flaskアプリを安全に運用するためには、技術的な知識とあわせてこうした小さなルールの積み重ねが大切であり、それが全体のセキュリティ品質を大きく左右します。この記事の内容をもとに、自分のFlaskアプリにどのようにSECRET_KEYを設定し、どのように管理していくべきかを意識しておくことで、より安全で安心できるWebアプリケーション開発へつながります。以下では、実際に使えるサンプルコードを通して実践的な確認を行っていきます。

安全なSECRET_KEY設定のサンプルコード


# secretsモジュールで自動生成したSECRET_KEYを使う例
from flask import Flask
import secrets

app = Flask(__name__)
app.config['SECRET_KEY'] = secrets.token_hex(32)  # 64文字の安全なキーを生成

# テスト用ルート
@app.route("/")
def index():
    return "安全なSECRET_KEYが設定されています!"

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

# .envでSECRET_KEYを管理する場合の例
from flask import Flask
from dotenv import load_dotenv
import os

load_dotenv()  # .envを読み込む

app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')

@app.route("/")
def home():
    return "環境変数からSECRET_KEYを読み込みました!"

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

このサンプルでは、ランダム生成したキーを使う方法と、.envファイルで安全に管理する方法の両方を紹介しました。どちらもFlaskアプリのセキュリティを高めるうえで非常に重要な取り組みであり、初心者でも簡単に実践できます。アプリが大きくなるほど取り扱うデータも増え、セキュリティの重要度も自然と高まります。そのため、小さなアプリの段階からSECRET_KEYの扱いを正しく理解し、安全な方法で管理する習慣を身につけておくことが重要です。今回の記事を通して、鍵の重要性と管理方法のポイントがしっかり整理できたのではないでしょうか。Flaskを用いたWebアプリケーション開発においては、セキュリティを軽視せず、常に最新の知識と正しい運用を心がけることが大切です。

先生と生徒の振り返り会話

生徒

「SECRET_KEYってこんなに大事だったんですね。最初は単なる設定のひとつだと思っていました…!」

先生

「そうですね。鍵が漏れるとセッションやCookieが簡単に改ざんされる危険があり、アプリの安全性に大きく関わってくるので慎重に扱う必要があります。」

生徒

「secretsモジュールでランダムなキーを作る方法も便利でした。これなら自分でも安全なキーが簡単に作れそうです!」

先生

「さらにコードに直接書かず、.envで管理するのがポイントですね。環境変数で管理すればキーを外に漏らす心配も減ります。」

生徒

「.gitignore に追加するのを忘れないようにします!危うくGitHubに公開してしまうところでした…。」

先生

「とても大事な習慣ですね。今回学んだ内容をしっかり活かして、安全なFlaskアプリを作っていきましょう。」

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

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

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

FlaskのSECRET_KEYとは何ですか?どんな役割がありますか?

FlaskのSECRET_KEYは、セッション情報の暗号化やCookieの改ざん防止、CSRF対策といったセキュリティ機能に使われる重要な設定です。このキーが漏れると、ユーザーの情報が第三者に悪用されるリスクがあります。
カテゴリの一覧へ
新着記事
New1
Flask
Flaskアプリのセキュリティテストを効率的に行う方法まとめ
New2
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New3
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New4
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.6
Java&Spring記事人気No6
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説